JJ Colocate
This commit is contained in:
@@ -1,98 +1,98 @@
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
|
||||
namespace AobaCore.Models;
|
||||
|
||||
[BsonIgnoreExtraElements]
|
||||
public class Media
|
||||
{
|
||||
[BsonId]
|
||||
public ObjectId Id { get; set; }
|
||||
public ObjectId MediaId { get; set; }
|
||||
public string Filename { get; set; }
|
||||
public MediaType MediaType { get; set; }
|
||||
public string Ext { get; set; }
|
||||
public int ViewCount { get; set; }
|
||||
public ObjectId Owner { get; set; }
|
||||
public DateTime UploadDate { get; set; }
|
||||
|
||||
|
||||
public static readonly Dictionary<string, MediaType> KnownTypes = new()
|
||||
{
|
||||
{ ".jpg", MediaType.Image },
|
||||
{ ".avif", MediaType.Image },
|
||||
{ ".jpeg", MediaType.Image },
|
||||
{ ".png", MediaType.Image },
|
||||
{ ".apng", MediaType.Image },
|
||||
{ ".webp", MediaType.Image },
|
||||
{ ".ico", MediaType.Image },
|
||||
{ ".gif", MediaType.Image },
|
||||
{ ".mp3", MediaType.Audio },
|
||||
{ ".flac", MediaType.Audio },
|
||||
{ ".alac", MediaType.Audio },
|
||||
{ ".mp4", MediaType.Video },
|
||||
{ ".webm", MediaType.Video },
|
||||
{ ".mov", MediaType.Video },
|
||||
{ ".avi", MediaType.Video },
|
||||
{ ".mkv", MediaType.Video },
|
||||
{ ".txt", MediaType.Text },
|
||||
{ ".log", MediaType.Text },
|
||||
{ ".css", MediaType.Code },
|
||||
{ ".cs", MediaType.Code },
|
||||
{ ".cpp", MediaType.Code },
|
||||
{ ".lua", MediaType.Code },
|
||||
{ ".js", MediaType.Code },
|
||||
{ ".htm", MediaType.Code },
|
||||
{ ".html", MediaType.Code },
|
||||
{ ".cshtml", MediaType.Code },
|
||||
{ ".xml", MediaType.Code },
|
||||
{ ".json", MediaType.Code },
|
||||
{ ".py", MediaType.Code },
|
||||
};
|
||||
|
||||
[BsonConstructor]
|
||||
private Media()
|
||||
{
|
||||
Filename = string.Empty;
|
||||
Ext = string.Empty;
|
||||
}
|
||||
|
||||
public Media(ObjectId fileId, string filename, ObjectId owner)
|
||||
{
|
||||
MediaType = GetMediaType(filename);
|
||||
Ext = Path.GetExtension(filename);
|
||||
Filename = filename;
|
||||
MediaId = fileId;
|
||||
Owner = owner;
|
||||
Id = ObjectId.GenerateNewId();
|
||||
UploadDate = DateTime.UtcNow;
|
||||
}
|
||||
|
||||
public string GetMediaUrl()
|
||||
{
|
||||
return this switch
|
||||
{
|
||||
//Media { MediaType: MediaType.Raw or MediaType.Text or MediaType.Code} => $"/i/dl/{MediaId}/{Filename}",
|
||||
_ => $"/m/{MediaId}"
|
||||
};
|
||||
}
|
||||
|
||||
public static MediaType GetMediaType(string filename)
|
||||
{
|
||||
string ext = Path.GetExtension(filename);
|
||||
if (KnownTypes.TryGetValue(ext, out MediaType mType))
|
||||
return mType;
|
||||
else
|
||||
return MediaType.Raw;
|
||||
}
|
||||
}
|
||||
|
||||
public enum MediaType
|
||||
{
|
||||
Image,
|
||||
Audio,
|
||||
Video,
|
||||
Text,
|
||||
Code,
|
||||
Raw
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
|
||||
namespace AobaCore.Models;
|
||||
|
||||
[BsonIgnoreExtraElements]
|
||||
public class Media
|
||||
{
|
||||
[BsonId]
|
||||
public ObjectId Id { get; set; }
|
||||
public ObjectId MediaId { get; set; }
|
||||
public string Filename { get; set; }
|
||||
public MediaType MediaType { get; set; }
|
||||
public string Ext { get; set; }
|
||||
public int ViewCount { get; set; }
|
||||
public ObjectId Owner { get; set; }
|
||||
public DateTime UploadDate { get; set; }
|
||||
|
||||
|
||||
public static readonly Dictionary<string, MediaType> KnownTypes = new()
|
||||
{
|
||||
{ ".jpg", MediaType.Image },
|
||||
{ ".avif", MediaType.Image },
|
||||
{ ".jpeg", MediaType.Image },
|
||||
{ ".png", MediaType.Image },
|
||||
{ ".apng", MediaType.Image },
|
||||
{ ".webp", MediaType.Image },
|
||||
{ ".ico", MediaType.Image },
|
||||
{ ".gif", MediaType.Image },
|
||||
{ ".mp3", MediaType.Audio },
|
||||
{ ".flac", MediaType.Audio },
|
||||
{ ".alac", MediaType.Audio },
|
||||
{ ".mp4", MediaType.Video },
|
||||
{ ".webm", MediaType.Video },
|
||||
{ ".mov", MediaType.Video },
|
||||
{ ".avi", MediaType.Video },
|
||||
{ ".mkv", MediaType.Video },
|
||||
{ ".txt", MediaType.Text },
|
||||
{ ".log", MediaType.Text },
|
||||
{ ".css", MediaType.Code },
|
||||
{ ".cs", MediaType.Code },
|
||||
{ ".cpp", MediaType.Code },
|
||||
{ ".lua", MediaType.Code },
|
||||
{ ".js", MediaType.Code },
|
||||
{ ".htm", MediaType.Code },
|
||||
{ ".html", MediaType.Code },
|
||||
{ ".cshtml", MediaType.Code },
|
||||
{ ".xml", MediaType.Code },
|
||||
{ ".json", MediaType.Code },
|
||||
{ ".py", MediaType.Code },
|
||||
};
|
||||
|
||||
[BsonConstructor]
|
||||
private Media()
|
||||
{
|
||||
Filename = string.Empty;
|
||||
Ext = string.Empty;
|
||||
}
|
||||
|
||||
public Media(ObjectId fileId, string filename, ObjectId owner)
|
||||
{
|
||||
MediaType = GetMediaType(filename);
|
||||
Ext = Path.GetExtension(filename);
|
||||
Filename = filename;
|
||||
MediaId = fileId;
|
||||
Owner = owner;
|
||||
Id = ObjectId.GenerateNewId();
|
||||
UploadDate = DateTime.UtcNow;
|
||||
}
|
||||
|
||||
public string GetMediaUrl()
|
||||
{
|
||||
return this switch
|
||||
{
|
||||
//Media { MediaType: MediaType.Raw or MediaType.Text or MediaType.Code} => $"/i/dl/{MediaId}/{Filename}",
|
||||
_ => $"/m/{MediaId}"
|
||||
};
|
||||
}
|
||||
|
||||
public static MediaType GetMediaType(string filename)
|
||||
{
|
||||
string ext = Path.GetExtension(filename);
|
||||
if (KnownTypes.TryGetValue(ext, out MediaType mType))
|
||||
return mType;
|
||||
else
|
||||
return MediaType.Raw;
|
||||
}
|
||||
}
|
||||
|
||||
public enum MediaType
|
||||
{
|
||||
Image,
|
||||
Audio,
|
||||
Video,
|
||||
Text,
|
||||
Code,
|
||||
Raw
|
||||
}
|
||||
@@ -1,19 +1,19 @@
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
|
||||
namespace AobaCore.Models;
|
||||
|
||||
public record MediaThumbnail
|
||||
{
|
||||
[BsonId]
|
||||
public required ObjectId Id { get; init; }
|
||||
public Dictionary<ThumbnailSize, ObjectId> Sizes { get; set; } = [];
|
||||
}
|
||||
|
||||
public enum ThumbnailSize
|
||||
{
|
||||
Small = 128,
|
||||
Medium = 256,
|
||||
Large = 512,
|
||||
ExtraLarge = 1024
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
|
||||
namespace AobaCore.Models;
|
||||
|
||||
public record MediaThumbnail
|
||||
{
|
||||
[BsonId]
|
||||
public required ObjectId Id { get; init; }
|
||||
public Dictionary<ThumbnailSize, ObjectId> Sizes { get; set; } = [];
|
||||
}
|
||||
|
||||
public enum ThumbnailSize
|
||||
{
|
||||
Small = 128,
|
||||
Medium = 256,
|
||||
Large = 512,
|
||||
ExtraLarge = 1024
|
||||
}
|
||||
@@ -1,18 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AobaCore.Models;
|
||||
public class PagedResult<T>(List<T> items, int page, int pageSize, long totalItems)
|
||||
{
|
||||
public List<T> Items { get; set; } = items;
|
||||
public int Page { get; set; } = page;
|
||||
public int PageSize { get; set; } = pageSize;
|
||||
public long TotalItems { get; set; } = totalItems;
|
||||
public long TotalPages { get; set; } = totalItems / pageSize;
|
||||
public string? Query { get; set; }
|
||||
}
|
||||
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AobaCore.Models;
|
||||
public class PagedResult<T>(List<T> items, int page, int pageSize, long totalItems)
|
||||
{
|
||||
public List<T> Items { get; set; } = items;
|
||||
public int Page { get; set; } = page;
|
||||
public int PageSize { get; set; } = pageSize;
|
||||
public long TotalItems { get; set; } = totalItems;
|
||||
public long TotalPages { get; set; } = totalItems / pageSize;
|
||||
public string? Query { get; set; }
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,36 +1,36 @@
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
|
||||
using System;
|
||||
using System.Security.Claims;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AobaCore.Models;
|
||||
public class User
|
||||
{
|
||||
[BsonId]
|
||||
public ObjectId Id { get; set; }
|
||||
public required string Username { get; set; }
|
||||
public required string PasswordHash { get; set; }
|
||||
public required string Role { get; set; }
|
||||
public bool IsArgon { get; set; }
|
||||
public ObjectId[] ApiKeys { get; set; } = [];
|
||||
public List<ObjectId> RegTokens { get; set; } = [];
|
||||
|
||||
public ClaimsIdentity GetIdentity()
|
||||
{
|
||||
var id = new ClaimsIdentity(new[]
|
||||
{
|
||||
new Claim(ClaimTypes.NameIdentifier, Id.ToString()),
|
||||
new Claim(ClaimTypes.Name, Username),
|
||||
});
|
||||
|
||||
if (Role != null)
|
||||
id.AddClaim(new Claim(ClaimTypes.Role, Role));
|
||||
return id;
|
||||
}
|
||||
|
||||
}
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
|
||||
using System;
|
||||
using System.Security.Claims;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AobaCore.Models;
|
||||
public class User
|
||||
{
|
||||
[BsonId]
|
||||
public ObjectId Id { get; set; }
|
||||
public required string Username { get; set; }
|
||||
public required string PasswordHash { get; set; }
|
||||
public required string Role { get; set; }
|
||||
public bool IsArgon { get; set; }
|
||||
public ObjectId[] ApiKeys { get; set; } = [];
|
||||
public List<ObjectId> RegTokens { get; set; } = [];
|
||||
|
||||
public ClaimsIdentity GetIdentity()
|
||||
{
|
||||
var id = new ClaimsIdentity(new[]
|
||||
{
|
||||
new Claim(ClaimTypes.NameIdentifier, Id.ToString()),
|
||||
new Claim(ClaimTypes.Name, Username),
|
||||
});
|
||||
|
||||
if (Role != null)
|
||||
id.AddClaim(new Claim(ClaimTypes.Role, Role));
|
||||
return id;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user