2024-05-28 15:29:18 +02:00
|
|
|
using System.Security.Cryptography;
|
|
|
|
using Foxnouns.Backend.Database.Models;
|
|
|
|
using Foxnouns.Backend.Utils;
|
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
|
|
|
|
namespace Foxnouns.Backend.Database;
|
|
|
|
|
|
|
|
public static class DatabaseQueryExtensions
|
|
|
|
{
|
|
|
|
public static async Task<User> ResolveUserAsync(this DatabaseContext context, string userRef)
|
|
|
|
{
|
|
|
|
User? user;
|
|
|
|
if (Snowflake.TryParse(userRef, out var snowflake))
|
|
|
|
{
|
|
|
|
user = await context.Users
|
|
|
|
.FirstOrDefaultAsync(u => u.Id == snowflake);
|
|
|
|
if (user != null) return user;
|
|
|
|
}
|
|
|
|
|
|
|
|
user = await context.Users
|
|
|
|
.FirstOrDefaultAsync(u => u.Username == userRef);
|
|
|
|
if (user != null) return user;
|
2024-05-28 17:09:50 +02:00
|
|
|
throw new ApiError.NotFound("No user with that ID or username found.", code: ErrorCode.UserNotFound);
|
2024-05-28 15:29:18 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public static async Task<Application> GetFrontendApplicationAsync(this DatabaseContext context)
|
|
|
|
{
|
|
|
|
var app = await context.Applications.FirstOrDefaultAsync(a => a.Id == new Snowflake(0));
|
|
|
|
if (app != null) return app;
|
|
|
|
|
|
|
|
app = new Application
|
|
|
|
{
|
|
|
|
Id = new Snowflake(0),
|
|
|
|
ClientId = RandomNumberGenerator.GetHexString(32, true),
|
|
|
|
ClientSecret = OauthUtils.RandomToken(48),
|
|
|
|
Name = "pronouns.cc",
|
|
|
|
Scopes = ["*"],
|
|
|
|
RedirectUris = [],
|
|
|
|
};
|
|
|
|
|
|
|
|
context.Add(app);
|
|
|
|
await context.SaveChangesAsync();
|
|
|
|
return app;
|
|
|
|
}
|
|
|
|
}
|