mirror of
https://github.com/versia-pub/server.git
synced 2026-03-13 05:49:16 +01:00
refactor(database): 🚚 Rename Application to Client everywhere
This commit is contained in:
parent
6f97903f3b
commit
1a0a27bee1
25 changed files with 2549 additions and 90 deletions
|
|
@ -1,15 +1,15 @@
|
|||
import { afterAll, describe, expect, test } from "bun:test";
|
||||
import { config } from "@versia-server/config";
|
||||
import { Application } from "@versia-server/kit/db";
|
||||
import { Client } from "@versia-server/kit/db";
|
||||
import { fakeRequest, getTestUsers } from "@versia-server/tests";
|
||||
import { randomString } from "@/math";
|
||||
|
||||
const { users, deleteUsers, passwords } = await getTestUsers(1);
|
||||
|
||||
// Create application
|
||||
const application = await Application.insert({
|
||||
const application = await Client.insert({
|
||||
id: randomString(32, "hex"),
|
||||
name: "Test Application",
|
||||
name: "Test Client",
|
||||
secret: "test",
|
||||
redirectUris: ["https://example.com"],
|
||||
scopes: ["read", "write"],
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { config } from "@versia-server/config";
|
||||
import { ApiError } from "@versia-server/kit";
|
||||
import { apiRoute, handleZodError } from "@versia-server/kit/api";
|
||||
import { Application, User } from "@versia-server/kit/db";
|
||||
import { Client, User } from "@versia-server/kit/db";
|
||||
import { Users } from "@versia-server/kit/tables";
|
||||
import { password as bunPassword } from "bun";
|
||||
import { eq, or } from "drizzle-orm";
|
||||
|
|
@ -156,7 +156,7 @@ export default apiRoute((app) =>
|
|||
config.authentication.key,
|
||||
);
|
||||
|
||||
const application = await Application.fromClientId(client_id);
|
||||
const application = await Client.fromClientId(client_id);
|
||||
|
||||
if (!application) {
|
||||
throw new ApiError(400, "Invalid application");
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import {
|
|||
} from "@versia/client/schemas";
|
||||
import { ApiError } from "@versia-server/kit";
|
||||
import { apiRoute, handleZodError, jsonOrForm } from "@versia-server/kit/api";
|
||||
import { Application } from "@versia-server/kit/db";
|
||||
import { Client } from "@versia-server/kit/db";
|
||||
import { describeRoute, resolver, validator } from "hono-openapi";
|
||||
import { z } from "zod/v4";
|
||||
import { randomString } from "@/math";
|
||||
|
|
@ -62,7 +62,7 @@ export default apiRoute((app) =>
|
|||
const { client_name, redirect_uris, scopes, website } =
|
||||
context.req.valid("json");
|
||||
|
||||
const app = await Application.insert({
|
||||
const app = await Client.insert({
|
||||
id: randomString(32, "base64url"),
|
||||
name: client_name,
|
||||
redirectUris: Array.isArray(redirect_uris)
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import {
|
|||
} from "@versia/client/schemas";
|
||||
import { ApiError } from "@versia-server/kit";
|
||||
import { apiRoute, auth } from "@versia-server/kit/api";
|
||||
import { Application } from "@versia-server/kit/db";
|
||||
import { Client } from "@versia-server/kit/db";
|
||||
import { describeRoute, resolver } from "hono-openapi";
|
||||
|
||||
export default apiRoute((app) =>
|
||||
|
|
@ -38,7 +38,7 @@ export default apiRoute((app) =>
|
|||
async (context) => {
|
||||
const { token } = context.get("auth");
|
||||
|
||||
const application = await Application.getFromToken(
|
||||
const application = await Client.getFromToken(
|
||||
token.data.accessToken,
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import { RolePermission } from "@versia/client/schemas";
|
|||
import { config } from "@versia-server/config";
|
||||
import { ApiError } from "@versia-server/kit";
|
||||
import { apiRoute, auth, handleZodError } from "@versia-server/kit/api";
|
||||
import { Application, db } from "@versia-server/kit/db";
|
||||
import { Client, db } from "@versia-server/kit/db";
|
||||
import { OpenIdLoginFlows } from "@versia-server/kit/tables";
|
||||
import { randomUUIDv7 } from "bun";
|
||||
import { describeRoute, resolver, validator } from "hono-openapi";
|
||||
|
|
@ -123,7 +123,7 @@ export default apiRoute((app) => {
|
|||
issuerId,
|
||||
);
|
||||
|
||||
const application = await Application.insert({
|
||||
const application = await Client.insert({
|
||||
id:
|
||||
user.id +
|
||||
Buffer.from(
|
||||
|
|
@ -144,7 +144,7 @@ export default apiRoute((app) => {
|
|||
codeVerifier,
|
||||
state: parameters.state,
|
||||
issuerId,
|
||||
applicationId: application.id,
|
||||
clientId: application.id,
|
||||
})
|
||||
.returning()
|
||||
)[0];
|
||||
|
|
|
|||
|
|
@ -249,7 +249,7 @@ export default apiRoute((app) =>
|
|||
spoilerText: sanitizedSpoilerText,
|
||||
replyId: in_reply_to_id ?? undefined,
|
||||
quotingId: quote_id ?? undefined,
|
||||
applicationId: application?.id,
|
||||
clientId: application?.id,
|
||||
contentSource: status,
|
||||
contentType: content_type,
|
||||
});
|
||||
|
|
|
|||
|
|
@ -13,10 +13,10 @@ afterAll(async () => {
|
|||
});
|
||||
|
||||
describe("Login flow", () => {
|
||||
test("should create an application", async () => {
|
||||
test("should create a client", async () => {
|
||||
const client = await generateClient(users[0]);
|
||||
|
||||
const { ok, data } = await client.createApp("Test Application", {
|
||||
const { ok, data } = await client.createApp("Test Client", {
|
||||
redirect_uris: "https://example.com",
|
||||
website: "https://example.com",
|
||||
scopes: ["read", "write"],
|
||||
|
|
@ -24,7 +24,7 @@ describe("Login flow", () => {
|
|||
|
||||
expect(ok).toBe(true);
|
||||
expect(data).toEqual({
|
||||
name: "Test Application",
|
||||
name: "Test Client",
|
||||
website: "https://example.com",
|
||||
client_id: expect.any(String),
|
||||
client_secret: expect.any(String),
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
import { afterAll, describe, expect, test } from "bun:test";
|
||||
import { Application, Token } from "@versia-server/kit/db";
|
||||
import { Client, Token } from "@versia-server/kit/db";
|
||||
import { fakeRequest, getTestUsers } from "@versia-server/tests";
|
||||
import { randomUUIDv7 } from "bun";
|
||||
|
||||
const { deleteUsers, users } = await getTestUsers(1);
|
||||
|
||||
const application = await Application.insert({
|
||||
const application = await Client.insert({
|
||||
id: randomUUIDv7(),
|
||||
redirectUris: ["https://example.com/callback"],
|
||||
scopes: ["openid", "profile", "email"],
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ export default apiRoute((app) => {
|
|||
const flow = await db.query.OpenIdLoginFlows.findFirst({
|
||||
where: (flow): SQL | undefined => eq(flow.id, flowId),
|
||||
with: {
|
||||
application: true,
|
||||
client: true,
|
||||
},
|
||||
});
|
||||
|
||||
|
|
@ -129,11 +129,11 @@ export default apiRoute((app) => {
|
|||
// If linking account
|
||||
if (link && user_id) {
|
||||
// Check if userId is equal to application.clientId
|
||||
if (!flow.application?.id.startsWith(user_id)) {
|
||||
if (!flow.client?.id.startsWith(user_id)) {
|
||||
return redirectWithMessage(
|
||||
{
|
||||
oidc_account_linking_error: "Account linking error",
|
||||
oidc_account_linking_error_message: `User ID does not match application client ID (${user_id} != ${flow.application?.id})`,
|
||||
oidc_account_linking_error_message: `User ID does not match application client ID (${user_id} != ${flow.client?.id})`,
|
||||
},
|
||||
config.frontend.routes.home,
|
||||
);
|
||||
|
|
@ -262,14 +262,14 @@ export default apiRoute((app) => {
|
|||
});
|
||||
}
|
||||
|
||||
if (!flow.application) {
|
||||
if (!flow.client) {
|
||||
throw new ApiError(500, "Application not found");
|
||||
}
|
||||
|
||||
const code = randomString(32, "hex");
|
||||
|
||||
await db.insert(AuthorizationCodes).values({
|
||||
clientId: flow.application.id,
|
||||
clientId: flow.client.id,
|
||||
code,
|
||||
expiresAt: new Date(Date.now() + 60 * 1000).toISOString(), // 1 minute
|
||||
redirectUri: flow.clientRedirectUri ?? undefined,
|
||||
|
|
@ -281,7 +281,7 @@ export default apiRoute((app) => {
|
|||
{
|
||||
sub: user.id,
|
||||
iss: new URL(context.get("config").http.base_url).origin,
|
||||
aud: flow.application.id,
|
||||
aud: flow.client.id,
|
||||
exp: Math.floor(Date.now() / 1000) + 60 * 60,
|
||||
iat: Math.floor(Date.now() / 1000),
|
||||
nbf: Math.floor(Date.now() / 1000),
|
||||
|
|
@ -303,9 +303,9 @@ export default apiRoute((app) => {
|
|||
{
|
||||
redirect_uri: flow.clientRedirectUri ?? undefined,
|
||||
code,
|
||||
client_id: flow.application.id,
|
||||
application: flow.application.name,
|
||||
website: flow.application.website ?? "",
|
||||
client_id: flow.client.id,
|
||||
application: flow.client.name,
|
||||
website: flow.client.website ?? "",
|
||||
scope: flow.clientScopes?.join(" "),
|
||||
state: flow.clientState ?? undefined,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { config } from "@versia-server/config";
|
||||
import { ApiError } from "@versia-server/kit";
|
||||
import { apiRoute, handleZodError } from "@versia-server/kit/api";
|
||||
import { Application, db } from "@versia-server/kit/db";
|
||||
import { Client, db } from "@versia-server/kit/db";
|
||||
import { OpenIdLoginFlows } from "@versia-server/kit/tables";
|
||||
import { randomUUIDv7 } from "bun";
|
||||
import { describeRoute, validator } from "hono-openapi";
|
||||
|
|
@ -54,7 +54,7 @@ export default apiRoute((app) => {
|
|||
throw new ApiError(422, "Unknown or invalid issuer");
|
||||
}
|
||||
|
||||
const application = await Application.fromClientId(client_id);
|
||||
const application = await Client.fromClientId(client_id);
|
||||
|
||||
if (!application) {
|
||||
throw new ApiError(422, "Unknown or invalid client_id");
|
||||
|
|
@ -98,7 +98,7 @@ export default apiRoute((app) => {
|
|||
clientState: state,
|
||||
clientRedirectUri: redirect_uri,
|
||||
clientScopes: scopes,
|
||||
applicationId: application.id,
|
||||
clientId: application.id,
|
||||
issuerId,
|
||||
})
|
||||
.returning()
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { afterAll, describe, expect, test } from "bun:test";
|
||||
import { Application, db } from "@versia-server/kit/db";
|
||||
import { Client, db } from "@versia-server/kit/db";
|
||||
import { fakeRequest, getTestUsers } from "@versia-server/tests";
|
||||
import { randomUUIDv7 } from "bun";
|
||||
import { eq } from "drizzle-orm";
|
||||
|
|
@ -8,7 +8,7 @@ import { AuthorizationCodes } from "~/packages/kit/tables/schema";
|
|||
|
||||
const { deleteUsers, users } = await getTestUsers(1);
|
||||
|
||||
const application = await Application.insert({
|
||||
const application = await Client.insert({
|
||||
id: randomUUIDv7(),
|
||||
redirectUris: ["https://example.com/callback"],
|
||||
scopes: ["openid", "profile", "email"],
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { Token as TokenSchema } from "@versia/client/schemas";
|
||||
import { apiRoute, handleZodError, jsonOrForm } from "@versia-server/kit/api";
|
||||
import { Application, db, Token } from "@versia-server/kit/db";
|
||||
import { Client, db, Token } from "@versia-server/kit/db";
|
||||
import { AuthorizationCodes } from "@versia-server/kit/tables";
|
||||
import { randomUUIDv7 } from "bun";
|
||||
import { and, eq } from "drizzle-orm";
|
||||
|
|
@ -77,7 +77,7 @@ export default apiRoute((app) => {
|
|||
}
|
||||
|
||||
// Verify the client_secret
|
||||
const client = await Application.fromClientId(client_id);
|
||||
const client = await Client.fromClientId(client_id);
|
||||
|
||||
if (!client || client.data.secret !== client_secret) {
|
||||
return context.json(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue