summaryrefslogtreecommitdiffstats
path: root/src/server/Models/Database
diff options
context:
space:
mode:
authorivarlovlie <git@ivarlovlie.no>2022-01-22 22:43:38 +0100
committerivarlovlie <git@ivarlovlie.no>2022-01-22 22:43:38 +0100
commit88110f536f9c3843ecf5016122e101f8a424af77 (patch)
treee8be4e77ccfb5ad37f49f89adad59ff12b4c85ea /src/server/Models/Database
downloadbookmark-thing-88110f536f9c3843ecf5016122e101f8a424af77.tar.xz
bookmark-thing-88110f536f9c3843ecf5016122e101f8a424af77.zip
Initial commit
Diffstat (limited to 'src/server/Models/Database')
-rw-r--r--src/server/Models/Database/AccessToken.cs11
-rw-r--r--src/server/Models/Database/AppDbContext.cs25
-rw-r--r--src/server/Models/Database/Base.cs11
-rw-r--r--src/server/Models/Database/Entry.cs9
-rw-r--r--src/server/Models/Database/User.cs24
5 files changed, 80 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),
+ };
+ }
+}