Added double negation to clean code
This commit is contained in:
parent
eff67b7697
commit
ec5ca51602
@ -26,10 +26,16 @@ namespace EFB.Controllers
|
|||||||
{
|
{
|
||||||
//Retrieve and Check current user status
|
//Retrieve and Check current user status
|
||||||
UserModel user = HttpContext.Session.GetObject<UserModel>("User");
|
UserModel user = HttpContext.Session.GetObject<UserModel>("User");
|
||||||
if(user == null) return RedirectToAction("Index", "Home");
|
if(user == null){
|
||||||
|
TempData["Error"] = "You must be logged in before you are able to view the FlightSim Page";
|
||||||
|
return RedirectToAction("Index", "Home");
|
||||||
|
}
|
||||||
|
|
||||||
//Retrieve the user's latest sim position and construct it into FlightsimModel
|
//Retrieve the user's latest sim position and construct it into FlightsimModel
|
||||||
if (user.Route == null) return RedirectToAction("Index", "Route");
|
if (user.Route == null){
|
||||||
|
TempData["Error"] = "You must have a route planned before you are able to view the Flightsim page";
|
||||||
|
return RedirectToAction("Index", "Route");
|
||||||
|
}
|
||||||
|
|
||||||
SimPositionModel latestPositionModel = await Mongo.GetLatestData(user.EMail);
|
SimPositionModel latestPositionModel = await Mongo.GetLatestData(user.EMail);
|
||||||
|
|
||||||
|
@ -46,157 +46,150 @@ namespace EFB.Controllers
|
|||||||
public async Task<IActionResult> New(string departure, string arrival, string cruise)
|
public async Task<IActionResult> New(string departure, string arrival, string cruise)
|
||||||
{
|
{
|
||||||
UserModel user = HttpContext.Session.GetObject<UserModel>("User");
|
UserModel user = HttpContext.Session.GetObject<UserModel>("User");
|
||||||
if (!(user == null || user.UserToken.IsExpired()))
|
if (user == null || user.UserToken.IsExpired())
|
||||||
{//If the user is still authenticated
|
{//If the user is still authenticated
|
||||||
if (FormAuthenticator.ValidateICAOCode(departure) && FormAuthenticator.ValidateICAOCode(arrival))
|
return RedirectToAction("Index", "Home");
|
||||||
{//If the user has entered valid ICAOs
|
}
|
||||||
|
|
||||||
uint cruiseAlt;
|
if (!FormAuthenticator.ValidateICAOCode(departure) || !FormAuthenticator.ValidateICAOCode(arrival))
|
||||||
|
{//If the user has entered valid ICAOs
|
||||||
|
TempData["Error"] = "Invalid Departure or Arrival ICAO";
|
||||||
|
return RedirectToAction("Index", "Route");
|
||||||
|
}
|
||||||
|
|
||||||
if (uint.TryParse(cruise, out cruiseAlt) && FormAuthenticator.ValidateCruiseAlt(cruiseAlt))
|
uint cruiseAlt;
|
||||||
{//If the cruise altitude if within limits.
|
|
||||||
|
|
||||||
//Submit route request...
|
if (uint.TryParse(cruise, out cruiseAlt) && FormAuthenticator.ValidateCruiseAlt(cruiseAlt))
|
||||||
APIInterface API = new APIInterface();
|
{//If the cruise altitude if within limits.
|
||||||
|
|
||||||
//Prepare data to be send off with request (route)
|
//Submit route request...
|
||||||
Dictionary<string, string> headerData = new Dictionary<string, string>();
|
APIInterface API = new APIInterface();
|
||||||
headerData.Add("Authorization", $"Bearer {user.UserToken.TokenValue}");
|
|
||||||
|
|
||||||
RouteRequest routeRequest = new RouteRequest()
|
//Prepare data to be send off with request (route)
|
||||||
{
|
Dictionary<string, string> headerData = new Dictionary<string, string>();
|
||||||
departure = departure,
|
headerData.Add("Authorization", $"Bearer {user.UserToken.TokenValue}");
|
||||||
destination = arrival,
|
|
||||||
preferredminlevel = cruiseAlt / 1000,
|
|
||||||
preferredmaxlevel = cruiseAlt / 1000,
|
|
||||||
};
|
|
||||||
StringContent content = new StringContent(JsonConvert.SerializeObject(routeRequest), Encoding.UTF8, "application/json");
|
|
||||||
|
|
||||||
//Make initial Route Request
|
RouteRequest routeRequest = new RouteRequest()
|
||||||
var requestRoute = API.Post<string>("https://api.autorouter.aero/v1.0/router", headerData, content);
|
{
|
||||||
|
departure = departure,
|
||||||
|
destination = arrival,
|
||||||
|
preferredminlevel = cruiseAlt / 1000,
|
||||||
|
preferredmaxlevel = cruiseAlt / 1000,
|
||||||
|
};
|
||||||
|
StringContent content = new StringContent(JsonConvert.SerializeObject(routeRequest), Encoding.UTF8, "application/json");
|
||||||
|
|
||||||
ResponseModel<string> responseRoute = await requestRoute;
|
//Make initial Route Request
|
||||||
|
var requestRoute = API.Post<string>("https://api.autorouter.aero/v1.0/router", headerData, content);
|
||||||
|
|
||||||
if (responseRoute.Error == null)
|
ResponseModel<string> responseRoute = await requestRoute;
|
||||||
{//Update User session and add route ID
|
|
||||||
TokenModel routeToken = new TokenModel()
|
|
||||||
{
|
|
||||||
TokenValue = responseRoute.Result.ToString()
|
|
||||||
};
|
|
||||||
|
|
||||||
user.RouteToken = routeToken;
|
if (responseRoute.Error == null)
|
||||||
HttpContext.Session.SetObject("User", user);
|
{//Update User session and add route ID
|
||||||
|
TokenModel routeToken = new TokenModel()
|
||||||
|
{
|
||||||
|
TokenValue = responseRoute.Result.ToString()
|
||||||
|
};
|
||||||
|
|
||||||
return await Poll(departure, arrival, cruiseAlt);
|
user.RouteToken = routeToken;
|
||||||
|
HttpContext.Session.SetObject("User", user);
|
||||||
|
|
||||||
}
|
return await Poll(departure, arrival, cruiseAlt);
|
||||||
|
|
||||||
TempData["Error"] = responseRoute.Error;
|
|
||||||
return RedirectToAction("Index", "Route");
|
|
||||||
|
|
||||||
}
|
|
||||||
TempData["Error"] = "Invalid Cruise Altitude";
|
|
||||||
TempData["Departure"] = departure;
|
|
||||||
TempData["Arrival"] = arrival;
|
|
||||||
return RedirectToAction("Index", "Route");
|
|
||||||
|
|
||||||
}
|
}
|
||||||
TempData["Error"] = "Invalid Departure or Arrival ICAO";
|
|
||||||
|
TempData["Error"] = responseRoute.Error;
|
||||||
return RedirectToAction("Index", "Route");
|
return RedirectToAction("Index", "Route");
|
||||||
|
|
||||||
}
|
}
|
||||||
return RedirectToAction("Index", "Home");
|
TempData["Error"] = "Invalid Cruise Altitude";
|
||||||
|
TempData["Departure"] = departure;
|
||||||
|
TempData["Arrival"] = arrival;
|
||||||
|
return RedirectToAction("Index", "Route");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public async Task<IActionResult> Poll(string departure, string arrival, uint cruise)
|
public async Task<IActionResult> Poll(string departure, string arrival, uint cruise)
|
||||||
{
|
{
|
||||||
if (HttpContext.Session.GetString("User") != null)
|
if (HttpContext.Session.GetString("User") == null)
|
||||||
{//If the user is currently logged in
|
{//If the user is not currently logged in
|
||||||
UserModel user = HttpContext.Session.GetObject<UserModel>("User");
|
TempData["Error"] = "Please login before trying to plan a route";
|
||||||
|
|
||||||
if (user.RouteToken != null)
|
|
||||||
{//If the user has a route object (e.g, they have been to the route page)
|
|
||||||
|
|
||||||
//Make calls to the server to fetch route
|
|
||||||
bool collected = false;
|
|
||||||
int pollCount = 0;
|
|
||||||
string routeString = "";
|
|
||||||
|
|
||||||
APIInterface API = new APIInterface();
|
|
||||||
Dictionary<string, string> headerData = new Dictionary<string, string>();
|
|
||||||
|
|
||||||
/*-----Chart Fetching Operations--------*/
|
|
||||||
|
|
||||||
var requestDepartureCharts = ChartModel.FetchAsync(departure);
|
|
||||||
var requestArrivalCharts = ChartModel.FetchAsync(arrival);
|
|
||||||
|
|
||||||
/*----------------------------------*/
|
|
||||||
|
|
||||||
//Run route Polling
|
|
||||||
headerData.Add("Authorization", $"Bearer {user.UserToken.TokenValue}");
|
|
||||||
|
|
||||||
while (collected == false && pollCount < 15)
|
|
||||||
{
|
|
||||||
//Make Polling Request
|
|
||||||
var pollingRequest = API.Put<List<PollResponse>>($"https://api.autorouter.aero/v1.0/router/{user.RouteToken.TokenValue}/longpoll", headerData, null);
|
|
||||||
|
|
||||||
ResponseModel<List<PollResponse>> responsePoll = await pollingRequest;
|
|
||||||
|
|
||||||
foreach (var item in responsePoll.Result)
|
|
||||||
{
|
|
||||||
if (item.Command == "notvalid" || item.Command == "solution")
|
|
||||||
{
|
|
||||||
collected = true;
|
|
||||||
routeString = item.FlightPlan;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Thread.Sleep(3000);
|
|
||||||
pollCount++;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (collected)
|
|
||||||
{
|
|
||||||
//Get Response from Charts
|
|
||||||
ChartList departureCharts = await requestDepartureCharts;
|
|
||||||
if (departureCharts != null)
|
|
||||||
{
|
|
||||||
user.DepartureCharts = new ChartModel(departure, departureCharts);
|
|
||||||
}
|
|
||||||
|
|
||||||
ChartList arrivalCharts = await requestArrivalCharts;
|
|
||||||
if (arrivalCharts != null)
|
|
||||||
{
|
|
||||||
user.ArrivalCharts = new ChartModel(arrival, arrivalCharts);
|
|
||||||
}
|
|
||||||
|
|
||||||
//fill in route
|
|
||||||
string finalRoute = RouteModel.ParseRoute(routeString);
|
|
||||||
user.Route = finalRoute;
|
|
||||||
user.Departure = departure;
|
|
||||||
user.Arrival = arrival;
|
|
||||||
user.Cruise = cruise;
|
|
||||||
HttpContext.Session.SetObject("User", user);
|
|
||||||
|
|
||||||
return RedirectToAction("Index", "Route");
|
|
||||||
}
|
|
||||||
|
|
||||||
TempData["Error"] = $"Unable to get route after {pollCount} Attempts!";
|
|
||||||
return RedirectToAction("Index", "Route");
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return RedirectToAction("Index", "Route");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return RedirectToAction("Index", "Route");
|
return RedirectToAction("Index", "Route");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UserModel user = HttpContext.Session.GetObject<UserModel>("User");
|
||||||
|
|
||||||
|
if (user.RouteToken == null)
|
||||||
|
{//If the user has a route object (e.g, they have been to the route page)
|
||||||
|
return RedirectToAction("Index", "Route");
|
||||||
|
}
|
||||||
|
//Make calls to the server to fetch route
|
||||||
|
bool collected = false;
|
||||||
|
int pollCount = 0;
|
||||||
|
string routeString = "";
|
||||||
|
|
||||||
|
APIInterface API = new APIInterface();
|
||||||
|
Dictionary<string, string> headerData = new Dictionary<string, string>();
|
||||||
|
|
||||||
|
/*-----Chart Fetching Operations--------*/
|
||||||
|
|
||||||
|
var requestDepartureCharts = ChartModel.FetchAsync(departure);
|
||||||
|
var requestArrivalCharts = ChartModel.FetchAsync(arrival);
|
||||||
|
|
||||||
|
/*----------------------------------*/
|
||||||
|
|
||||||
|
//Run route Polling
|
||||||
|
headerData.Add("Authorization", $"Bearer {user.UserToken.TokenValue}");
|
||||||
|
|
||||||
|
while (collected == false && pollCount < 15)
|
||||||
|
{
|
||||||
|
//Make Polling Request
|
||||||
|
var pollingRequest = API.Put<List<PollResponse>>($"https://api.autorouter.aero/v1.0/router/{user.RouteToken.TokenValue}/longpoll", headerData, null);
|
||||||
|
|
||||||
|
ResponseModel<List<PollResponse>> responsePoll = await pollingRequest;
|
||||||
|
|
||||||
|
foreach (var item in responsePoll.Result)
|
||||||
|
{
|
||||||
|
if (item.Command == "notvalid" || item.Command == "solution")
|
||||||
|
{
|
||||||
|
collected = true;
|
||||||
|
routeString = item.FlightPlan;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Thread.Sleep(3000);
|
||||||
|
pollCount++;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (collected)
|
||||||
|
{
|
||||||
|
//Get Response from Charts
|
||||||
|
ChartList departureCharts = await requestDepartureCharts;
|
||||||
|
if (departureCharts != null)
|
||||||
|
{
|
||||||
|
user.DepartureCharts = new ChartModel(departure, departureCharts);
|
||||||
|
}
|
||||||
|
|
||||||
|
ChartList arrivalCharts = await requestArrivalCharts;
|
||||||
|
if (arrivalCharts != null)
|
||||||
|
{
|
||||||
|
user.ArrivalCharts = new ChartModel(arrival, arrivalCharts);
|
||||||
|
}
|
||||||
|
|
||||||
|
//fill in route
|
||||||
|
string finalRoute = RouteModel.ParseRoute(routeString);
|
||||||
|
user.Route = finalRoute;
|
||||||
|
user.Departure = departure;
|
||||||
|
user.Arrival = arrival;
|
||||||
|
user.Cruise = cruise;
|
||||||
|
HttpContext.Session.SetObject("User", user);
|
||||||
|
|
||||||
|
return RedirectToAction("Index", "Route");
|
||||||
|
}
|
||||||
|
|
||||||
|
TempData["Error"] = $"Unable to get route after {pollCount} Attempts!";
|
||||||
|
return RedirectToAction("Index", "Route");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -31,63 +31,58 @@ namespace EFB.Controllers
|
|||||||
|
|
||||||
public async Task<IActionResult> Login(string email, string password){
|
public async Task<IActionResult> Login(string email, string password){
|
||||||
|
|
||||||
if (Form.FormAuthenticator.ValidateEMail(email))
|
if (!Form.FormAuthenticator.ValidateEMail(email))
|
||||||
{
|
{
|
||||||
//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");
|
|
||||||
}else{
|
|
||||||
|
|
||||||
//Type cast required but we know response will be of known type
|
|
||||||
LoginResponse login = response.Result;
|
|
||||||
|
|
||||||
//Generate User Session
|
|
||||||
if (login.error == null)
|
|
||||||
{
|
|
||||||
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");
|
|
||||||
}else{
|
|
||||||
TempData["Error"] = login.error_description;
|
|
||||||
TempData["email"] = email;
|
|
||||||
return RedirectToAction("Index", "Home");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}else{
|
|
||||||
TempData["Error"] = "Please enter a valid E-Mail";
|
TempData["Error"] = "Please enter a valid E-Mail";
|
||||||
return RedirectToAction("Index", "Home");
|
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(){
|
public IActionResult Logout(){
|
||||||
|
Loading…
Reference in New Issue
Block a user