From 88110f536f9c3843ecf5016122e101f8a424af77 Mon Sep 17 00:00:00 2001 From: ivarlovlie Date: Sat, 22 Jan 2022 22:43:38 +0100 Subject: Initial commit --- src/server/Models/Database/AccessToken.cs | 11 +++++++++++ src/server/Models/Database/AppDbContext.cs | 25 +++++++++++++++++++++++++ src/server/Models/Database/Base.cs | 11 +++++++++++ src/server/Models/Database/Entry.cs | 9 +++++++++ src/server/Models/Database/User.cs | 24 ++++++++++++++++++++++++ src/server/Models/General/ApiSpecDocument.cs | 9 +++++++++ src/server/Models/General/AppPath.cs | 23 +++++++++++++++++++++++ src/server/Models/Result/ErrorResult.cs | 12 ++++++++++++ 8 files changed, 124 insertions(+) create mode 100644 src/server/Models/Database/AccessToken.cs create mode 100644 src/server/Models/Database/AppDbContext.cs create mode 100644 src/server/Models/Database/Base.cs create mode 100644 src/server/Models/Database/Entry.cs create mode 100644 src/server/Models/Database/User.cs create mode 100644 src/server/Models/General/ApiSpecDocument.cs create mode 100644 src/server/Models/General/AppPath.cs create mode 100644 src/server/Models/Result/ErrorResult.cs (limited to 'src/server/Models') diff --git a/src/server/Models/Database/AccessToken.cs b/src/server/Models/Database/AccessToken.cs new file mode 100644 index 0000000..51ada27 --- /dev/null +++ b/src/server/Models/Database/AccessToken.cs @@ -0,0 +1,11 @@ +namespace IOL.BookmarkThing.Server.Models.Database; + +public class AccessToken : Base +{ + public User User { get; set; } + public string Name { get; set; } + + public string PublicId() { + return Convert.ToBase64String(Id.ToByteArray()); + } +} diff --git a/src/server/Models/Database/AppDbContext.cs b/src/server/Models/Database/AppDbContext.cs new file mode 100644 index 0000000..ae1f45b --- /dev/null +++ b/src/server/Models/Database/AppDbContext.cs @@ -0,0 +1,25 @@ +namespace IOL.BookmarkThing.Server.Models.Database; + +public class AppDbContext : DbContext +{ + public AppDbContext(DbContextOptions options) : base(options) { } + public DbSet Users { get; set; } + public DbSet Entries { get; set; } + public DbSet AccessTokens { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) { + modelBuilder.Entity(e => { + e.ToTable("users"); + }); + + modelBuilder.Entity(e => { + e.ToTable("entries"); + }); + + modelBuilder.Entity(e => { + e.ToTable("access_tokens"); + }); + + base.OnModelCreating(modelBuilder); + } +} diff --git a/src/server/Models/Database/Base.cs b/src/server/Models/Database/Base.cs new file mode 100644 index 0000000..e6d6646 --- /dev/null +++ b/src/server/Models/Database/Base.cs @@ -0,0 +1,11 @@ +namespace IOL.BookmarkThing.Server.Models.Database; + +public class Base +{ + public Base() { + Created = DateTime.UtcNow; + } + + public Guid Id { get; set; } + public DateTime Created { get; set; } +} diff --git a/src/server/Models/Database/Entry.cs b/src/server/Models/Database/Entry.cs new file mode 100644 index 0000000..a992a87 --- /dev/null +++ b/src/server/Models/Database/Entry.cs @@ -0,0 +1,9 @@ +namespace IOL.BookmarkThing.Server.Models.Database; + +public class Entry : Base +{ + public Guid UserId { get; set; } + public Uri Url { get; set; } + public string Description { get; set; } + public string Tags { get; set; } +} diff --git a/src/server/Models/Database/User.cs b/src/server/Models/Database/User.cs new file mode 100644 index 0000000..1215f4e --- /dev/null +++ b/src/server/Models/Database/User.cs @@ -0,0 +1,24 @@ +namespace IOL.BookmarkThing.Server.Models.Database; + +public class User : Base +{ + public User(string username) => Username = username; + + public string Username { get; set; } + public string Password { get; set; } + + public void HashAndSetPassword(string password) { + Password = PasswordHelper.HashPassword(password); + } + + public bool VerifyPassword(string password) { + return PasswordHelper.Verify(password, Password); + } + + public IEnumerable DefaultClaims() { + return new Claim[] { + new(ClaimTypes.NameIdentifier, Id.ToString()), + new(ClaimTypes.Name, Username), + }; + } +} diff --git a/src/server/Models/General/ApiSpecDocument.cs b/src/server/Models/General/ApiSpecDocument.cs new file mode 100644 index 0000000..5f5c9df --- /dev/null +++ b/src/server/Models/General/ApiSpecDocument.cs @@ -0,0 +1,9 @@ +namespace IOL.BookmarkThing.Server.Models.General; + +public class ApiSpecDocument +{ + public string VersionName { get; set; } + public string SwaggerPath { get; set; } + public ApiVersion Version { get; set; } + public OpenApiInfo OpenApiInfo { get; set; } +} diff --git a/src/server/Models/General/AppPath.cs b/src/server/Models/General/AppPath.cs new file mode 100644 index 0000000..063fafe --- /dev/null +++ b/src/server/Models/General/AppPath.cs @@ -0,0 +1,23 @@ +namespace IOL.BookmarkThing.Server.Models.General; + +public sealed record AppPath +{ + public string HostPath { get; init; } + public string WebPath { get; init; } + + public string GetHostPathForFilename(string filename, string fallback = "") { + if (filename.IsNullOrWhiteSpace()) { + return fallback; + } + + return Path.Combine(HostPath, filename); + } + + public string GetWebPathForFilename(string filename, string fallback = "") { + if (filename.IsNullOrWhiteSpace()) { + return fallback; + } + + return Path.Combine(WebPath, filename); + } +} diff --git a/src/server/Models/Result/ErrorResult.cs b/src/server/Models/Result/ErrorResult.cs new file mode 100644 index 0000000..64c5a28 --- /dev/null +++ b/src/server/Models/Result/ErrorResult.cs @@ -0,0 +1,12 @@ +namespace IOL.BookmarkThing.Server.Models.Result; + +public class ErrorResult +{ + public ErrorResult(string title = default, string text = default) { + Title = title; + Text = text; + } + + public string Title { get; set; } + public string Text { get; set; } +} -- cgit v1.3