Only show last three digits for 125khz tokens
This commit is contained in:
parent
67a2c51a1b
commit
cce63b8d87
|
@ -0,0 +1,99 @@
|
|||
// <auto-generated />
|
||||
using AfRApay.Web.Backend.Database;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace AfRApay.Web.Backend.Database.Migrations
|
||||
{
|
||||
[DbContext(typeof(DatabaseContext))]
|
||||
[Migration("20230518190147_65F053DB-D1B9-4D26-B494-63452C498D74")]
|
||||
partial class _65F053DBD1B94D26B49463452C498D74
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder.HasAnnotation("ProductVersion", "7.0.2");
|
||||
|
||||
modelBuilder.Entity("AfRApay.Web.Backend.Database.Tables.Card", b =>
|
||||
{
|
||||
b.Property<string>("Id")
|
||||
.HasColumnType("NVarChar(255)")
|
||||
.HasColumnName("CardId");
|
||||
|
||||
b.Property<int>("Type")
|
||||
.HasColumnType("INTEGER")
|
||||
.HasColumnName("CardType");
|
||||
|
||||
b.Property<long>("UserId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("UserId");
|
||||
|
||||
b.ToTable("Cards");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("AfRApay.Web.Backend.Database.Tables.Config", b =>
|
||||
{
|
||||
b.Property<string>("Name")
|
||||
.HasColumnType("NVarChar(255)")
|
||||
.HasColumnName("Name");
|
||||
|
||||
b.Property<string>("Value")
|
||||
.IsRequired()
|
||||
.HasColumnType("NVarChar(255)")
|
||||
.HasColumnName("Value");
|
||||
|
||||
b.HasKey("Name");
|
||||
|
||||
b.ToTable("Config");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("AfRApay.Web.Backend.Database.Tables.User", b =>
|
||||
{
|
||||
b.Property<long>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER")
|
||||
.HasColumnName("ID");
|
||||
|
||||
b.Property<long>("Balance")
|
||||
.HasColumnType("INTEGER")
|
||||
.HasColumnName("Balance");
|
||||
|
||||
b.Property<string>("LastIdempotencyKey")
|
||||
.HasColumnType("NVarChar(255)")
|
||||
.HasColumnName("LastIdempotencyKey");
|
||||
|
||||
b.Property<string>("Nickname")
|
||||
.IsRequired()
|
||||
.HasColumnType("NVarChar(255)")
|
||||
.HasColumnName("Nickname");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("Nickname")
|
||||
.IsUnique();
|
||||
|
||||
b.ToTable("Users");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("AfRApay.Web.Backend.Database.Tables.Card", b =>
|
||||
{
|
||||
b.HasOne("AfRApay.Web.Backend.Database.Tables.User", "User")
|
||||
.WithMany()
|
||||
.HasForeignKey("UserId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("User");
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace AfRApay.Web.Backend.Database.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class _65F053DBD1B94D26B49463452C498D74 : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AddColumn<int>(
|
||||
name: "CardType",
|
||||
table: "Cards",
|
||||
type: "INTEGER",
|
||||
nullable: false,
|
||||
defaultValue: 0);
|
||||
|
||||
// Detect AfRA door tokens
|
||||
migrationBuilder.Sql("UPDATE Cards SET CardType = 10 WHERE LENGTH(CardId) = 10 AND CardId GLOB '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropColumn(
|
||||
name: "CardType",
|
||||
table: "Cards");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -22,6 +22,10 @@ namespace AfRApay.Web.Backend.Database.Migrations
|
|||
.HasColumnType("NVarChar(255)")
|
||||
.HasColumnName("CardId");
|
||||
|
||||
b.Property<int>("Type")
|
||||
.HasColumnType("INTEGER")
|
||||
.HasColumnName("CardType");
|
||||
|
||||
b.Property<long>("UserId")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
|
|
|
@ -5,6 +5,20 @@ namespace AfRApay.Web.Backend.Database.Tables;
|
|||
|
||||
[Table("Cards")]
|
||||
public class Card {
|
||||
[Column("CardId", TypeName = "NVarChar(255)")] [Key] public string Id { get; set; } = null!;
|
||||
[Column("UserId")] [Required] public User User { get; set; } = null!;
|
||||
[Column("CardId", TypeName = "NVarChar(255)")] [Key] public string Id { get; set; } = null!;
|
||||
[Column("CardType")] [Required] public CardType Type { get; set; } = CardType.Unknown;
|
||||
[Column("UserId")] [Required] public User User { get; set; } = null!;
|
||||
|
||||
public enum CardType {
|
||||
Unknown = 0,
|
||||
Rfid125KhzGeneric = 10,
|
||||
NfcGeneric = 20,
|
||||
NfcMifareClassic = 21,
|
||||
NfcTflOyster = 22,
|
||||
NfcOvChipkaart = 23,
|
||||
NfcItso = 24,
|
||||
FeliCaGeneric = 30,
|
||||
FeliCaSuica = 31,
|
||||
FeliCaPasmo = 32,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
@using Microsoft.AspNetCore.Mvc.TagHelpers
|
||||
@using Microsoft.EntityFrameworkCore
|
||||
@using System.Globalization
|
||||
@using AfRApay.Web.Backend.Database.Tables
|
||||
@model EditUserModel
|
||||
@{
|
||||
ViewData["Title"] = "Edit User";
|
||||
|
@ -70,23 +71,23 @@
|
|||
<br/>
|
||||
<h3 class="text-center">Cards</h3>
|
||||
@{
|
||||
async Task RenderCard(string cardHolder, string cardNumber = "Awooo!", string expDate = "01/2038", EditUserModel.CardType type = EditUserModel.CardType.Normal) {
|
||||
var cardTypeClasses = type switch {
|
||||
EditUserModel.CardType.Normal => "fake-card",
|
||||
EditUserModel.CardType.LinkPlaceholder => "fake-card ghost-card",
|
||||
EditUserModel.CardType.DeletionConfirmation => "fake-card",
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(type), type, null)};
|
||||
async Task RenderCard(string cardHolder, string cardNumber = "Awooo!", string expDate = "01/2038", Card.CardType cardType = Card.CardType.Unknown, EditUserModel.CardDisplayType displayType = EditUserModel.CardDisplayType.Normal) {
|
||||
var cardTypeClasses = displayType switch {
|
||||
EditUserModel.CardDisplayType.Normal => "fake-card",
|
||||
EditUserModel.CardDisplayType.LinkPlaceholder => "fake-card ghost-card",
|
||||
EditUserModel.CardDisplayType.DeletionConfirmation => "fake-card",
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(displayType), displayType, null)};
|
||||
|
||||
var blurClasses = type == EditUserModel.CardType.Normal ? " blur-true m-2" : "m-2";
|
||||
var blurClasses = displayType == EditUserModel.CardDisplayType.Normal ? " blur-true m-2" : "m-2";
|
||||
|
||||
<div class="fake-card-wrapper @blurClasses">
|
||||
@if (type == EditUserModel.CardType.Normal) {
|
||||
@if (displayType == EditUserModel.CardDisplayType.Normal) {
|
||||
<form id="@cardNumber" method="POST">
|
||||
<input type="hidden" name="cardId" value="@cardNumber">
|
||||
<button type="button" class="btn btn-danger btn-lg hover-button" data-bs-toggle="modal" data-bs-target="#delete_card_@(cardNumber)_modal">Delete</button>
|
||||
</form>
|
||||
}
|
||||
else if (type == EditUserModel.CardType.LinkPlaceholder) {
|
||||
else if (displayType == EditUserModel.CardDisplayType.LinkPlaceholder) {
|
||||
if (linkActive) {
|
||||
<button class="btn btn-secondary btn-lg link-card-button-in-progress">Link in progress</button>
|
||||
}
|
||||
|
@ -108,7 +109,13 @@
|
|||
</div>
|
||||
</div>
|
||||
@if(cardNumber.Length < 12) {
|
||||
<h2 class="card-number">@cardNumber</h2>
|
||||
if (cardType == Card.CardType.Rfid125KhzGeneric) {
|
||||
<h2 class="card-number"><span class="text-blur">0000000</span>@cardNumber[^3..]</h2>
|
||||
}
|
||||
else
|
||||
{
|
||||
<h2 class="card-number">@cardNumber</h2>
|
||||
}
|
||||
}
|
||||
else {
|
||||
<h2 class="card-number-long">@cardNumber</h2>
|
||||
|
@ -132,7 +139,7 @@
|
|||
}
|
||||
|
||||
@{
|
||||
async Task RenderCardModal(string cardHolder, string cardNumber) {
|
||||
async Task RenderCardModal(string cardHolder, string cardNumber, Card.CardType cardType = Card.CardType.Unknown) {
|
||||
<div class="modal fade" id="delete_card_@(cardNumber)_modal" tabindex="-1" aria-labelledby="delete_card_@(cardNumber)_modal_label" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
|
@ -142,7 +149,7 @@
|
|||
</div>
|
||||
<div class="modal-body d-flex justify-content-center">
|
||||
@{
|
||||
await RenderCard(cardHolder, cardNumber, type: EditUserModel.CardType.DeletionConfirmation);
|
||||
await RenderCard(cardHolder, cardNumber, cardType: cardType, displayType: EditUserModel.CardDisplayType.DeletionConfirmation);
|
||||
}
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
|
@ -158,9 +165,9 @@
|
|||
<div class="row justify-content-center">
|
||||
@{
|
||||
foreach (var card in cards) {
|
||||
await RenderCard(user.Nickname, card.Id);
|
||||
await RenderCardModal(user.Nickname, card.Id);
|
||||
await RenderCard(user.Nickname, card.Id, cardType: card.Type);
|
||||
await RenderCardModal(user.Nickname, card.Id, cardType: card.Type);
|
||||
}
|
||||
await RenderCard(user.Nickname, type: EditUserModel.CardType.LinkPlaceholder);
|
||||
await RenderCard(user.Nickname, displayType: EditUserModel.CardDisplayType.LinkPlaceholder);
|
||||
}
|
||||
</div>
|
||||
|
|
|
@ -80,7 +80,7 @@ public class EditUserModel : PageModel {
|
|||
Response.Redirect($"/#{user.Nickname}");
|
||||
}
|
||||
|
||||
public enum CardType {
|
||||
public enum CardDisplayType {
|
||||
Normal = 1,
|
||||
LinkPlaceholder = 2,
|
||||
DeletionConfirmation = 3
|
||||
|
|
|
@ -310,3 +310,8 @@ button.accept-policy {
|
|||
.mw-max-content {
|
||||
min-width: max-content;
|
||||
}
|
||||
|
||||
.text-blur {
|
||||
color: transparent;
|
||||
text-shadow: 0 0 15px #fff;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue