diff options
| author | ivarlovlie <git@ivarlovlie.no> | 2022-01-22 22:43:38 +0100 |
|---|---|---|
| committer | ivarlovlie <git@ivarlovlie.no> | 2022-01-22 22:43:38 +0100 |
| commit | 88110f536f9c3843ecf5016122e101f8a424af77 (patch) | |
| tree | e8be4e77ccfb5ad37f49f89adad59ff12b4c85ea /src/server/Models | |
| download | bookmark-thing-88110f536f9c3843ecf5016122e101f8a424af77.tar.xz bookmark-thing-88110f536f9c3843ecf5016122e101f8a424af77.zip | |
Initial commit
Diffstat (limited to 'src/server/Models')
| -rw-r--r-- | src/server/Models/Database/AccessToken.cs | 11 | ||||
| -rw-r--r-- | src/server/Models/Database/AppDbContext.cs | 25 | ||||
| -rw-r--r-- | src/server/Models/Database/Base.cs | 11 | ||||
| -rw-r--r-- | src/server/Models/Database/Entry.cs | 9 | ||||
| -rw-r--r-- | src/server/Models/Database/User.cs | 24 | ||||
| -rw-r--r-- | src/server/Models/General/ApiSpecDocument.cs | 9 | ||||
| -rw-r--r-- | src/server/Models/General/AppPath.cs | 23 | ||||
| -rw-r--r-- | src/server/Models/Result/ErrorResult.cs | 12 |
8 files changed, 124 insertions, 0 deletions
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<AppDbContext> options) : base(options) { } + public DbSet<User> Users { get; set; } + public DbSet<Entry> Entries { get; set; } + public DbSet<AccessToken> AccessTokens { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) { + modelBuilder.Entity<User>(e => { + e.ToTable("users"); + }); + + modelBuilder.Entity<Entry>(e => { + e.ToTable("entries"); + }); + + modelBuilder.Entity<AccessToken>(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<Claim> 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; } +} |
