This repository has been archived on 2023-04-02. You can view files and clone it, but cannot push or open issues or pull requests.
trainav/bahnplan.web/Pages/OEAPI.cshtml.cs

64 lines
2.4 KiB
C#

using System;
using System.Linq;
using System.Net;
using bahnplan.web.database;
using bahnplan.web.database.Tables;
using bahnplan.web.JSON;
using LinqToDB;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Leg = bahnplan.web.database.Tables.Leg;
// ReSharper disable PossibleInvalidOperationException
namespace bahnplan.web.Pages {
public class OEAPIModel : PageModel {
public int TripId;
public void OnGet() {
if (HttpContext.Session.GetString("authorized") != "true")
return;
var link = Request.Query["link"].ToString();
var shortcode = link;
if (link.Contains("oeffisear.ch"))
shortcode = link.Split("/#/").Last();
var jid = shortcode.Split("/").Last();
shortcode = shortcode.Split("/").First();
using var db = new Database.DbConn();
var response = new WebClient().DownloadString($"https://oeffisear.ch/journeys?{{\"reqId\":\"{shortcode}\"}}");
var parsed = OeapiResponse.FromJson(response);
if (!string.IsNullOrWhiteSpace(Request.Query["tripid"].ToString()))
if (db.Trips.First(p => p.TripId == int.Parse(Request.Query["tripid"].ToString())).UserId != int.Parse(HttpContext.Session.GetString("uid")))
return;
var tripId = Request.Query["action"] == "addleg"
? int.Parse(Request.Query["tripid"])
: db.InsertWithInt32Identity(new Trip {UserId = int.Parse(HttpContext.Session.GetString("uid"))});
foreach (var journey in parsed.Data.Journeys[jid].Legs) {
var arrtime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
var deptime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
arrtime = arrtime.AddSeconds((long) journey.Arrival.PlannedTime).ToLocalTime();
deptime = deptime.AddSeconds((long) journey.Departure.PlannedTime).ToLocalTime();
db.InsertWithInt32Identity(new Leg {
TripId = tripId,
UserId = int.Parse(HttpContext.Session.GetString("uid")),
TrainType = journey.Line.ProductName,
TrainNr = int.Parse(journey.Line.TripNum),
ArrStation = journey.Arrival.Point.Stop.Name,
ArrStationId = int.Parse(journey.Arrival.Point.Stop.Id),
ArrTime = arrtime.ToString("yyyy-MM-ddTHH:mm:ss"),
DepStation = journey.Departure.Point.Stop.Name,
DepStationId = int.Parse(journey.Departure.Point.Stop.Id),
DepTime = deptime.ToString("yyyy-MM-ddTHH:mm:ss")
});
}
TripId = tripId;
}
}
}