Compare commits

..

4 Commits

31 changed files with 270 additions and 334 deletions

View File

@ -1,10 +1,8 @@
using System.Collections.Generic;
using System.Text;
using System;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.Net.Http;
using EFB.Models; using EFB.Models;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
namespace EFB.Controllers.API namespace EFB.Controllers.API
{ {
@ -12,10 +10,10 @@ namespace EFB.Controllers.API
{ {
private HttpClient HttpClient { get; set; } private HttpClient HttpClient { get; set; }
public async Task<ResponseModel<T>> Get<T>(string Endpoint, Dictionary<string, string> Headers){ public async Task<ResponseModel<T>> Get<T>(string Endpoint, Dictionary<string, string> Headers)
{
//Create the HTTP client used for the GetRequest.
this.HttpClient = new HttpClient(); this.HttpClient = new HttpClient();
this.HttpClient.DefaultRequestHeaders.Clear(); this.HttpClient.DefaultRequestHeaders.Clear();
if (Headers != null) if (Headers != null)
@ -30,10 +28,9 @@ namespace EFB.Controllers.API
{ {
try try
{ {
//Get the response from the server
var pendingResult = this.HttpClient.GetAsync(Endpoint); var pendingResult = this.HttpClient.GetAsync(Endpoint);
var result = await pendingResult; var result = await pendingResult;
string resultString = result.Content.ReadAsStringAsync().Result; string resultString = result.Content.ReadAsStringAsync().Result;
//Assess return value (object or raw string) //Assess return value (object or raw string)
@ -43,30 +40,29 @@ namespace EFB.Controllers.API
{//If the user requests string for return type {//If the user requests string for return type
response = JsonConvert.DeserializeObject<T>(resultString); response = JsonConvert.DeserializeObject<T>(resultString);
} }
return new ResponseModel<T>()
return new ResponseModel<T>(){ {
//Sender should be aware of type T becuase of Generic type //Sender should be aware of type T becuase of Generic type
Result = (T)response Result = (T)response
}; };
} }
catch (System.Exception e) catch (System.Exception e)
{ {
return new ResponseModel<T>{Error = e.Message}; return new ResponseModel<T> { Error = e.Message };
} }
} }
//Returned in the event No other response has been returned //Returned in the event No other response has been returned
return new ResponseModel<T>{Error = "Invalid Endpoint - Please try again later"}; return new ResponseModel<T> { Error = "Invalid Endpoint - Please try again later" };
} }
public async Task<ResponseModel<T>> Post<T>(string Endpoint, Dictionary<string, string> Headers, HttpContent Body){ public async Task<ResponseModel<T>> Post<T>(string Endpoint, Dictionary<string, string> Headers, HttpContent Body)
{
//Create a HTTP client to allow for making Post requests
this.HttpClient = new HttpClient(); this.HttpClient = new HttpClient();
this.HttpClient.DefaultRequestHeaders.Clear(); this.HttpClient.DefaultRequestHeaders.Clear();
if (Headers != null) if (Headers != null)
{ {//Go through and add each header to the HTTP Client
foreach (var Header in Headers) foreach (var Header in Headers)
{ {
this.HttpClient.DefaultRequestHeaders.Add(Header.Key, Header.Value); this.HttpClient.DefaultRequestHeaders.Add(Header.Key, Header.Value);
@ -75,11 +71,11 @@ namespace EFB.Controllers.API
if (Form.FormAuthenticator.ValidateEndpoint(Endpoint)) if (Form.FormAuthenticator.ValidateEndpoint(Endpoint))
{ {
try{//Try statement to catch errors in the process of making the request try
{//Try statement to catch errors in the process of making the request
var pendingResult = this.HttpClient.PostAsync(Endpoint, Body); var pendingResult = this.HttpClient.PostAsync(Endpoint, Body);
var result = await pendingResult; var result = await pendingResult;
string resultString = result.Content.ReadAsStringAsync().Result; string resultString = result.Content.ReadAsStringAsync().Result;
object response = resultString; object response = resultString;
if (typeof(T) != typeof(string)) if (typeof(T) != typeof(string))
@ -87,28 +83,28 @@ namespace EFB.Controllers.API
response = JsonConvert.DeserializeObject<T>(resultString); response = JsonConvert.DeserializeObject<T>(resultString);
} }
return new ResponseModel<T>(){ return new ResponseModel<T>()
{
//Sender should be aware of type T becuase of Generic type //Sender should be aware of type T becuase of Generic type
Result = (T)response Result = (T)response
}; };
}catch(System.Exception e){ }
return new ResponseModel<T>{Error = e.Message}; catch (System.Exception e)
{
return new ResponseModel<T> { Error = e.Message };
} }
} }
//Returned in the event No other response has been returned //Returned in the event No other response has been returned
return new ResponseModel<T>{Error = "Invalid Endpoint - Please try again later"}; return new ResponseModel<T> { Error = "Invalid Endpoint - Please try again later" };
} }
public async Task<ResponseModel<T>> Put<T>(string Endpoint, Dictionary<string, string> Headers, HttpContent Body)
{
//Create HTTP client to allow for HttpRequests
public async Task<ResponseModel<T>> Put<T>(string Endpoint, Dictionary<string, string> Headers, HttpContent Body){
this.HttpClient = new HttpClient(); this.HttpClient = new HttpClient();
this.HttpClient.DefaultRequestHeaders.Clear(); this.HttpClient.DefaultRequestHeaders.Clear();
if (Headers != null) if (Headers != null)
{ {//Loop through and add each heder to the HTTP client
foreach (var Header in Headers) foreach (var Header in Headers)
{ {
this.HttpClient.DefaultRequestHeaders.Add(Header.Key, Header.Value); this.HttpClient.DefaultRequestHeaders.Add(Header.Key, Header.Value);
@ -117,11 +113,13 @@ namespace EFB.Controllers.API
if (Form.FormAuthenticator.ValidateEndpoint(Endpoint)) if (Form.FormAuthenticator.ValidateEndpoint(Endpoint))
{ {
try{//Try statement to catch errors in the process of making the request try
{//Try statement to catch errors in the process of making the request
var pendingResult = this.HttpClient.PutAsync(Endpoint, Body); var pendingResult = this.HttpClient.PutAsync(Endpoint, Body);
var result = await pendingResult; var result = await pendingResult;
string resultString = result.Content.ReadAsStringAsync().Result; string resultString = result.Content.ReadAsStringAsync().Result;
//Recieve the response as a string which will be morphed in other types
object response = resultString; object response = resultString;
if (typeof(T) != typeof(string)) if (typeof(T) != typeof(string))
@ -129,20 +127,21 @@ namespace EFB.Controllers.API
response = JsonConvert.DeserializeObject<T>(resultString); response = JsonConvert.DeserializeObject<T>(resultString);
} }
return new ResponseModel<T>(){ return new ResponseModel<T>()
{
//Sender should be aware of type T becuase of Generic type //Sender should be aware of type T becuase of Generic type
Result = (T)response Result = (T)response
}; };
}catch(System.Exception e){ }
return new ResponseModel<T>{Error = e.Message}; catch (System.Exception e)
{
return new ResponseModel<T> { Error = e.Message };
} }
} }
//Returned in the event No other response has been returned //Returned in the event No other response has been returned
return new ResponseModel<T>{Error = "Invalid Endpoint - Please try again later"}; return new ResponseModel<T> { Error = "Invalid Endpoint - Please try again later" };
} }
} }
} }

View File

@ -1,13 +1,8 @@
using System; using EFB.Models;
using System.Collections.Generic; using EFB.Sessions;
using System.Diagnostics; using Microsoft.AspNetCore.Http;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using EFB.Models;
using Microsoft.AspNetCore.Http;
using EFB.Sessions;
namespace EFB.Controllers namespace EFB.Controllers
{ {
@ -26,13 +21,13 @@ namespace EFB.Controllers
UserModel user = HttpContext.Session.GetObject<UserModel>("User"); UserModel user = HttpContext.Session.GetObject<UserModel>("User");
if (user == null) if (user == null)
{ {
return RedirectToAction("Index", "Home"); return RedirectToAction("Index", "Home");
} }
if (user.Route == null) if (user.Route == null)
{ {
return RedirectToAction("Index", "Route"); return RedirectToAction("Index", "Route");
} }
return View(user); return View(user);
} }

View File

@ -1,14 +1,9 @@
using System; using EFB.Controllers.Form;
using System.Collections.Generic; using EFB.Models;
using System.Diagnostics; using EFB.Sessions;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using EFB.Models; using System.Threading.Tasks;
using EFB.Models.JSON;
using EFB.Controllers.Form;
using EFB.Sessions;
namespace EFB.Controllers namespace EFB.Controllers
{ {
@ -30,8 +25,8 @@ namespace EFB.Controllers
TempData["Error"] = "Must be logged in to view charts"; TempData["Error"] = "Must be logged in to view charts";
return RedirectToAction("Index", "Home"); return RedirectToAction("Index", "Home");
} }
if(ICAO == null) if (ICAO == null)
return View(); return View();
if (FormAuthenticator.ValidateICAOCode(ICAO)) if (FormAuthenticator.ValidateICAOCode(ICAO))
@ -45,14 +40,16 @@ namespace EFB.Controllers
HttpContext.Session.SetObject("User", user); HttpContext.Session.SetObject("User", user);
return RedirectToAction("ViewCharts"); return RedirectToAction("ViewCharts");
} }
}else }
else
{ {
TempData["Error"] = "Invalid ICAO"; TempData["Error"] = "Invalid ICAO";
} }
return View(); return View();
} }
public IActionResult ViewCharts(string chart){ public IActionResult ViewCharts(string chart)
{
UserModel user = HttpContext.Session.GetObject<UserModel>("User"); UserModel user = HttpContext.Session.GetObject<UserModel>("User");
if (user != null) if (user != null)
{ {

View File

@ -1,14 +1,11 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using EFB.Sessions;
using Microsoft.Extensions.Logging;
using EFB.Models; using EFB.Models;
using EFB.MongoData;
using EFB.Models.Route; using EFB.Models.Route;
using EFB.MongoData;
using EFB.Sessions;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;
namespace EFB.Controllers namespace EFB.Controllers
{ {
@ -26,16 +23,18 @@ 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){ if (user == null)
{
TempData["Error"] = "You must be logged in before you are able to view the FlightSim Page"; TempData["Error"] = "You must be logged in before you are able to view the FlightSim Page";
return RedirectToAction("Index", "Home"); 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){ if (user.Route == null)
{
TempData["Error"] = "You must have a route planned before you are able to view the Flightsim page"; TempData["Error"] = "You must have a route planned before you are able to view the Flightsim page";
return RedirectToAction("Index", "Route"); return RedirectToAction("Index", "Route");
} }
SimPositionModel latestPositionModel = await Mongo.GetLatestData(user.EMail); SimPositionModel latestPositionModel = await Mongo.GetLatestData(user.EMail);
@ -46,7 +45,8 @@ namespace EFB.Controllers
} }
private IWaypoint DetermineClosest(RouteModel route, SimPosition currentPosition){ private IWaypoint DetermineClosest(RouteModel route, SimPosition currentPosition)
{
IWaypoint closest = null; IWaypoint closest = null;
float closestDistance = float.MaxValue; float closestDistance = float.MaxValue;
//Assuming that we are on the earth for simplicity //Assuming that we are on the earth for simplicity
@ -60,8 +60,8 @@ namespace EFB.Controllers
float latitude1 = DegreesToRadians(currentPosition.Latitude); float latitude1 = DegreesToRadians(currentPosition.Latitude);
float latitude2 = DegreesToRadians(waypoint.Latitude); float latitude2 = DegreesToRadians(waypoint.Latitude);
var a = Math.Sin(distanceLat/2) * Math.Sin(distanceLat/2) + Math.Sin(distanceLon/2) * Math.Sin(distanceLon/2) * Math.Cos(latitude1) * Math.Cos(latitude2); var a = Math.Sin(distanceLat / 2) * Math.Sin(distanceLat / 2) + Math.Sin(distanceLon / 2) * Math.Sin(distanceLon / 2) * Math.Cos(latitude1) * Math.Cos(latitude2);
var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1-a)); var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
float distance = (float)(earthRadius * c); float distance = (float)(earthRadius * c);
@ -74,9 +74,10 @@ namespace EFB.Controllers
} }
return closest; return closest;
} }
private float DegreesToRadians(float degrees){ private float DegreesToRadians(float degrees)
{
return (float)(degrees * Math.PI / 180); return (float)(degrees * Math.PI / 180);
} }
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error() public IActionResult Error()

View File

@ -1,14 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
namespace EFB.Controllers.Form namespace EFB.Controllers.Form
{ {
public static class FormAuthenticator public static class FormAuthenticator
{ {
public static bool ValidateEMail(string EMail){ public static bool ValidateEMail(string EMail)
{
if (EMail != null && EMail.Contains("@") && EMail.Contains(".") && !EMail.Contains(" ")) if (EMail != null && EMail.Contains("@") && EMail.Contains(".") && !EMail.Contains(" "))
{ {
if (EMail.Count(x => x == '@') == 1) if (EMail.Count(x => x == '@') == 1)
@ -19,7 +17,8 @@ namespace EFB.Controllers.Form
return false; return false;
} }
public static bool ValidateEndpoint(string Endpoint){ public static bool ValidateEndpoint(string Endpoint)
{
//If it contains http & :// it can be either https or http //If it contains http & :// it can be either https or http
if (Endpoint.Contains("http") && Endpoint.Contains("://") && Endpoint.Length > 7) if (Endpoint.Contains("http") && Endpoint.Contains("://") && Endpoint.Length > 7)
{ {
@ -28,7 +27,8 @@ namespace EFB.Controllers.Form
return false; return false;
} }
public static bool ValidateICAOCode(string ICAO){ public static bool ValidateICAOCode(string ICAO)
{
if (ICAO.Length == 4) if (ICAO.Length == 4)
{ {
//If the value contains a Number, then the value will return false //If the value contains a Number, then the value will return false
@ -37,7 +37,8 @@ namespace EFB.Controllers.Form
return false; return false;
} }
public static bool ValidateCruiseAlt(uint CruiseAlt){ public static bool ValidateCruiseAlt(uint CruiseAlt)
{
if (CruiseAlt > 0 && CruiseAlt < 50000) if (CruiseAlt > 0 && CruiseAlt < 50000)
{ {
return true; return true;

View File

@ -1,11 +1,9 @@
using EFB.Models; using EFB.Models;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Linq; using Microsoft.AspNetCore.Http;
using System.Threading.Tasks; using EFB.Sessions;
namespace EFB.Controllers namespace EFB.Controllers
{ {
@ -20,6 +18,10 @@ namespace EFB.Controllers
public IActionResult Index() public IActionResult Index()
{ {
//Ensure that the user is not already logged in
UserModel user = HttpContext.Session.GetObject<UserModel>("User");
if (user != null) return RedirectToAction("Index", "App");
return View(); return View();
} }

View File

@ -1,12 +1,8 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using EFB.Models; using EFB.Models;
using EFB.Sessions; using EFB.Sessions;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;
namespace EFB.Controllers namespace EFB.Controllers
{ {
@ -32,12 +28,12 @@ namespace EFB.Controllers
if (HttpContext.Session.GetObject<NavdataModel[]>("Navdata") == null) if (HttpContext.Session.GetObject<NavdataModel[]>("Navdata") == null)
{//If the navdata needs re-caching {//If the navdata needs re-caching
data = await NavdataModel.Populate(); data = await NavdataModel.Populate();
HttpContext.Session.SetObject("Navdata", NavdataModel.MergeSort(ref data, 0, data.Length-1)); HttpContext.Session.SetObject("Navdata", NavdataModel.MergeSort(ref data, 0, data.Length - 1));
} }
//get the data out of tempdata and cast it into an array //get the data out of tempdata and cast it into an array
data = HttpContext.Session.GetObject<NavdataModel[]>("Navdata"); data = HttpContext.Session.GetObject<NavdataModel[]>("Navdata");
NavdataModel navaid = NavdataModel.BinarySearch(ref data, 0, data.Length-1, identifier); NavdataModel navaid = NavdataModel.BinarySearch(ref data, 0, data.Length - 1, identifier);
if (navaid == null) if (navaid == null)
{ {

View File

@ -1,18 +1,17 @@
using System; using EFB.Controllers.API;
using System.Threading.Tasks; using EFB.Controllers.Form;
using System.Threading;
using System.Collections.Generic;
using System.Text;
using System.Net.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Http;
using Newtonsoft.Json;
using EFB.Models; using EFB.Models;
using EFB.Models.JSON; using EFB.Models.JSON;
using EFB.Sessions; using EFB.Sessions;
using EFB.Controllers.Form; using Microsoft.AspNetCore.Http;
using EFB.Controllers.API; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Net.Http;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace EFB.Controllers namespace EFB.Controllers
{ {
@ -53,10 +52,10 @@ namespace EFB.Controllers
if (!FormAuthenticator.ValidateICAOCode(departure) || !FormAuthenticator.ValidateICAOCode(arrival)) if (!FormAuthenticator.ValidateICAOCode(departure) || !FormAuthenticator.ValidateICAOCode(arrival))
{//If the user has entered valid ICAOs {//If the user has entered valid ICAOs
TempData["Error"] = "Invalid Departure or Arrival ICAO"; TempData["Error"] = "Invalid Departure or Arrival ICAO";
return RedirectToAction("Index", "Route"); return RedirectToAction("Index", "Route");
} }
uint cruiseAlt; uint cruiseAlt;
if (uint.TryParse(cruise, out cruiseAlt) && FormAuthenticator.ValidateCruiseAlt(cruiseAlt)) if (uint.TryParse(cruise, out cruiseAlt) && FormAuthenticator.ValidateCruiseAlt(cruiseAlt))
@ -77,7 +76,7 @@ namespace EFB.Controllers
preferredmaxlevel = cruiseAlt / 1000, preferredmaxlevel = cruiseAlt / 1000,
}; };
StringContent content = new StringContent(JsonConvert.SerializeObject(routeRequest), Encoding.UTF8, "application/json"); StringContent content = new StringContent(JsonConvert.SerializeObject(routeRequest), Encoding.UTF8, "application/json");
//Make initial Route Request //Make initial Route Request
var requestRoute = API.Post<string>("https://api.autorouter.aero/v1.0/router", headerData, content); var requestRoute = API.Post<string>("https://api.autorouter.aero/v1.0/router", headerData, content);
@ -170,7 +169,7 @@ namespace EFB.Controllers
{ {
user.DepartureCharts = new ChartModel(departure, departureCharts); user.DepartureCharts = new ChartModel(departure, departureCharts);
} }
ChartList arrivalCharts = await requestArrivalCharts; ChartList arrivalCharts = await requestArrivalCharts;
if (arrivalCharts != null) if (arrivalCharts != null)
{ {
@ -184,7 +183,7 @@ namespace EFB.Controllers
user.Arrival = arrival; user.Arrival = arrival;
user.Cruise = cruise; user.Cruise = cruise;
HttpContext.Session.SetObject("User", user); HttpContext.Session.SetObject("User", user);
return RedirectToAction("Index", "App"); return RedirectToAction("Index", "App");
} }
@ -192,6 +191,6 @@ namespace EFB.Controllers
return RedirectToAction("Index", "Route"); return RedirectToAction("Index", "Route");
} }
} }
} }

View File

@ -1,15 +1,13 @@
using EFB.Controllers.API;
using EFB.Models;
using EFB.Models.JSON;
using EFB.Sessions;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using System.Net.Http; using System.Net.Http;
using EFB.Models.JSON; using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using EFB.Models;
using EFB.Sessions;
using EFB.Controllers.API;
namespace EFB.Controllers namespace EFB.Controllers
{ {
@ -24,12 +22,15 @@ namespace EFB.Controllers
} }
public IActionResult Index() public IActionResult Index()
{ {
return View(); return View();
} }
public async Task<IActionResult> Login(string email, string password)
public async Task<IActionResult> Login(string email, string password){ {
//Ensure that the user is not already logged in
UserModel user = HttpContext.Session.GetObject<UserModel>("User");
if (user != null) return RedirectToAction("Index", "App");
if (!Form.FormAuthenticator.ValidateEMail(email)) if (!Form.FormAuthenticator.ValidateEMail(email))
{ {
@ -48,7 +49,7 @@ namespace EFB.Controllers
formData.Add("client_secret", password); formData.Add("client_secret", password);
HttpContent content = new FormUrlEncodedContent(formData); HttpContent content = new FormUrlEncodedContent(formData);
var request = API.Post<Models.JSON.LoginResponse>("https://api.autorouter.aero/v1.0/oauth2/token", null, content); var request = API.Post<Models.JSON.LoginResponse>("https://api.autorouter.aero/v1.0/oauth2/token", null, content);
//Wait for the response to come through //Wait for the response to come through
@ -71,9 +72,11 @@ namespace EFB.Controllers
return RedirectToAction("Index", "Home"); return RedirectToAction("Index", "Home");
} }
UserModel user = new UserModel{ user = new UserModel
{
EMail = email, EMail = email,
UserToken = new TokenModel{ UserToken = new TokenModel
{
TokenValue = login.access_token, TokenValue = login.access_token,
Expiration = DateTime.UtcNow.AddSeconds(login.expires_in) Expiration = DateTime.UtcNow.AddSeconds(login.expires_in)
} }
@ -82,10 +85,10 @@ namespace EFB.Controllers
//Using Session Extensions (Store the user session) //Using Session Extensions (Store the user session)
HttpContext.Session.SetObject("User", user); HttpContext.Session.SetObject("User", user);
return RedirectToAction("Index", "App"); return RedirectToAction("Index", "App");
} }
public IActionResult Logout(){ public IActionResult Logout()
{
HttpContext.Session.SetObject("User", null); HttpContext.Session.SetObject("User", null);
return RedirectToAction("Index", "Home"); return RedirectToAction("Index", "Home");
} }

View File

@ -1,8 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using libmetar.Services; using libmetar.Services;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace EFB.Metar namespace EFB.Metar
{ {
@ -10,16 +8,18 @@ namespace EFB.Metar
{ {
private static MetarService metarService { get; set; } = new MetarService(); private static MetarService metarService { get; set; } = new MetarService();
private static TafService tafService { get; set; } = new TafService(); private static TafService tafService { get; set; } = new TafService();
public static async Task<string> GetMETAR(string ICAO){
public static async Task<string> GetMETAR(string ICAO)
{
return (await metarService.GetRawAsync(ICAO)).Raw; return (await metarService.GetRawAsync(ICAO)).Raw;
} }
public static async Task<List<string>> GetTAF(string ICAO){ public static async Task<List<string>> GetTAF(string ICAO)
{
var downloadedTAF = (await tafService.GetRawAsync(ICAO)).RawSplit; var downloadedTAF = (await tafService.GetRawAsync(ICAO)).RawSplit;
List<string> TAF = new List<string>(); List<string> TAF = new List<string>();
foreach (var line in downloadedTAF) foreach (var line in downloadedTAF)
{ {
TAF.Add(line); TAF.Add(line);

View File

@ -1,18 +1,11 @@
using System;
using System.Threading.Tasks;
using System.Threading;
using System.Collections.Generic;
using System.Text;
using System.Net.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Http;
using Newtonsoft.Json;
using EFB.Models;
using EFB.Models.JSON;
using EFB.Sessions;
using EFB.Controllers.Form;
using EFB.Controllers.API; using EFB.Controllers.API;
using EFB.Controllers.Form;
using EFB.Models.JSON;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
namespace EFB.Models namespace EFB.Models
{ {
@ -29,7 +22,8 @@ namespace EFB.Models
public Chart[] PilotBriefing { get; set; } public Chart[] PilotBriefing { get; set; }
[JsonConstructor] [JsonConstructor]
public ChartModel(){ public ChartModel()
{
//Empty constructor for JSON Serialisation Purposes //Empty constructor for JSON Serialisation Purposes
} }
public ChartModel(string ICAO, ChartList response) public ChartModel(string ICAO, ChartList response)
@ -45,24 +39,26 @@ namespace EFB.Models
PilotBriefing = FillChart(response.PilotBriefing); PilotBriefing = FillChart(response.PilotBriefing);
} }
private Chart[] FillChart(ChartsCollection collection){ private Chart[] FillChart(ChartsCollection collection)
{
if (collection != null) if (collection != null)
{ {
return collection.Charts; return collection.Charts;
} }
return new Chart[]{}; return new Chart[] { };
} }
public static async Task<ChartList> FetchAsync(string ICAO){ public static async Task<ChartList> FetchAsync(string ICAO)
{
Console.WriteLine("Start"); Console.WriteLine("Start");
if (FormAuthenticator.ValidateICAOCode(ICAO)) if (FormAuthenticator.ValidateICAOCode(ICAO))
{ {
APIInterface API = new APIInterface(); APIInterface API = new APIInterface();
Dictionary <string, string> headerData = new Dictionary<string, string>(); Dictionary<string, string> headerData = new Dictionary<string, string>();
headerData.Add("referer", "luke-else.co.uk"); headerData.Add("referer", "luke-else.co.uk");
Dictionary<string, string> formData = new Dictionary<string, string>(); Dictionary<string, string> formData = new Dictionary<string, string>();
formData.Add("token", Environment.GetEnvironmentVariable("ChartFoxAPIKey", EnvironmentVariableTarget.User)); formData.Add("token", Environment.GetEnvironmentVariable("ChartFoxAPIKey", EnvironmentVariableTarget.User));
FormUrlEncodedContent body = new FormUrlEncodedContent(formData); FormUrlEncodedContent body = new FormUrlEncodedContent(formData);
@ -71,7 +67,7 @@ namespace EFB.Models
Console.WriteLine("End"); Console.WriteLine("End");
if (requestCharts.Result.Status == "success") if (requestCharts.Result.Status == "success")
{ {
return requestCharts.Result.Response; return requestCharts.Result.Response;
} }
} }
return null; return null;

View File

@ -1,5 +1,3 @@
using System;
namespace EFB.Models namespace EFB.Models
{ {
public class ErrorViewModel public class ErrorViewModel

View File

@ -1,7 +1,3 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using EFB.Models.Route; using EFB.Models.Route;
namespace EFB.Models namespace EFB.Models

View File

@ -1,7 +1,3 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace EFB.Models.JSON namespace EFB.Models.JSON
@ -59,6 +55,6 @@ namespace EFB.Models.JSON
[JsonProperty("url")] [JsonProperty("url")]
public string URL { get; set; } public string URL { get; set; }
} }
} }

View File

@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json; using Newtonsoft.Json;
using System.Threading.Tasks;
namespace EFB.Models.JSON namespace EFB.Models.JSON
{ {
@ -14,6 +10,6 @@ namespace EFB.Models.JSON
public string client_id { get; set; } public string client_id { get; set; }
[JsonProperty] [JsonProperty]
public string client_secret { get; set; } public string client_secret { get; set; }
} }
} }

View File

@ -1,7 +1,3 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace EFB.Models.JSON namespace EFB.Models.JSON
@ -16,13 +12,13 @@ namespace EFB.Models.JSON
public string token_type { get; set; } public string token_type { get; set; }
[JsonProperty] [JsonProperty]
public string scope { get; set; } public string scope { get; set; }
[JsonProperty] [JsonProperty]
public string error { get; set; } = null; public string error { get; set; } = null;
[JsonProperty] [JsonProperty]
public string error_description { get; set; } = null; public string error_description { get; set; } = null;
} }
} }

View File

@ -1,7 +1,3 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace EFB.Models.JSON namespace EFB.Models.JSON

View File

@ -1,11 +1,9 @@
using MySql.Data.MySqlClient;
using Newtonsoft.Json;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using MySql.Data.MySqlClient;
using Newtonsoft.Json;
using Microsoft.AspNetCore.Mvc;
using EFB.Sessions;
namespace EFB.Models namespace EFB.Models
{ {
@ -17,9 +15,10 @@ namespace EFB.Models
public int? Frequency { get; set; } public int? Frequency { get; set; }
public string Latitude { get; set; } public string Latitude { get; set; }
public string Longitude { get; set; } public string Longitude { get; set; }
public NavdataModel(int id, string name, string type, string latitude, string longitude){
public NavdataModel(int id, string name, string type, string latitude, string longitude)
{
Id = id; Id = id;
Name = name; Name = name;
Type = type; Type = type;
@ -29,7 +28,8 @@ namespace EFB.Models
} }
[JsonConstructor] [JsonConstructor]
public NavdataModel(int id, string name, string type, int? frequency, string latitude, string longitude){ public NavdataModel(int id, string name, string type, int? frequency, string latitude, string longitude)
{
Id = id; Id = id;
Name = name; Name = name;
Type = type; Type = type;
@ -38,7 +38,8 @@ namespace EFB.Models
Longitude = longitude; Longitude = longitude;
} }
public static async Task<NavdataModel[]> Populate(){ public static async Task<NavdataModel[]> Populate()
{
string password = Environment.GetEnvironmentVariable("MySQLPassword", EnvironmentVariableTarget.User); string password = Environment.GetEnvironmentVariable("MySQLPassword", EnvironmentVariableTarget.User);
MySqlConnection con = new MySqlConnection($"server=server.luke-else.co.uk;userid=root;password={password};database=EFB"); MySqlConnection con = new MySqlConnection($"server=server.luke-else.co.uk;userid=root;password={password};database=EFB");
con.Open(); con.Open();
@ -48,7 +49,7 @@ namespace EFB.Models
string query = "SELECT * FROM waypoints"; string query = "SELECT * FROM waypoints";
MySqlCommand command = new MySqlCommand(query, con); MySqlCommand command = new MySqlCommand(query, con);
MySqlDataReader reader = (MySqlDataReader) await command.ExecuteReaderAsync(); MySqlDataReader reader = (MySqlDataReader)await command.ExecuteReaderAsync();
List<NavdataModel> navdata = new List<NavdataModel>(); List<NavdataModel> navdata = new List<NavdataModel>();
@ -67,7 +68,9 @@ namespace EFB.Models
navdata.Add( navdata.Add(
new NavdataModel(id, name, type, frequency, latitude, longitude) new NavdataModel(id, name, type, frequency, latitude, longitude)
); );
}else{ }
else
{
navdata.Add( navdata.Add(
new NavdataModel(id, name, type, latitude, longitude) new NavdataModel(id, name, type, latitude, longitude)
); );
@ -77,13 +80,14 @@ namespace EFB.Models
return navdata.ToArray<NavdataModel>(); return navdata.ToArray<NavdataModel>();
} }
public static NavdataModel BinarySearch(ref NavdataModel[] data, int start, int end, string target){ public static NavdataModel BinarySearch(ref NavdataModel[] data, int start, int end, string target)
{
int midpoint = start + ((end - start) / 2); int midpoint = start + ((end - start) / 2);
target = target.ToUpper().Trim(); target = target.ToUpper().Trim();
string mid = data[midpoint].Name; string mid = data[midpoint].Name;
if (start == end-1) if (start == end - 1)
{ {
if (mid == target) if (mid == target)
{ {
@ -110,26 +114,31 @@ namespace EFB.Models
//Split the data down to the left and the right portions //Split the data down to the left and the right portions
NavdataModel[] left = MergeSort(ref data, start, midpoint); NavdataModel[] left = MergeSort(ref data, start, midpoint);
NavdataModel[] right = MergeSort(ref data, midpoint+1, end); NavdataModel[] right = MergeSort(ref data, midpoint + 1, end);
List<NavdataModel> combined = new List<NavdataModel>(); List<NavdataModel> combined = new List<NavdataModel>();
int leftPointer = 0; int leftPointer = 0;
int rightPointer = 0; int rightPointer = 0;
while (leftPointer <= left.Length-1 || rightPointer <= right.Length-1) while (leftPointer <= left.Length - 1 || rightPointer <= right.Length - 1)
{ {
if (leftPointer == left.Length) if (leftPointer == left.Length)
{//Take a value only from the right (left pointer had reached the end) {//Take a value only from the right (left pointer had reached the end)
AddValue(ref combined, right[rightPointer], ref rightPointer); AddValue(ref combined, right[rightPointer], ref rightPointer);
}else if (rightPointer == right.Length) }
else if (rightPointer == right.Length)
{//Take a value only from the left (right pointer has reached the end) {//Take a value only from the left (right pointer has reached the end)
AddValue(ref combined, left[leftPointer], ref leftPointer); AddValue(ref combined, left[leftPointer], ref leftPointer);
}else{ }
else
{
if (String.Compare(left[leftPointer].Name, right[rightPointer].Name) <= 0) if (String.Compare(left[leftPointer].Name, right[rightPointer].Name) <= 0)
{//Take a value from the left hand side of the list. (Left value is considered 'smaller') {//Take a value from the left hand side of the list. (Left value is considered 'smaller')
AddValue(ref combined, left[leftPointer], ref leftPointer); AddValue(ref combined, left[leftPointer], ref leftPointer);
}else{//Take a value from the right (right value is considered smaller) }
else
{//Take a value from the right (right value is considered smaller)
AddValue(ref combined, right[rightPointer], ref rightPointer); AddValue(ref combined, right[rightPointer], ref rightPointer);
} }
} }
@ -139,10 +148,11 @@ namespace EFB.Models
} }
private static void AddValue(ref List<NavdataModel> data, NavdataModel value, ref int pointer){ private static void AddValue(ref List<NavdataModel> data, NavdataModel value, ref int pointer)
{
pointer++; pointer++;
data.Add(value); data.Add(value);
} }
} }
} }

View File

@ -1,8 +1,3 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace EFB.Models namespace EFB.Models
{ {
public class ResponseModel<T> public class ResponseModel<T>
@ -10,6 +5,6 @@ namespace EFB.Models
//Object should be of known type from sender //Object should be of known type from sender
public T Result { get; set; } = default(T); public T Result { get; set; } = default(T);
public string Error { get; set; } = null; public string Error { get; set; } = null;
} }
} }

View File

@ -1,8 +1,3 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace EFB.Models.Route namespace EFB.Models.Route
{ {
public interface IWaypoint public interface IWaypoint
@ -10,11 +5,11 @@ namespace EFB.Models.Route
public string Name { get; set; } public string Name { get; set; }
public float Longitude { get; set; } public float Longitude { get; set; }
public float Latitude { get; set; } public float Latitude { get; set; }
public string Airway { get; set; } public string Airway { get; set; }
public IWaypoint Next { get; set; } public IWaypoint Next { get; set; }
public IWaypoint Previous { get; set; } public IWaypoint Previous { get; set; }
public bool Visited { get; set; } public bool Visited { get; set; }
} }
} }

View File

@ -1,23 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace EFB.Models.Route namespace EFB.Models.Route
{ {
public class NavaidModel:IWaypoint public class NavaidModel : IWaypoint
{ {
public string Name { get; set; } public string Name { get; set; }
public float Longitude { get; set; } public float Longitude { get; set; }
public float Latitude { get; set; } public float Latitude { get; set; }
public int Frequency { get; set; } public int Frequency { get; set; }
public string Airway { get; set; } public string Airway { get; set; }
public IWaypoint Next { get; set; } = null; public IWaypoint Next { get; set; } = null;
public IWaypoint Previous { get; set; } = null; public IWaypoint Previous { get; set; } = null;
public bool Visited { get; set; } = false; public bool Visited { get; set; } = false;
public NavaidModel(string name, string airway, float longitude, float latitude){ public NavaidModel(string name, string airway, float longitude, float latitude)
{
Name = name; Name = name;
Airway = airway; Airway = airway;
Longitude = longitude; Longitude = longitude;

View File

@ -1,27 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace EFB.Models.Route namespace EFB.Models.Route
{ {
public class WaypointModel:IWaypoint public class WaypointModel : IWaypoint
{ {
public string Name { get; set; } public string Name { get; set; }
public float Longitude { get; set; } public float Longitude { get; set; }
public float Latitude { get; set; } public float Latitude { get; set; }
public string Airway { get; set; } public string Airway { get; set; }
public IWaypoint Next { get; set; } = null; public IWaypoint Next { get; set; } = null;
public IWaypoint Previous { get; set; } = null; public IWaypoint Previous { get; set; } = null;
public bool Visited { get; set; } public bool Visited { get; set; }
public WaypointModel(string name, string airway, float longitude, float latitude){ public WaypointModel(string name, string airway, float longitude, float latitude)
{
Name = name; Name = name;
Airway = airway; Airway = airway;
Longitude = longitude; Longitude = longitude;
Latitude = latitude; Latitude = latitude;
} }
} }
} }

View File

@ -1,10 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using EFB.Models.Route;
using EFB.Controllers.Form; using EFB.Controllers.Form;
using System.Net.Http; using EFB.Models.Route;
using System.Threading.Tasks;
namespace EFB.Models namespace EFB.Models
{ {
@ -19,7 +15,8 @@ namespace EFB.Models
public WaypointModel Arrival { get; set; } = null; public WaypointModel Arrival { get; set; } = null;
public IWaypoint Current { get; set; } = null; public IWaypoint Current { get; set; } = null;
public uint Cruise { get; set; } = 0; public uint Cruise { get; set; } = 0;
public RouteModel(string departure, string departureRoute, string arrival, string arrivalRoute, uint cruise){ public RouteModel(string departure, string departureRoute, string arrival, string arrivalRoute, uint cruise)
{
if (FormAuthenticator.ValidateICAOCode(departure)) if (FormAuthenticator.ValidateICAOCode(departure))
{ {
Departure = new WaypointModel(departure, departureRoute, 0, 0); Departure = new WaypointModel(departure, departureRoute, 0, 0);
@ -36,16 +33,20 @@ namespace EFB.Models
} }
} }
public IWaypoint Next(){ public IWaypoint Next()
if(Current.Next != null){ {
if (Current.Next != null)
{
Current = Current.Next; Current = Current.Next;
return Current; return Current;
} }
return null; return null;
} }
public IWaypoint Previous(){ public IWaypoint Previous()
if(Current.Previous != null){ {
if (Current.Previous != null)
{
Current = Current.Previous; Current = Current.Previous;
return Current; return Current;
} }
@ -53,7 +54,8 @@ namespace EFB.Models
} }
//Generate a route Object //Generate a route Object
public static async Task<RouteModel> StringToRoute(string departure, string arrival, uint cruise, string routeString){ public static async Task<RouteModel> StringToRoute(string departure, string arrival, uint cruise, string routeString)
{
var navdataFetch = NavdataModel.Populate(); var navdataFetch = NavdataModel.Populate();
string[] routeTemp = routeString.Split(" "); string[] routeTemp = routeString.Split(" ");
@ -69,10 +71,10 @@ namespace EFB.Models
NavdataModel[] navdata = await navdataFetch; NavdataModel[] navdata = await navdataFetch;
navdata = NavdataModel.MergeSort(ref navdata, 0, navdata.Length - 1); navdata = NavdataModel.MergeSort(ref navdata, 0, navdata.Length - 1);
for (var i = 1; i < routeTemp.Length-1; i+=2) for (var i = 1; i < routeTemp.Length - 1; i += 2)
{//Already used first item, continue itterating over every other item {//Already used first item, continue itterating over every other item
IWaypoint next; IWaypoint next;
NavdataModel currentWaypoint = NavdataModel.BinarySearch(ref navdata, 0, navdata.Length-1, routeTemp[i]); NavdataModel currentWaypoint = NavdataModel.BinarySearch(ref navdata, 0, navdata.Length - 1, routeTemp[i]);
if (currentWaypoint == null) if (currentWaypoint == null)
{ {
currentWaypoint = new NavdataModel(0, routeTemp[i], null, "0", "0"); currentWaypoint = new NavdataModel(0, routeTemp[i], null, "0", "0");
@ -81,26 +83,27 @@ namespace EFB.Models
if (routeTemp[i].Length > 3) if (routeTemp[i].Length > 3)
{//waypoint Type {//waypoint Type
next = new WaypointModel( next = new WaypointModel(
routeTemp[i], routeTemp[i],
routeTemp[i+1], routeTemp[i + 1],
float.Parse(currentWaypoint.Longitude), float.Parse(currentWaypoint.Longitude),
float.Parse(currentWaypoint.Latitude) float.Parse(currentWaypoint.Latitude)
); );
}else }
else
{//Navaid Type {//Navaid Type
next = new NavaidModel( next = new NavaidModel(
routeTemp[i], routeTemp[i],
routeTemp[i+1], routeTemp[i + 1],
float.Parse(currentWaypoint.Longitude), float.Parse(currentWaypoint.Longitude),
float.Parse(currentWaypoint.Latitude) float.Parse(currentWaypoint.Latitude)
); );
} }
next.Previous = route.Current; next.Previous = route.Current;
route.Current.Next = next; route.Current.Next = next;
route.Current = next; route.Current = next;
} }
//Connect end of route (linked list) //Connect end of route (linked list)
route.Current.Airway = null; route.Current.Airway = null;
route.Current.Next = route.Arrival; route.Current.Next = route.Arrival;
@ -109,8 +112,8 @@ namespace EFB.Models
route.Current = route.Departure; route.Current = route.Departure;
//Assign departure and arrival coordinate positions //Assign departure and arrival coordinate positions
NavdataModel departureNav = NavdataModel.BinarySearch(ref navdata, 0, navdata.Length - 1, departure); NavdataModel departureNav = NavdataModel.BinarySearch(ref navdata, 0, navdata.Length - 1, departure);
NavdataModel arrivalNav = NavdataModel.BinarySearch(ref navdata, 0, navdata.Length - 1, arrival); NavdataModel arrivalNav = NavdataModel.BinarySearch(ref navdata, 0, navdata.Length - 1, arrival);
route.Departure.Latitude = float.Parse(departureNav.Latitude); route.Departure.Latitude = float.Parse(departureNav.Latitude);
route.Departure.Longitude = float.Parse(departureNav.Longitude); route.Departure.Longitude = float.Parse(departureNav.Longitude);
route.Arrival.Latitude = float.Parse(arrivalNav.Latitude); route.Arrival.Latitude = float.Parse(arrivalNav.Latitude);
@ -123,7 +126,8 @@ namespace EFB.Models
//Generate a route String //Generate a route String
public static string ParseRoute(string route){ public static string ParseRoute(string route)
{
route.Replace('/', ' '); route.Replace('/', ' ');
var routeArr = route.Split(' '); var routeArr = route.Split(' ');
@ -138,13 +142,13 @@ namespace EFB.Models
if (waypoint.Length == 7 && finalRoute.Length > 8) if (waypoint.Length == 7 && finalRoute.Length > 8)
break; break;
} }
} }
return finalRoute; return finalRoute;
} }
} }
} }

View File

@ -1,10 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Bson; using MongoDB.Bson;
using MongoDB.Driver; using MongoDB.Bson.Serialization.Attributes;
using System;
namespace EFB.Models namespace EFB.Models
{ {
@ -16,12 +12,13 @@ namespace EFB.Models
public DateTime LatestPacketUpdate { get; set; } public DateTime LatestPacketUpdate { get; set; }
public SimPosition LatestPosition { get; set; } = null; public SimPosition LatestPosition { get; set; } = null;
public SimPositionModel(string email, SimPosition position){ public SimPositionModel(string email, SimPosition position)
{
EMail = email; EMail = email;
LatestPacketUpdate = DateTime.Now; LatestPacketUpdate = DateTime.Now;
LatestPosition = position; LatestPosition = position;
} }
} }
@ -30,8 +27,9 @@ namespace EFB.Models
public float Latitude { get; set; } public float Latitude { get; set; }
public float Longitude { get; set; } public float Longitude { get; set; }
public int Altitude { get; set; } public int Altitude { get; set; }
public SimPosition(float latitude, float longitude, int altitude){ public SimPosition(float latitude, float longitude, int altitude)
{
Latitude = latitude; Latitude = latitude;
Longitude = longitude; Longitude = longitude;
Altitude = altitude; Altitude = altitude;

View File

@ -1,7 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace EFB.Models namespace EFB.Models
{ {
@ -13,7 +10,8 @@ namespace EFB.Models
public string TokenValue { get; init; } public string TokenValue { get; init; }
public DateTime Expiration { get; init; } public DateTime Expiration { get; init; }
public bool IsExpired(){ public bool IsExpired()
{
//Check if the current time is beyond expiration //Check if the current time is beyond expiration
if (DateTime.UtcNow > Expiration) if (DateTime.UtcNow > Expiration)
{ {
@ -21,6 +19,6 @@ namespace EFB.Models
} }
return false; return false;
} }
} }
} }

View File

@ -1,8 +1,3 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace EFB.Models namespace EFB.Models
{ {
public class UserModel public class UserModel
@ -19,14 +14,14 @@ namespace EFB.Models
public object Id { get; init; } public object Id { get; init; }
public string EMail { get; init; } public string EMail { get; init; }
public TokenModel UserToken { get; set; } = null; public TokenModel UserToken { get; set; } = null;
//Contains the most recent route generated by the user through the App //Contains the most recent route generated by the user through the App
public string Departure { get; set; } public string Departure { get; set; }
public string Route { get; set; } public string Route { get; set; }
public string Arrival { get; set; } public string Arrival { get; set; }
public uint Cruise { get; set; } public uint Cruise { get; set; }
public TokenModel RouteToken { get; set; } = null; public TokenModel RouteToken { get; set; } = null;
//Contains the Departure and Arrival Charts for the user's route //Contains the Departure and Arrival Charts for the user's route
@ -36,6 +31,6 @@ namespace EFB.Models
//Contains the most recently stored position of the user in the simulator //Contains the most recently stored position of the user in the simulator
public object SimPosition { get; set; } = null; public object SimPosition { get; set; } = null;
} }
} }

View File

@ -1,14 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Razor;
using Newtonsoft.Json;
using EFB.Models.JSON; using EFB.Models.JSON;
using Microsoft.AspNetCore; using Newtonsoft.Json;
using EFB.Sessions;
namespace EFB.Models namespace EFB.Models
{ {
@ -16,8 +7,9 @@ namespace EFB.Models
{ {
public ChartModel Charts { get; set; } public ChartModel Charts { get; set; }
public Chart Selected { get; set; } public Chart Selected { get; set; }
public ViewChartModel(ChartModel current, string selected){ public ViewChartModel(ChartModel current, string selected)
{
Charts = current; Charts = current;
if (selected != null) if (selected != null)
{ {

View File

@ -1,29 +1,29 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using MongoDB.Driver;
using MongoDB.Bson;
using EFB.Models; using EFB.Models;
using MongoDB.Driver;
using System;
using System.Threading.Tasks;
namespace EFB.MongoData namespace EFB.MongoData
{ {
public class Mongo public class Mongo
{ {
//function that is responsible to getting the user's latest sim position from the MongoDB //function that is responsible to getting the user's latest sim position from the MongoDB
public static async Task<SimPositionModel> GetLatestData(string email){ public static async Task<SimPositionModel> GetLatestData(string email)
{
//Create mongo client to allow connection to the database
MongoClient client = new MongoClient( MongoClient client = new MongoClient(
Environment.GetEnvironmentVariable("MongoDBConnectionString", EnvironmentVariableTarget.User) Environment.GetEnvironmentVariable("MongoDBConnectionString", EnvironmentVariableTarget.User)
); );
MongoDatabaseBase database = (MongoDatabaseBase)client.GetDatabase("EFB"); MongoDatabaseBase database = (MongoDatabaseBase)client.GetDatabase("EFB");
MongoCollectionBase<SimPositionModel> collection = (MongoCollectionBase<SimPositionModel>)database.GetCollection<SimPositionModel>("Simdata"); MongoCollectionBase<SimPositionModel> collection = (MongoCollectionBase<SimPositionModel>)database.GetCollection<SimPositionModel>("Simdata");
//Create filter to select specifically the records where the Email is the same as what we specified
FilterDefinition<SimPositionModel> filter = Builders<SimPositionModel>.Filter.Eq(x => x.EMail, email); FilterDefinition<SimPositionModel> filter = Builders<SimPositionModel>.Filter.Eq(x => x.EMail, email);
var data = await collection.FindAsync<SimPositionModel>(filter).Result.ToListAsync(); var data = await collection.FindAsync<SimPositionModel>(filter).Result.ToListAsync();
if (data.Count > 0) if (data.Count > 0)
{ {//Return the first item in the list (Should only be 1)
return data[0]; return data[0];
} }//Or return null if not present
return null; return null;
} }
} }

View File

@ -1,11 +1,5 @@
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace EFB namespace EFB
{ {

View File

@ -7,8 +7,9 @@ namespace EFB.Sessions
{ {
public static void SetObject(this ISession session, string key, object value) public static void SetObject(this ISession session, string key, object value)
{//Sets the object of a session to Object {//Sets the object of a session to Object
session.SetString(key, JsonConvert.SerializeObject(value, Formatting.None, session.SetString(key, JsonConvert.SerializeObject(value, Formatting.None,
new JsonSerializerSettings(){ new JsonSerializerSettings()
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore ReferenceLoopHandling = ReferenceLoopHandling.Ignore
} }
)); ));

View File

@ -1,13 +1,8 @@
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace EFB namespace EFB
{ {