Update to new bahncard image encoding

This commit is contained in:
Laura Hausmann 2022-03-20 02:48:59 +01:00
parent fb6ca021c2
commit 4cc3f22ade
Signed by: zotan
GPG key ID: D044E84C5BE01605
2 changed files with 278 additions and 253 deletions

View file

@ -1,161 +1,169 @@
@page @page
@using Microsoft.AspNetCore.Http @using Microsoft.AspNetCore.Http
@using Microsoft.AspNetCore.Http.Extensions @using Microsoft.AspNetCore.Http.Extensions
@using System.Text
@model CardsModel @model CardsModel
@{ @{
ViewData["Title"] = "Cards"; ViewData["Title"] = "Cards";
if (HttpContext.Session.GetString("authorized") != "true") { if (HttpContext.Session.GetString("authorized") != "true") {
Response.Redirect($"/Login?&redir={Request.GetDisplayUrl().UrlEncode()}"); Response.Redirect($"/Login?&redir={Request.GetDisplayUrl().UrlEncode()}");
return; return;
} }
if (Request.Query.ContainsKey("refresh")) { if (Request.Query.ContainsKey("refresh")) {
Response.Redirect("?edit=true"); Response.Redirect("?edit=true");
return; return;
} }
} }
@if (Request.Query["edit"] == "true") { @if (Request.Query["edit"] == "true") {
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
<tr> <tr>
<th>Card</th> <th>Card</th>
<th>Number</th> <th>Number</th>
<th>Traveller</th> <th>Traveller</th>
<th>Card Validity</th> <th>Card Validity</th>
<th>QR Validity</th> <th>QR Validity</th>
<th>Actions</th> <th>Actions</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@foreach (var card in Model.Cards) { @foreach (var card in Model.Cards) {
<tr> <tr>
<td>@card.CardInfo.TrimEnd('#')</td> <td>@card.CardInfo.TrimEnd('#')</td>
<td>@card.CardNumber</td> <td>@card.CardNumber</td>
<td>@card.Traveller</td> <td>@card.Traveller</td>
<td> <td>
@{ @{
var from = DateTime.Parse(card.ValidFrom); var from = DateTime.Parse(card.ValidFrom);
var to = DateTime.Parse(card.ValidTo); var to = DateTime.Parse(card.ValidTo);
if (from > DateTime.Now) { if (from > DateTime.Now) {
<span style="color: red"> <span style="color: red">
@card.ValidFrom.Split("T")[0] @card.ValidFrom.Split("T")[0]
</span> </span>
} }
else { else {
@card.ValidFrom.Split("T")[0] @card.ValidFrom.Split("T")[0]
} }
<br/> <br/>
if (to < DateTime.Now) { if (to < DateTime.Now) {
<span style="color: red"> <span style="color: red">
@card.ValidTo.Split("T")[0] @card.ValidTo.Split("T")[0]
</span> </span>
} }
else { else {
@card.ValidTo.Split("T")[0] @card.ValidTo.Split("T")[0]
} }
} }
</td> </td>
<td> <td>
@{ @{
var qrfrom = DateTime.Parse(card.QrValidFrom); var qrfrom = DateTime.Parse(card.QrValidFrom);
var qrto = DateTime.Parse(card.QrValidTo); var qrto = DateTime.Parse(card.QrValidTo);
if (qrfrom > DateTime.Now) { if (qrfrom > DateTime.Now) {
<span style="color: red"> <span style="color: red">
@card.QrValidFrom.Split("T")[0] @card.QrValidFrom.Split("T")[0]
</span> </span>
} }
else { else {
@card.QrValidFrom.Split("T")[0] @card.QrValidFrom.Split("T")[0]
} }
<br/> <br/>
if (qrto < DateTime.Now) { if (qrto < DateTime.Now) {
<span style="color: red"> <span style="color: red">
@card.QrValidTo.Split("T")[0] @card.QrValidTo.Split("T")[0]
</span> </span>
} }
else { else {
@card.QrValidTo.Split("T")[0] @card.QrValidTo.Split("T")[0]
} }
} }
</td> </td>
<td> <td>
<a class="btn btn-sm btn-primary" href="?refresh=@card.CardId">Refresh QR</a> <a class="btn btn-sm btn-primary" href="?refresh=@card.CardId">Refresh QR</a>
<a class="btn btn-sm btn-outline-danger" href="/Delete?item=card&id=@card.CardId&redir=@Request.GetDisplayUrl().UrlEncode()">Delete</a> <a class="btn btn-sm btn-outline-danger" href="/Delete?item=card&id=@card.CardId&redir=@Request.GetDisplayUrl().UrlEncode()">Delete</a>
</td> </td>
</tr> </tr>
} }
</tbody> </tbody>
</table> </table>
<p> <p>
Please refresh your BahnCard list in the mobile DB Navigator before clicking "Refresh QR". This will be fixed in a later release. Please refresh your BahnCard list in the mobile DB Navigator before clicking "Refresh QR". This will be fixed in a later release.
</p> </p>
<a class="btn btn-sm btn-secondary" href="@Request.Path">Back</a> <a class="btn btn-sm btn-secondary" href="@Request.Path">Back</a>
<br/> <br/>
<br/> <br/>
<br/> <br/>
} }
else if (Model.Cards.Any()) { else if (Model.Cards.Any()) {
foreach (var card in Model.Cards) { foreach (var card in Model.Cards) {
<div class="flex-grid"> if (!card.CardQr.StartsWith("data:image/png"))
<div class="flex-col"> card.CardQr = Encoding.UTF8.GetString(Convert.FromBase64String(card.CardQr));
<img src="@card.CardQr" alt="Ticketcode"/> if (!card.CardSecCode.StartsWith("data:image/png"))
</div> card.CardSecCode = Encoding.UTF8.GetString(Convert.FromBase64String(card.CardSecCode));
<div class="flex-col"> if (!card.CardImage.StartsWith("<?xml"))
<img src="@card.CardSecCode" alt="Sichtmerkmal"/> card.CardImage = Encoding.UTF8.GetString(Convert.FromBase64String(card.CardImage));
</div>
<div class="flex-col">
<div class="bahncard-outer">
<img class="bahncard" src='data:image/svg+xml;base64,@card.CardImage.Base64Encode()' alt="Bahncardimage"/>
</div>
</div>
</div>
var from = DateTime.Parse(card.ValidFrom);
var to = DateTime.Parse(card.ValidTo);
var qrfrom = DateTime.Parse(card.QrValidFrom);
var qrto = DateTime.Parse(card.QrValidTo);
if (from > DateTime.Now) { <div class="flex-grid">
<div class="alert alert-info" role="alert"> <div class="flex-col">
The above card is not valid yet. <img src="@card.CardQr" alt="Ticketcode"/>
</div> </div>
} <div class="flex-col">
if (to < DateTime.Now) { <img src="@card.CardSecCode" alt="Sichtmerkmal"/>
<div class="alert alert-warning" role="alert"> </div>
The above card is expired. <div class="flex-col">
</div> <div class="bahncard-outer">
} <img class="bahncard" src='data:image/svg+xml;base64,@card.CardImage.Base64Encode()' alt="Bahncardimage"/>
if (qrfrom > DateTime.Now && !(from > DateTime.Now)) { </div>
<div class="alert alert-info" role="alert"> </div>
The above QR code is somehow not valid yet. Congrats, please open a bug report. </div>
</div> var from = DateTime.Parse(card.ValidFrom);
} var to = DateTime.Parse(card.ValidTo);
if (qrto < DateTime.Now) { var qrfrom = DateTime.Parse(card.QrValidFrom);
<div class="alert alert-warning" role="alert"> var qrto = DateTime.Parse(card.QrValidTo);
The above QR code is expired. Please refresh the card. <a href="/Cards?edit=true">You can do that now</a>.
</div> if (from > DateTime.Now) {
} <div class="alert alert-info" role="alert">
<br/> The above card is not valid yet.
} </div>
<br/> }
<a class="btn btn-sm btn-secondary" href="?edit=true">Edit cards</a> if (to < DateTime.Now) {
<div class="alert alert-warning" role="alert">
The above card is expired.
</div>
}
if (qrfrom > DateTime.Now && !(from > DateTime.Now)) {
<div class="alert alert-info" role="alert">
The above QR code is somehow not valid yet. Congrats, please open a bug report.
</div>
}
if (qrto < DateTime.Now) {
<div class="alert alert-warning" role="alert">
The above QR code is expired. Please refresh the card. <a href="/Cards?edit=true">You can do that now</a>.
</div>
}
<br/>
}
<br/>
<a class="btn btn-sm btn-secondary" href="?edit=true">Edit cards</a>
} }
@if (!Model.Cards.Any() || Request.Query["edit"] == "true") { @if (!Model.Cards.Any() || Request.Query["edit"] == "true") {
<h3>Get Cards from bahn.de account</h3> <h3>Get Cards from bahn.de account</h3>
<br/> <br/>
<form method="POST" action="/Card"> <form method="POST" action="/Card">
<div class="form-group"> <div class="form-group">
<input type="text" class="form-control" id="InputUser" name="user" placeholder="bahn.de username"> <input type="text" class="form-control" id="InputUser" name="user" placeholder="bahn.de username">
</div> </div>
<div class="form-group"> <div class="form-group">
<input type="password" class="form-control" id="InputPassword" name="pass" placeholder="bahn.de password"> <input type="password" class="form-control" id="InputPassword" name="pass" placeholder="bahn.de password">
</div> </div>
<div class="form-group"> <div class="form-group">
<input type="text" class="form-control" id="inputName" name="name" placeholder="Last name of traveller"> <input type="text" class="form-control" id="inputName" name="name" placeholder="Last name of traveller">
</div> </div>
@Html.AntiForgeryToken() @Html.AntiForgeryToken()
<button type="submit" class="btn btn-primary">Submit</button> <button type="submit" class="btn btn-primary">Submit</button>
</form> </form>
} }

View file

@ -2,30 +2,31 @@
@using Microsoft.AspNetCore.Http @using Microsoft.AspNetCore.Http
@using Microsoft.AspNetCore.Http.Extensions @using Microsoft.AspNetCore.Http.Extensions
@using bahnplan.web.database @using bahnplan.web.database
@using System.Text
@model InspectionModel @model InspectionModel
@{ @{
ViewData["Title"] = "Inspection"; ViewData["Title"] = "Inspection";
if (HttpContext.Session.GetString("authorized") != "true") { if (HttpContext.Session.GetString("authorized") != "true") {
Response.Redirect($"/Login?&redir={Request.GetDisplayUrl().UrlEncode()}"); Response.Redirect($"/Login?&redir={Request.GetDisplayUrl().UrlEncode()}");
return; return;
} }
if (Model.Leg.UserId != int.Parse(HttpContext.Session.GetString("uid"))) { if (Model.Leg.UserId != int.Parse(HttpContext.Session.GetString("uid"))) {
return; return;
} }
} }
<p> <p>
Ticket for <b>@Model.Leg.TrainType @Model.Leg.TrainNr</b> from <b>@Model.Leg.DepStation</b> to <b>@Model.Leg.ArrStation</b>, starting @DateTime.Parse(Model.Leg.DepTime).ToString("yyyy-MM-dd HH:mm") Ticket for <b>@Model.Leg.TrainType @Model.Leg.TrainNr</b> from <b>@Model.Leg.DepStation</b> to <b>@Model.Leg.ArrStation</b>, starting @DateTime.Parse(Model.Leg.DepTime).ToString("yyyy-MM-dd HH:mm")
</p> </p>
<div class="flex-grid"> <div class="flex-grid">
<div class="flex-col"> <div class="flex-col">
<img src="@Model.Ticket.TicketQr" alt="Ticketcode"/> <img src="@Model.Ticket.TicketQr" alt="Ticketcode"/>
</div> </div>
<div class="flex-col"> <div class="flex-col">
<img src="@Model.Ticket.TicketSecCode" alt="Sichtmerkmal"/> <img src="@Model.Ticket.TicketSecCode" alt="Sichtmerkmal"/>
</div> </div>
</div> </div>
<br/> <br/>
<br/> <br/>
@ -33,102 +34,118 @@
<br/> <br/>
<br/> <br/>
@if (Model.Ticket.TicketInfo.Contains("BC 50")) { @if (Model.Ticket.TicketInfo.Contains("BC 50")) {
await using var db = new Database.DbConn(); await using var db = new Database.DbConn();
if (db.Cards.Any(p => p.Value == 50 && p.Traveller == Model.Ticket.Traveller && p.UserId == Model.Leg.UserId)) { if (db.Cards.Any(p => p.Value == 50 && p.Traveller == Model.Ticket.Traveller && p.UserId == Model.Leg.UserId)) {
var card = db.Cards.First(p => p.Value == 50 && p.Traveller == Model.Ticket.Traveller && p.UserId == Model.Leg.UserId); var card = db.Cards.First(p => p.Value == 50 && p.Traveller == Model.Ticket.Traveller && p.UserId == Model.Leg.UserId);
<div class="flex-grid">
<div class="flex-col">
<img src="@card.CardQr" alt="Ticketcode"/>
</div>
<div class="flex-col">
<img src="@card.CardSecCode" alt="Sichtmerkmal"/>
</div>
<div class="flex-col">
<div class="bahncard-outer">
<img class="bahncard" src='data:image/svg+xml;base64,@card.CardImage.Base64Encode()' alt="Bahncardimage"/>
</div>
</div>
</div>
var from = DateTime.Parse(card.ValidFrom); if (!card.CardQr.StartsWith("data:image/png"))
var to = DateTime.Parse(card.ValidTo); card.CardQr = Encoding.UTF8.GetString(Convert.FromBase64String(card.CardQr));
var qrfrom = DateTime.Parse(card.QrValidFrom); if (!card.CardSecCode.StartsWith("data:image/png"))
var qrto = DateTime.Parse(card.QrValidTo); card.CardSecCode = Encoding.UTF8.GetString(Convert.FromBase64String(card.CardSecCode));
if (!card.CardImage.StartsWith("<?xml"))
card.CardImage = Encoding.UTF8.GetString(Convert.FromBase64String(card.CardImage));
if (from > DateTime.Now) { <div class="flex-grid">
<div class="alert alert-info" role="alert"> <div class="flex-col">
The above card is not valid yet. <img src="@card.CardQr" alt="Ticketcode"/>
</div> </div>
} <div class="flex-col">
if (to < DateTime.Now) { <img src="@card.CardSecCode" alt="Sichtmerkmal"/>
<div class="alert alert-warning" role="alert"> </div>
The above card is expired. <div class="flex-col">
</div> <div class="bahncard-outer">
} <img class="bahncard" src='data:image/svg+xml;base64,@card.CardImage.Base64Encode()' alt="Bahncardimage"/>
if (qrfrom > DateTime.Now && !(from > DateTime.Now)) { </div>
<div class="alert alert-info" role="alert"> </div>
The above QR code is somehow not valid yet. Congrats, please open a bug report. </div>
</div>
} var from = DateTime.Parse(card.ValidFrom);
if (qrto < DateTime.Now) { var to = DateTime.Parse(card.ValidTo);
<div class="alert alert-warning" role="alert"> var qrfrom = DateTime.Parse(card.QrValidFrom);
The above QR code is expired. Please refresh the card. <a href="/Cards?edit=true">You can do that now</a>. var qrto = DateTime.Parse(card.QrValidTo);
</div>
} if (from > DateTime.Now) {
} <div class="alert alert-info" role="alert">
else { The above card is not valid yet.
<div class="alert alert-warning" role="alert"> </div>
I would show your BahnCard but you haven't added a card matching the value and name of the ticket yet. <a href="/Cards">You can do that now</a>. }
</div> if (to < DateTime.Now) {
} <div class="alert alert-warning" role="alert">
The above card is expired.
</div>
}
if (qrfrom > DateTime.Now && !(from > DateTime.Now)) {
<div class="alert alert-info" role="alert">
The above QR code is somehow not valid yet. Congrats, please open a bug report.
</div>
}
if (qrto < DateTime.Now) {
<div class="alert alert-warning" role="alert">
The above QR code is expired. Please refresh the card. <a href="/Cards?edit=true">You can do that now</a>.
</div>
}
}
else {
<div class="alert alert-warning" role="alert">
I would show your BahnCard but you haven't added a card matching the value and name of the ticket yet. <a href="/Cards">You can do that now</a>.
</div>
}
} }
else if (Model.Ticket.TicketInfo.Contains("BC 25")) { else if (Model.Ticket.TicketInfo.Contains("BC 25")) {
await using var db = new Database.DbConn(); await using var db = new Database.DbConn();
if (db.Cards.Any(p => p.Value == 25 && p.Traveller == Model.Ticket.Traveller && p.UserId == Model.Leg.UserId)) { if (db.Cards.Any(p => p.Value == 25 && p.Traveller == Model.Ticket.Traveller && p.UserId == Model.Leg.UserId)) {
var card = db.Cards.First(p => p.Value == 25 && p.Traveller == Model.Ticket.Traveller && p.UserId == Model.Leg.UserId); var card = db.Cards.First(p => p.Value == 25 && p.Traveller == Model.Ticket.Traveller && p.UserId == Model.Leg.UserId);
<div class="flex-grid">
<div class="flex-col">
<img src="@card.CardQr" alt="Ticketcode"/>
</div>
<div class="flex-col">
<img src="@card.CardSecCode" alt="Sichtmerkmal"/>
</div>
<div class="flex-col">
<div class="bahncard-outer">
<img class="bahncard" src='data:image/svg+xml;base64,@card.CardImage.Base64Encode()' alt="Bahncardimage"/>
</div>
</div>
</div>
var from = DateTime.Parse(card.ValidFrom); if (!card.CardQr.StartsWith("data:image/png"))
var to = DateTime.Parse(card.ValidTo); card.CardQr = Encoding.UTF8.GetString(Convert.FromBase64String(card.CardQr));
var qrfrom = DateTime.Parse(card.QrValidFrom); if (!card.CardSecCode.StartsWith("data:image/png"))
var qrto = DateTime.Parse(card.QrValidTo); card.CardSecCode = Encoding.UTF8.GetString(Convert.FromBase64String(card.CardSecCode));
if (!card.CardImage.StartsWith("<?xml"))
card.CardImage = Encoding.UTF8.GetString(Convert.FromBase64String(card.CardImage));
if (from > DateTime.Now) { <div class="flex-grid">
<div class="alert alert-info" role="alert"> <div class="flex-col">
The above card is not valid yet. <img src="@card.CardQr" alt="Ticketcode"/>
</div> </div>
} <div class="flex-col">
if (to < DateTime.Now) { <img src="@card.CardSecCode" alt="Sichtmerkmal"/>
<div class="alert alert-warning" role="alert"> </div>
The above card is expired. <div class="flex-col">
</div> <div class="bahncard-outer">
} <img class="bahncard" src='data:image/svg+xml;base64,@card.CardImage.Base64Encode()' alt="Bahncardimage"/>
if (qrfrom > DateTime.Now && !(from > DateTime.Now)) { </div>
<div class="alert alert-info" role="alert"> </div>
The above QR code is somehow not valid yet. Congrats, please open a bug report. </div>
</div>
} var from = DateTime.Parse(card.ValidFrom);
if (qrto < DateTime.Now) { var to = DateTime.Parse(card.ValidTo);
<div class="alert alert-warning" role="alert"> var qrfrom = DateTime.Parse(card.QrValidFrom);
The above QR code is expired. Please refresh the card. <a href="/Cards?edit=true">You can do that now</a>. var qrto = DateTime.Parse(card.QrValidTo);
</div>
} if (from > DateTime.Now) {
} <div class="alert alert-info" role="alert">
else { The above card is not valid yet.
<div class="alert alert-warning" role="alert"> </div>
I would show your BahnCard but you haven't added a card matching the value and name of the ticket yet. <a href="/Cards">You can do that now</a>. }
</div> if (to < DateTime.Now) {
} <div class="alert alert-warning" role="alert">
} The above card is expired.
</div>
}
if (qrfrom > DateTime.Now && !(from > DateTime.Now)) {
<div class="alert alert-info" role="alert">
The above QR code is somehow not valid yet. Congrats, please open a bug report.
</div>
}
if (qrto < DateTime.Now) {
<div class="alert alert-warning" role="alert">
The above QR code is expired. Please refresh the card. <a href="/Cards?edit=true">You can do that now</a>.
</div>
}
}
else {
<div class="alert alert-warning" role="alert">
I would show your BahnCard but you haven't added a card matching the value and name of the ticket yet. <a href="/Cards">You can do that now</a>.
</div>
}
}