Code cleanup
This commit is contained in:
parent
b1e8bfe8d0
commit
72124e7f15
@ -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,7 +10,8 @@ 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.
|
//Create the HTTP client used for the GetRequest.
|
||||||
this.HttpClient = new HttpClient();
|
this.HttpClient = new HttpClient();
|
||||||
this.HttpClient.DefaultRequestHeaders.Clear();
|
this.HttpClient.DefaultRequestHeaders.Clear();
|
||||||
@ -41,21 +40,23 @@ 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
|
//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();
|
||||||
@ -70,7 +71,8 @@ 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;
|
||||||
@ -81,18 +83,22 @@ 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){
|
public async Task<ResponseModel<T>> Put<T>(string Endpoint, Dictionary<string, string> Headers, HttpContent Body)
|
||||||
|
{
|
||||||
//Create HTTP client to allow for HttpRequests
|
//Create HTTP client to allow for HttpRequests
|
||||||
this.HttpClient = new HttpClient();
|
this.HttpClient = new HttpClient();
|
||||||
this.HttpClient.DefaultRequestHeaders.Clear();
|
this.HttpClient.DefaultRequestHeaders.Clear();
|
||||||
@ -107,11 +113,12 @@ 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
|
//Recieve the response as a string which will be morphed in other types
|
||||||
object response = resultString;
|
object response = resultString;
|
||||||
|
|
||||||
@ -120,18 +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" };
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -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()
|
||||||
|
@ -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;
|
||||||
|
@ -1,11 +1,7 @@
|
|||||||
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 System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EFB.Controllers
|
namespace EFB.Controllers
|
||||||
{
|
{
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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
|
||||||
{
|
{
|
||||||
@ -29,7 +27,8 @@ 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))
|
||||||
{
|
{
|
||||||
@ -48,7 +47,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 +70,11 @@ namespace EFB.Controllers
|
|||||||
return RedirectToAction("Index", "Home");
|
return RedirectToAction("Index", "Home");
|
||||||
}
|
}
|
||||||
|
|
||||||
UserModel user = new UserModel{
|
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)
|
||||||
}
|
}
|
||||||
@ -85,7 +86,8 @@ namespace EFB.Controllers
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IActionResult Logout(){
|
public IActionResult Logout()
|
||||||
|
{
|
||||||
HttpContext.Session.SetObject("User", null);
|
HttpContext.Session.SetObject("User", null);
|
||||||
return RedirectToAction("Index", "Home");
|
return RedirectToAction("Index", "Home");
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
using System;
|
|
||||||
|
|
||||||
namespace EFB.Models
|
namespace EFB.Models
|
||||||
{
|
{
|
||||||
public class ErrorViewModel
|
public class ErrorViewModel
|
||||||
|
@ -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
|
||||||
|
@ -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; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -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; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -1,17 +1,15 @@
|
|||||||
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)
|
||||||
|
{
|
||||||
MongoClient client = new MongoClient(
|
MongoClient client = new MongoClient(
|
||||||
Environment.GetEnvironmentVariable("MongoDBConnectionString", EnvironmentVariableTarget.User)
|
Environment.GetEnvironmentVariable("MongoDBConnectionString", EnvironmentVariableTarget.User)
|
||||||
);
|
);
|
||||||
|
@ -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
|
||||||
{
|
{
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
));
|
));
|
||||||
|
@ -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
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user