Added Authentik! Still working on Microsoft Entra ID
This commit is contained in:
@@ -8,6 +8,7 @@ import { useRouter } from 'next/navigation';
|
|||||||
import { ConvexError } from 'convex/values';
|
import { ConvexError } from 'convex/values';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import {
|
import {
|
||||||
|
Button,
|
||||||
Card,
|
Card,
|
||||||
CardContent,
|
CardContent,
|
||||||
Form,
|
Form,
|
||||||
@@ -17,6 +18,7 @@ import {
|
|||||||
FormLabel,
|
FormLabel,
|
||||||
FormMessage,
|
FormMessage,
|
||||||
Input,
|
Input,
|
||||||
|
Separator,
|
||||||
SubmitButton,
|
SubmitButton,
|
||||||
Tabs,
|
Tabs,
|
||||||
TabsContent,
|
TabsContent,
|
||||||
@@ -217,6 +219,36 @@ const SignIn = () => {
|
|||||||
</SubmitButton>
|
</SubmitButton>
|
||||||
</form>
|
</form>
|
||||||
</Form>
|
</Form>
|
||||||
|
<div className='flex my-auto justify-center w-2/3'>
|
||||||
|
<div className='flex flex-row w-1/3 items-center my-2.5'>
|
||||||
|
<Separator className='py-0.5 mr-3' />
|
||||||
|
<span className='font-semibold text-lg'>or</span>
|
||||||
|
<Separator className='py-0.5 ml-3' />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className='flex my-auto justify-center'>
|
||||||
|
<Button
|
||||||
|
onClick={() => signIn('authentik')}
|
||||||
|
className='text-lg font-semibold w-2/3 mx-auto'
|
||||||
|
>
|
||||||
|
Sign In with Gib's Auth
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
<div className='flex my-auto justify-center w-2/3'>
|
||||||
|
<div className='flex flex-row w-1/3 items-center my-2.5'>
|
||||||
|
<Separator className='py-0.5 mr-3' />
|
||||||
|
<span className='font-semibold text-lg'>or</span>
|
||||||
|
<Separator className='py-0.5 ml-3' />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className='flex my-auto justify-center'>
|
||||||
|
<Button
|
||||||
|
onClick={() => signIn('microsoft-entra-id')}
|
||||||
|
className='text-lg font-semibold w-2/3 mx-auto'
|
||||||
|
>
|
||||||
|
Sign In with Microsoft
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
</TabsContent>
|
</TabsContent>
|
||||||
|
18
packages/backend/convex/_generated/api.d.ts
vendored
18
packages/backend/convex/_generated/api.d.ts
vendored
@@ -12,13 +12,13 @@ import type {
|
|||||||
ApiFromModules,
|
ApiFromModules,
|
||||||
FilterApi,
|
FilterApi,
|
||||||
FunctionReference,
|
FunctionReference,
|
||||||
} from 'convex/server';
|
} from "convex/server";
|
||||||
import type * as CustomPassword from '../CustomPassword.js';
|
import type * as CustomPassword from "../CustomPassword.js";
|
||||||
import type * as auth from '../auth.js';
|
import type * as auth from "../auth.js";
|
||||||
import type * as crons from '../crons.js';
|
import type * as crons from "../crons.js";
|
||||||
import type * as files from '../files.js';
|
import type * as files from "../files.js";
|
||||||
import type * as http from '../http.js';
|
import type * as http from "../http.js";
|
||||||
import type * as statuses from '../statuses.js';
|
import type * as statuses from "../statuses.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A utility for referencing Convex functions in your app's API.
|
* A utility for referencing Convex functions in your app's API.
|
||||||
@@ -38,9 +38,9 @@ declare const fullApi: ApiFromModules<{
|
|||||||
}>;
|
}>;
|
||||||
export declare const api: FilterApi<
|
export declare const api: FilterApi<
|
||||||
typeof fullApi,
|
typeof fullApi,
|
||||||
FunctionReference<any, 'public'>
|
FunctionReference<any, "public">
|
||||||
>;
|
>;
|
||||||
export declare const internal: FilterApi<
|
export declare const internal: FilterApi<
|
||||||
typeof fullApi,
|
typeof fullApi,
|
||||||
FunctionReference<any, 'internal'>
|
FunctionReference<any, "internal">
|
||||||
>;
|
>;
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
* @module
|
* @module
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { anyApi } from 'convex/server';
|
import { anyApi } from "convex/server";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A utility for referencing Convex functions in your app's API.
|
* A utility for referencing Convex functions in your app's API.
|
||||||
|
@@ -13,9 +13,9 @@ import type {
|
|||||||
DocumentByName,
|
DocumentByName,
|
||||||
TableNamesInDataModel,
|
TableNamesInDataModel,
|
||||||
SystemTableNames,
|
SystemTableNames,
|
||||||
} from 'convex/server';
|
} from "convex/server";
|
||||||
import type { GenericId } from 'convex/values';
|
import type { GenericId } from "convex/values";
|
||||||
import schema from '../schema.js';
|
import schema from "../schema.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The names of all of your Convex tables.
|
* The names of all of your Convex tables.
|
||||||
|
16
packages/backend/convex/_generated/server.d.ts
vendored
16
packages/backend/convex/_generated/server.d.ts
vendored
@@ -18,8 +18,8 @@ import {
|
|||||||
GenericQueryCtx,
|
GenericQueryCtx,
|
||||||
GenericDatabaseReader,
|
GenericDatabaseReader,
|
||||||
GenericDatabaseWriter,
|
GenericDatabaseWriter,
|
||||||
} from 'convex/server';
|
} from "convex/server";
|
||||||
import type { DataModel } from './dataModel.js';
|
import type { DataModel } from "./dataModel.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define a query in this Convex app's public API.
|
* Define a query in this Convex app's public API.
|
||||||
@@ -29,7 +29,7 @@ import type { DataModel } from './dataModel.js';
|
|||||||
* @param func - The query function. It receives a {@link QueryCtx} as its first argument.
|
* @param func - The query function. It receives a {@link QueryCtx} as its first argument.
|
||||||
* @returns The wrapped query. Include this as an `export` to name it and make it accessible.
|
* @returns The wrapped query. Include this as an `export` to name it and make it accessible.
|
||||||
*/
|
*/
|
||||||
export declare const query: QueryBuilder<DataModel, 'public'>;
|
export declare const query: QueryBuilder<DataModel, "public">;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define a query that is only accessible from other Convex functions (but not from the client).
|
* Define a query that is only accessible from other Convex functions (but not from the client).
|
||||||
@@ -39,7 +39,7 @@ export declare const query: QueryBuilder<DataModel, 'public'>;
|
|||||||
* @param func - The query function. It receives a {@link QueryCtx} as its first argument.
|
* @param func - The query function. It receives a {@link QueryCtx} as its first argument.
|
||||||
* @returns The wrapped query. Include this as an `export` to name it and make it accessible.
|
* @returns The wrapped query. Include this as an `export` to name it and make it accessible.
|
||||||
*/
|
*/
|
||||||
export declare const internalQuery: QueryBuilder<DataModel, 'internal'>;
|
export declare const internalQuery: QueryBuilder<DataModel, "internal">;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define a mutation in this Convex app's public API.
|
* Define a mutation in this Convex app's public API.
|
||||||
@@ -49,7 +49,7 @@ export declare const internalQuery: QueryBuilder<DataModel, 'internal'>;
|
|||||||
* @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.
|
* @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.
|
||||||
* @returns The wrapped mutation. Include this as an `export` to name it and make it accessible.
|
* @returns The wrapped mutation. Include this as an `export` to name it and make it accessible.
|
||||||
*/
|
*/
|
||||||
export declare const mutation: MutationBuilder<DataModel, 'public'>;
|
export declare const mutation: MutationBuilder<DataModel, "public">;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define a mutation that is only accessible from other Convex functions (but not from the client).
|
* Define a mutation that is only accessible from other Convex functions (but not from the client).
|
||||||
@@ -59,7 +59,7 @@ export declare const mutation: MutationBuilder<DataModel, 'public'>;
|
|||||||
* @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.
|
* @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.
|
||||||
* @returns The wrapped mutation. Include this as an `export` to name it and make it accessible.
|
* @returns The wrapped mutation. Include this as an `export` to name it and make it accessible.
|
||||||
*/
|
*/
|
||||||
export declare const internalMutation: MutationBuilder<DataModel, 'internal'>;
|
export declare const internalMutation: MutationBuilder<DataModel, "internal">;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define an action in this Convex app's public API.
|
* Define an action in this Convex app's public API.
|
||||||
@@ -72,7 +72,7 @@ export declare const internalMutation: MutationBuilder<DataModel, 'internal'>;
|
|||||||
* @param func - The action. It receives an {@link ActionCtx} as its first argument.
|
* @param func - The action. It receives an {@link ActionCtx} as its first argument.
|
||||||
* @returns The wrapped action. Include this as an `export` to name it and make it accessible.
|
* @returns The wrapped action. Include this as an `export` to name it and make it accessible.
|
||||||
*/
|
*/
|
||||||
export declare const action: ActionBuilder<DataModel, 'public'>;
|
export declare const action: ActionBuilder<DataModel, "public">;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define an action that is only accessible from other Convex functions (but not from the client).
|
* Define an action that is only accessible from other Convex functions (but not from the client).
|
||||||
@@ -80,7 +80,7 @@ export declare const action: ActionBuilder<DataModel, 'public'>;
|
|||||||
* @param func - The function. It receives an {@link ActionCtx} as its first argument.
|
* @param func - The function. It receives an {@link ActionCtx} as its first argument.
|
||||||
* @returns The wrapped function. Include this as an `export` to name it and make it accessible.
|
* @returns The wrapped function. Include this as an `export` to name it and make it accessible.
|
||||||
*/
|
*/
|
||||||
export declare const internalAction: ActionBuilder<DataModel, 'internal'>;
|
export declare const internalAction: ActionBuilder<DataModel, "internal">;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define an HTTP action.
|
* Define an HTTP action.
|
||||||
|
@@ -16,7 +16,7 @@ import {
|
|||||||
internalActionGeneric,
|
internalActionGeneric,
|
||||||
internalMutationGeneric,
|
internalMutationGeneric,
|
||||||
internalQueryGeneric,
|
internalQueryGeneric,
|
||||||
} from 'convex/server';
|
} from "convex/server";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define a query in this Convex app's public API.
|
* Define a query in this Convex app's public API.
|
||||||
|
@@ -1,3 +1,6 @@
|
|||||||
|
import Authentik from "@auth/core/providers/authentik";
|
||||||
|
import MicrosoftEntraID from "@auth/core/providers/microsoft-entra-id"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
providers: [
|
providers: [
|
||||||
{
|
{
|
||||||
|
@@ -9,9 +9,28 @@ import { api } from './_generated/api';
|
|||||||
import { type Id } from './_generated/dataModel';
|
import { type Id } from './_generated/dataModel';
|
||||||
import { action, mutation, query } from './_generated/server';
|
import { action, mutation, query } from './_generated/server';
|
||||||
import Password from './CustomPassword';
|
import Password from './CustomPassword';
|
||||||
|
import Authentik from '@auth/core/providers/authentik';
|
||||||
|
import MicrosoftEntraID from '@auth/core/providers/microsoft-entra-id'
|
||||||
|
|
||||||
export const { auth, signIn, signOut, store, isAuthenticated } = convexAuth({
|
export const { auth, signIn, signOut, store, isAuthenticated } = convexAuth({
|
||||||
providers: [Password],
|
providers: [
|
||||||
|
Password,
|
||||||
|
Authentik,
|
||||||
|
MicrosoftEntraID({
|
||||||
|
clientId: process.env.AUTH_MICROSOFT_ENTRA_ID_ID!,
|
||||||
|
clientSecret: process.env.AUTH_MICROSOFT_ENTRA_ID_SECRET!,
|
||||||
|
// Either a tenant GUID, or "common" / "organizations" / "consumers"
|
||||||
|
issuer: process.env.AUTH_MICROSOFT_ENTRA_ID_ISSUER!,
|
||||||
|
// Optional, but providing an object prevents the undefined read:
|
||||||
|
profilePhotoSize: 48,
|
||||||
|
// Optional: request email + offline refresh
|
||||||
|
authorization: {
|
||||||
|
params: {
|
||||||
|
scope: 'openid profile email offline_access',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
]
|
||||||
});
|
});
|
||||||
|
|
||||||
export const PASSWORD_MIN = 8;
|
export const PASSWORD_MIN = 8;
|
||||||
|
Reference in New Issue
Block a user