99 lines
3.0 KiB
C#
99 lines
3.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using System.Net.Http;
|
|
using EFB.Models.JSON;
|
|
using Microsoft.Extensions.Logging;
|
|
using EFB.Models;
|
|
using EFB.Sessions;
|
|
using EFB.Controllers.API;
|
|
|
|
namespace EFB.Controllers
|
|
{
|
|
//[Route("[controller]")]
|
|
public class UserController : Controller
|
|
{
|
|
private readonly ILogger<UserController> _logger;
|
|
|
|
public UserController(ILogger<UserController> logger)
|
|
{
|
|
_logger = logger;
|
|
}
|
|
|
|
public IActionResult Index()
|
|
{
|
|
return View();
|
|
}
|
|
|
|
|
|
public async Task<IActionResult> Login(string email, string password){
|
|
|
|
if (!Form.FormAuthenticator.ValidateEMail(email))
|
|
{
|
|
TempData["Error"] = "Please enter a valid E-Mail";
|
|
return RedirectToAction("Index", "Home");
|
|
}
|
|
|
|
//API Helper
|
|
APIInterface API = new APIInterface();
|
|
|
|
//Dictionary of Formdata to be encoded
|
|
Dictionary<string, string> formData = new Dictionary<string, string>();
|
|
|
|
formData.Add("grant_type", "client_credentials");
|
|
formData.Add("client_id", email);
|
|
formData.Add("client_secret", password);
|
|
|
|
HttpContent content = new FormUrlEncodedContent(formData);
|
|
|
|
var request = API.Post<Models.JSON.LoginResponse>("https://api.autorouter.aero/v1.0/oauth2/token", null, content);
|
|
|
|
//Wait for the response to come through
|
|
ResponseModel<LoginResponse> response = await request;
|
|
|
|
if (response.Error != null)
|
|
{
|
|
TempData["Error"] = response.Error;
|
|
TempData["email"] = email;
|
|
return RedirectToAction("Index", "Home");
|
|
}
|
|
//Type cast required but we know response will be of known type
|
|
LoginResponse login = response.Result;
|
|
|
|
//Generate User Session
|
|
if (login.error != null)
|
|
{
|
|
TempData["Error"] = login.error_description;
|
|
TempData["email"] = email;
|
|
return RedirectToAction("Index", "Home");
|
|
}
|
|
|
|
UserModel user = new UserModel{
|
|
EMail = email,
|
|
UserToken = new TokenModel{
|
|
TokenValue = login.access_token,
|
|
Expiration = DateTime.UtcNow.AddSeconds(login.expires_in)
|
|
}
|
|
};
|
|
|
|
//Using Session Extensions (Store the user session)
|
|
HttpContext.Session.SetObject("User", user);
|
|
return RedirectToAction("Index", "App");
|
|
|
|
}
|
|
|
|
public IActionResult Logout(){
|
|
HttpContext.Session.SetObject("User", null);
|
|
return RedirectToAction("Index", "Home");
|
|
}
|
|
|
|
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
|
public IActionResult Error()
|
|
{
|
|
return View("Error!");
|
|
}
|
|
}
|
|
} |