diff --git a/account/src/lib/sample-users.ts b/account/src/lib/sample-users.ts new file mode 100644 index 0000000..b4cb621 --- /dev/null +++ b/account/src/lib/sample-users.ts @@ -0,0 +1,87 @@ +import * as AT from "../../../website/src/types/account-types"; + +const basic: AT.LingdocsUser = { + "_id":"5e8dd381-950f-4641-922d-c63c6bf0f8e9", + "_rev":"1713-1a299e0d66da62fe4c8d059f0f068cb7", + "userId":"5e8dd381-950f-4641-922d-c63c6bf0f8e9" as AT.UUID, + "email":"bob@example.com", + "emailVerified":true, + "name":"Bob Smith", + "password":"12345" as AT.Hash, + "level":"basic", + "tests":[], + "lastLogin":1629893763810 as AT.TimeStamp, + "lastActive":1630414108552 as AT.TimeStamp, + "userTextOptionsRecord":{ + "lastModified":1629983812750 as AT.TimeStamp, + "userTextOptions":{"spelling":"Afghan","diacritics":false,"dialect":"standard","phonetics":"lingdocs"} + }, +}; + +const student: AT.LingdocsUser = { + "_id":"5e8dd381-950f-4641-922d-c63c6bf0f8e8", + "_rev":"1713-1a299e0d66da62fe4c8d059f0f068cb6", + "userId":"5e8dd381-950f-4641-922d-c63c6bf0f8e9" as AT.UUID, + "email":"jim@example.com", + "emailVerified":true, + "name":"Jim Weston", + "password":"12345" as AT.Hash, + "level":"student", + "tests":[], + "lastLogin":1629893763810 as AT.TimeStamp, + "lastActive":1630414108552 as AT.TimeStamp, + "couchDbPassword": "12345" as AT.UserDbPassword, + "wordlistDbName": "jim-db" as AT.WordlistDbName, + "userTextOptionsRecord":{ + "lastModified":1629983812750 as AT.TimeStamp, + "userTextOptions":{"spelling":"Afghan","diacritics":false,"dialect":"standard","phonetics":"lingdocs"} + }, +}; + +const admin: AT.LingdocsUser = { + "_id":"5e8dd381-950f-4641-922d-c63c6bf0f8e8", + "_rev":"1713-1a299e0d66da62fe4c8d059f0f068cb6", + "userId":"5e8dd381-950f-4641-922d-c63c6bf0f8e9" as AT.UUID, + "email":"jim@example.com", + "emailVerified":true, + "name":"Frank Weston", + "password":"12345" as AT.Hash, + "level":"editor", + "admin":true, + "tests":[], + "lastLogin":1629893763810 as AT.TimeStamp, + "lastActive":1630414108552 as AT.TimeStamp, + "couchDbPassword": "12345" as AT.UserDbPassword, + "wordlistDbName": "jim-db" as AT.WordlistDbName, + "userTextOptionsRecord":{ + "lastModified":1629983812750 as AT.TimeStamp, + "userTextOptions":{"spelling":"Afghan","diacritics":false,"dialect":"standard","phonetics":"lingdocs"} + }, +}; + +const editor: AT.LingdocsUser = { + "_id":"5e8dd381-950f-4641-922d-c63c6bf0f8e8", + "_rev":"1713-1a299e0d66da62fe4c8d059f0f068cb6", + "userId":"5e8dd381-950f-4641-922d-c63c6bf0f8e9" as AT.UUID, + "email":"jim@example.com", + "emailVerified":true, + "name":"Frank Weston", + "password":"12345" as AT.Hash, + "level":"editor", + "tests":[], + "lastLogin":1629893763810 as AT.TimeStamp, + "lastActive":1630414108552 as AT.TimeStamp, + "couchDbPassword": "12345" as AT.UserDbPassword, + "wordlistDbName": "jim-db" as AT.WordlistDbName, + "userTextOptionsRecord":{ + "lastModified":1629983812750 as AT.TimeStamp, + "userTextOptions":{"spelling":"Afghan","diacritics":false,"dialect":"standard","phonetics":"lingdocs"} + }, +}; + +export default { + basic, + student, + editor, + admin, +}; diff --git a/account/src/lib/with-user.ts b/account/src/lib/with-user.ts index 60ddb05..e042630 100644 --- a/account/src/lib/with-user.ts +++ b/account/src/lib/with-user.ts @@ -5,7 +5,7 @@ import type { GetServerSidePropsContext, GetServerSidePropsResult, } from "next"; - +import sampleUsers from "./sample-users"; declare module "http" { interface IncomingMessage { @@ -38,14 +38,18 @@ async function fetchUser(cookies: any): Promise { * * @returns */ -export async function lingdocsUserExpressMiddleware(req: Request, res: Response, next: NextFunction) { - const user = await fetchUser(req.headers.cookie); - Object.defineProperty( - req, - "user", - { value: user, writable: false, enumerable: true }, - ); - next(); +export function lingdocsUserExpressMiddleware(devSampleUser?: "basic" | "student" | "admin" | "editor" | "none"): (req: Request, res: Response, next: NextFunction) => Promise { + return async function expressMiddleware(req, res, next) { + const user = devSampleUser + ? (devSampleUser === "none" ? undefined : sampleUsers[devSampleUser]) + : await fetchUser(req.headers.cookie); + Object.defineProperty( + req, + "user", + { value: user, writable: false, enumerable: true }, + ); + next(); + } } /** @@ -62,9 +66,11 @@ export async function lingdocsUserExpressMiddleware(req: Request, res: Response, * @param handler * @returns */ -export function withLingdocsUserApiRoute(handler: NextApiHandler): NextApiHandler { +export function withLingdocsUserApiRoute(handler: NextApiHandler, devSampleUser?: "basic" | "student" | "admin" | "editor" | "none"): NextApiHandler { return async function nextApiHandlerWrappedWithLingdocsUser(req, res) { - const user = await fetchUser(req.cookies); + const user = devSampleUser + ? (devSampleUser === "none" ? undefined : sampleUsers[devSampleUser]) + : await fetchUser(req.headers.cookies); Object.defineProperty( req, "user", @@ -91,11 +97,15 @@ export function withLingdocsUserSsr< >( handler: ( context: GetServerSidePropsContext, - ) => GetServerSidePropsResult

| Promise>) { + ) => GetServerSidePropsResult

| Promise>, + devSampleUser?: "basic" | "student" | "admin" | "editor" | "none", +) { return async function nextGetServerSidePropsHandlerWrappedWithLingdocsUser( context: GetServerSidePropsContext, ) { - const user = await fetchUser(context.req.cookies); + const user = devSampleUser + ? (devSampleUser === "none" ? undefined : sampleUsers[devSampleUser]) + : await fetchUser(context.req.cookies); Object.defineProperty( context.req, "user", diff --git a/package.json b/package.json index 9c70411..a23cbc7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lingdocs/lingdocs-main", - "version": "0.2.2", + "version": "0.2.3", "description": "types and functions for lingdocs stuff", "main": "dist/library.js", "module": "dist/library.js",