chore: auth test suite lint & prettier
This commit is contained in:
@@ -8,28 +8,28 @@ import { apiKeysSlug, namedSaveToJWTValue, saveToJWTKey, slug } from './shared.j
|
|||||||
|
|
||||||
export default buildConfigWithDefaults({
|
export default buildConfigWithDefaults({
|
||||||
admin: {
|
admin: {
|
||||||
user: 'users',
|
|
||||||
autoLogin: {
|
autoLogin: {
|
||||||
email: devUser.email,
|
email: devUser.email,
|
||||||
password: devUser.password,
|
password: devUser.password,
|
||||||
prefillOnly: true,
|
prefillOnly: true,
|
||||||
},
|
},
|
||||||
|
user: 'users',
|
||||||
},
|
},
|
||||||
collections: [
|
collections: [
|
||||||
{
|
{
|
||||||
slug,
|
slug,
|
||||||
auth: {
|
auth: {
|
||||||
tokenExpiration: 7200, // 2 hours
|
|
||||||
verify: false,
|
|
||||||
maxLoginAttempts: 2,
|
|
||||||
lockTime: 600 * 1000, // lock time in ms
|
|
||||||
useAPIKey: true,
|
|
||||||
depth: 0,
|
|
||||||
cookies: {
|
cookies: {
|
||||||
secure: false,
|
|
||||||
sameSite: 'Lax',
|
|
||||||
domain: undefined,
|
domain: undefined,
|
||||||
|
sameSite: 'Lax',
|
||||||
|
secure: false,
|
||||||
},
|
},
|
||||||
|
depth: 0,
|
||||||
|
lockTime: 600 * 1000, // lock time in ms
|
||||||
|
maxLoginAttempts: 2,
|
||||||
|
tokenExpiration: 7200, // 2 hours
|
||||||
|
useAPIKey: true,
|
||||||
|
verify: false,
|
||||||
},
|
},
|
||||||
fields: [
|
fields: [
|
||||||
{
|
{
|
||||||
@@ -43,19 +43,19 @@ export default buildConfigWithDefaults({
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'roles',
|
name: 'roles',
|
||||||
label: 'Role',
|
|
||||||
type: 'select',
|
type: 'select',
|
||||||
options: ['admin', 'editor', 'moderator', 'user', 'viewer'],
|
|
||||||
defaultValue: ['user'],
|
defaultValue: ['user'],
|
||||||
|
hasMany: true,
|
||||||
|
label: 'Role',
|
||||||
|
options: ['admin', 'editor', 'moderator', 'user', 'viewer'],
|
||||||
required: true,
|
required: true,
|
||||||
saveToJWT: true,
|
saveToJWT: true,
|
||||||
hasMany: true,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'namedSaveToJWT',
|
name: 'namedSaveToJWT',
|
||||||
label: 'Named Save To JWT',
|
|
||||||
type: 'text',
|
type: 'text',
|
||||||
defaultValue: namedSaveToJWTValue,
|
defaultValue: namedSaveToJWTValue,
|
||||||
|
label: 'Named Save To JWT',
|
||||||
saveToJWT: saveToJWTKey,
|
saveToJWT: saveToJWTKey,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -64,55 +64,53 @@ export default buildConfigWithDefaults({
|
|||||||
fields: [
|
fields: [
|
||||||
{
|
{
|
||||||
name: 'liftedSaveToJWT',
|
name: 'liftedSaveToJWT',
|
||||||
label: 'Lifted Save To JWT',
|
|
||||||
type: 'text',
|
type: 'text',
|
||||||
saveToJWT: 'x-lifted-from-group',
|
|
||||||
defaultValue: 'lifted from group',
|
defaultValue: 'lifted from group',
|
||||||
|
label: 'Lifted Save To JWT',
|
||||||
|
saveToJWT: 'x-lifted-from-group',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'groupSaveToJWT',
|
name: 'groupSaveToJWT',
|
||||||
label: 'Group Save To JWT',
|
|
||||||
type: 'group',
|
type: 'group',
|
||||||
saveToJWT: 'x-group',
|
|
||||||
fields: [
|
fields: [
|
||||||
{
|
{
|
||||||
name: 'saveToJWTString',
|
name: 'saveToJWTString',
|
||||||
label: 'Save To JWT String',
|
|
||||||
type: 'text',
|
type: 'text',
|
||||||
saveToJWT: 'x-test',
|
|
||||||
defaultValue: 'nested property',
|
defaultValue: 'nested property',
|
||||||
|
label: 'Save To JWT String',
|
||||||
|
saveToJWT: 'x-test',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'saveToJWTFalse',
|
name: 'saveToJWTFalse',
|
||||||
label: 'Save To JWT False',
|
|
||||||
type: 'text',
|
type: 'text',
|
||||||
saveToJWT: false,
|
|
||||||
defaultValue: 'nested property',
|
defaultValue: 'nested property',
|
||||||
|
label: 'Save To JWT False',
|
||||||
|
saveToJWT: false,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
label: 'Group Save To JWT',
|
||||||
|
saveToJWT: 'x-group',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'tabs',
|
type: 'tabs',
|
||||||
tabs: [
|
tabs: [
|
||||||
{
|
{
|
||||||
name: 'saveToJWTTab',
|
name: 'saveToJWTTab',
|
||||||
label: 'Save To JWT Tab',
|
|
||||||
saveToJWT: true,
|
|
||||||
fields: [
|
fields: [
|
||||||
{
|
{
|
||||||
name: 'test',
|
name: 'test',
|
||||||
type: 'text',
|
type: 'text',
|
||||||
saveToJWT: 'x-field',
|
|
||||||
defaultValue: 'yes',
|
defaultValue: 'yes',
|
||||||
|
saveToJWT: 'x-field',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
label: 'Save To JWT Tab',
|
||||||
|
saveToJWT: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'tabSaveToJWTString',
|
name: 'tabSaveToJWTString',
|
||||||
label: 'Tab Save To JWT String',
|
|
||||||
saveToJWT: 'tab-test',
|
|
||||||
fields: [
|
fields: [
|
||||||
{
|
{
|
||||||
name: 'includedByDefault',
|
name: 'includedByDefault',
|
||||||
@@ -120,49 +118,51 @@ export default buildConfigWithDefaults({
|
|||||||
defaultValue: 'yes',
|
defaultValue: 'yes',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
label: 'Tab Save To JWT String',
|
||||||
|
saveToJWT: 'tab-test',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'No Name',
|
|
||||||
fields: [
|
fields: [
|
||||||
{
|
{
|
||||||
name: 'tabLiftedSaveToJWT',
|
name: 'tabLiftedSaveToJWT',
|
||||||
label: 'Tab Lifted Save To JWT',
|
|
||||||
type: 'text',
|
type: 'text',
|
||||||
saveToJWT: true,
|
|
||||||
defaultValue: 'lifted from unnamed tab',
|
defaultValue: 'lifted from unnamed tab',
|
||||||
|
label: 'Tab Lifted Save To JWT',
|
||||||
|
saveToJWT: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'unnamedTabSaveToJWTString',
|
name: 'unnamedTabSaveToJWTString',
|
||||||
label: 'Unnamed Tab Save To JWT String',
|
|
||||||
type: 'text',
|
type: 'text',
|
||||||
saveToJWT: 'x-tab-field',
|
|
||||||
defaultValue: 'text',
|
defaultValue: 'text',
|
||||||
|
label: 'Unnamed Tab Save To JWT String',
|
||||||
|
saveToJWT: 'x-tab-field',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'unnamedTabSaveToJWTFalse',
|
name: 'unnamedTabSaveToJWTFalse',
|
||||||
label: 'Unnamed Tab Save To JWT False',
|
|
||||||
type: 'text',
|
type: 'text',
|
||||||
saveToJWT: false,
|
|
||||||
defaultValue: 'false',
|
defaultValue: 'false',
|
||||||
|
label: 'Unnamed Tab Save To JWT False',
|
||||||
|
saveToJWT: false,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
label: 'No Name',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'custom',
|
name: 'custom',
|
||||||
label: 'Custom',
|
|
||||||
type: 'text',
|
type: 'text',
|
||||||
|
label: 'Custom',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'authDebug',
|
name: 'authDebug',
|
||||||
label: 'Auth Debug',
|
|
||||||
type: 'ui',
|
type: 'ui',
|
||||||
admin: {
|
admin: {
|
||||||
components: {
|
components: {
|
||||||
Field: AuthDebug,
|
Field: AuthDebug,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
label: 'Auth Debug',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -203,9 +203,9 @@ export default buildConfigWithDefaults({
|
|||||||
await payload.create({
|
await payload.create({
|
||||||
collection: 'users',
|
collection: 'users',
|
||||||
data: {
|
data: {
|
||||||
|
custom: 'Hello, world!',
|
||||||
email: devUser.email,
|
email: devUser.email,
|
||||||
password: devUser.password,
|
password: devUser.password,
|
||||||
custom: 'Hello, world!',
|
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -32,9 +32,9 @@ describe('AuthStrategies', () => {
|
|||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
await restClient.POST(`/${usersSlug}`, {
|
await restClient.POST(`/${usersSlug}`, {
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
|
name,
|
||||||
code,
|
code,
|
||||||
secret,
|
secret,
|
||||||
name,
|
|
||||||
}),
|
}),
|
||||||
headers,
|
headers,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -8,127 +8,125 @@
|
|||||||
|
|
||||||
export interface Config {
|
export interface Config {
|
||||||
collections: {
|
collections: {
|
||||||
users: User;
|
users: User
|
||||||
'api-keys': ApiKey;
|
'api-keys': ApiKey
|
||||||
'public-users': PublicUser;
|
'public-users': PublicUser
|
||||||
'payload-preferences': PayloadPreference;
|
'payload-preferences': PayloadPreference
|
||||||
'payload-migrations': PayloadMigration;
|
'payload-migrations': PayloadMigration
|
||||||
};
|
}
|
||||||
globals: {};
|
globals: {}
|
||||||
}
|
}
|
||||||
export interface User {
|
export interface User {
|
||||||
id: string;
|
id: string
|
||||||
roles: ('admin' | 'editor' | 'moderator' | 'user' | 'viewer')[];
|
roles: ('admin' | 'editor' | 'moderator' | 'user' | 'viewer')[]
|
||||||
namedSaveToJWT?: string;
|
namedSaveToJWT?: string
|
||||||
group?: {
|
group?: {
|
||||||
liftedSaveToJWT?: string;
|
liftedSaveToJWT?: string
|
||||||
};
|
}
|
||||||
groupSaveToJWT?: {
|
groupSaveToJWT?: {
|
||||||
saveToJWTString?: string;
|
saveToJWTString?: string
|
||||||
saveToJWTFalse?: string;
|
saveToJWTFalse?: string
|
||||||
};
|
}
|
||||||
saveToJWTTab: {
|
saveToJWTTab: {
|
||||||
test?: string;
|
test?: string
|
||||||
};
|
}
|
||||||
tabSaveToJWTString: {
|
tabSaveToJWTString: {
|
||||||
includedByDefault?: string;
|
includedByDefault?: string
|
||||||
};
|
}
|
||||||
tabLiftedSaveToJWT?: string;
|
tabLiftedSaveToJWT?: string
|
||||||
unnamedTabSaveToJWTString?: string;
|
unnamedTabSaveToJWTString?: string
|
||||||
unnamedTabSaveToJWTFalse?: string;
|
unnamedTabSaveToJWTFalse?: string
|
||||||
custom?: string;
|
custom?: string
|
||||||
updatedAt: string;
|
updatedAt: string
|
||||||
createdAt: string;
|
createdAt: string
|
||||||
enableAPIKey?: boolean;
|
enableAPIKey?: boolean
|
||||||
apiKey?: string;
|
apiKey?: string
|
||||||
apiKeyIndex?: string;
|
apiKeyIndex?: string
|
||||||
email: string;
|
email: string
|
||||||
resetPasswordToken?: string;
|
resetPasswordToken?: string
|
||||||
resetPasswordExpiration?: string;
|
resetPasswordExpiration?: string
|
||||||
salt?: string;
|
salt?: string
|
||||||
hash?: string;
|
hash?: string
|
||||||
loginAttempts?: number;
|
loginAttempts?: number
|
||||||
lockUntil?: string;
|
lockUntil?: string
|
||||||
password?: string;
|
password?: string
|
||||||
}
|
}
|
||||||
export interface ApiKey {
|
export interface ApiKey {
|
||||||
id: string;
|
id: string
|
||||||
updatedAt: string;
|
updatedAt: string
|
||||||
createdAt: string;
|
createdAt: string
|
||||||
enableAPIKey?: boolean;
|
enableAPIKey?: boolean
|
||||||
apiKey?: string;
|
apiKey?: string
|
||||||
apiKeyIndex?: string;
|
apiKeyIndex?: string
|
||||||
}
|
}
|
||||||
export interface PublicUser {
|
export interface PublicUser {
|
||||||
id: string;
|
id: string
|
||||||
updatedAt: string;
|
updatedAt: string
|
||||||
createdAt: string;
|
createdAt: string
|
||||||
email: string;
|
email: string
|
||||||
resetPasswordToken?: string;
|
resetPasswordToken?: string
|
||||||
resetPasswordExpiration?: string;
|
resetPasswordExpiration?: string
|
||||||
salt?: string;
|
salt?: string
|
||||||
hash?: string;
|
hash?: string
|
||||||
_verified?: boolean;
|
_verified?: boolean
|
||||||
_verificationToken?: string;
|
_verificationToken?: string
|
||||||
loginAttempts?: number;
|
loginAttempts?: number
|
||||||
lockUntil?: string;
|
lockUntil?: string
|
||||||
password?: string;
|
password?: string
|
||||||
}
|
}
|
||||||
export interface PayloadPreference {
|
export interface PayloadPreference {
|
||||||
id: string;
|
id: string
|
||||||
user:
|
user:
|
||||||
| {
|
| {
|
||||||
relationTo: 'users';
|
relationTo: 'users'
|
||||||
value: string | User;
|
value: string | User
|
||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
relationTo: 'api-keys';
|
relationTo: 'api-keys'
|
||||||
value: string | ApiKey;
|
value: string | ApiKey
|
||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
relationTo: 'public-users';
|
relationTo: 'public-users'
|
||||||
value: string | PublicUser;
|
value: string | PublicUser
|
||||||
};
|
}
|
||||||
key?: string;
|
key?: string
|
||||||
value?:
|
value?:
|
||||||
| {
|
| {
|
||||||
[k: string]: unknown;
|
[k: string]: unknown
|
||||||
}
|
}
|
||||||
| unknown[]
|
| unknown[]
|
||||||
| string
|
| string
|
||||||
| number
|
| number
|
||||||
| boolean
|
| boolean
|
||||||
| null;
|
| null
|
||||||
updatedAt: string;
|
updatedAt: string
|
||||||
createdAt: string;
|
createdAt: string
|
||||||
}
|
}
|
||||||
export interface PayloadMigration {
|
export interface PayloadMigration {
|
||||||
id: string;
|
id: string
|
||||||
name?: string;
|
name?: string
|
||||||
batch?: number;
|
batch?: number
|
||||||
schema?:
|
schema?:
|
||||||
| {
|
| {
|
||||||
[k: string]: unknown;
|
[k: string]: unknown
|
||||||
}
|
}
|
||||||
| unknown[]
|
| unknown[]
|
||||||
| string
|
| string
|
||||||
| number
|
| number
|
||||||
| boolean
|
| boolean
|
||||||
| null;
|
| null
|
||||||
updatedAt: string;
|
updatedAt: string
|
||||||
createdAt: string;
|
createdAt: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
declare module 'payload' {
|
declare module 'payload' {
|
||||||
export interface GeneratedTypes {
|
export interface GeneratedTypes {
|
||||||
collections: {
|
collections: {
|
||||||
'users': User
|
users: User
|
||||||
'api-keys': ApiKey
|
'api-keys': ApiKey
|
||||||
'public-users': PublicUser
|
'public-users': PublicUser
|
||||||
'payload-preferences': PayloadPreference
|
'payload-preferences': PayloadPreference
|
||||||
'payload-migrations': PayloadMigration
|
'payload-migrations': PayloadMigration
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import { buildConfigWithDefaults } from '../../buildConfigWithDefaults.js'
|
|||||||
export const collectionSlug = 'users'
|
export const collectionSlug = 'users'
|
||||||
|
|
||||||
export default buildConfigWithDefaults({
|
export default buildConfigWithDefaults({
|
||||||
debug: true,
|
|
||||||
admin: {
|
admin: {
|
||||||
user: 'users',
|
user: 'users',
|
||||||
},
|
},
|
||||||
@@ -16,15 +15,16 @@ export default buildConfigWithDefaults({
|
|||||||
fields: [
|
fields: [
|
||||||
{
|
{
|
||||||
name: 'roles',
|
name: 'roles',
|
||||||
label: 'Role',
|
|
||||||
type: 'select',
|
type: 'select',
|
||||||
options: ['admin', 'editor', 'moderator', 'user', 'viewer'],
|
|
||||||
defaultValue: 'user',
|
defaultValue: 'user',
|
||||||
|
hasMany: true,
|
||||||
|
label: 'Role',
|
||||||
|
options: ['admin', 'editor', 'moderator', 'user', 'viewer'],
|
||||||
required: true,
|
required: true,
|
||||||
saveToJWT: true,
|
saveToJWT: true,
|
||||||
hasMany: true,
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
debug: true,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ describe('Remove token from auth responses', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const response = await restClient.POST(`/${collectionSlug}/reset-password`, {
|
const response = await restClient.POST(`/${collectionSlug}/reset-password`, {
|
||||||
body: JSON.stringify({ token, password: devUser.password }),
|
body: JSON.stringify({ password: devUser.password, token }),
|
||||||
})
|
})
|
||||||
const result = await response.json()
|
const result = await response.json()
|
||||||
|
|
||||||
|
|||||||
@@ -3,11 +3,11 @@
|
|||||||
//"extends": "./tsconfig.json",
|
//"extends": "./tsconfig.json",
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
// ensure that nobody can accidentally use this config for a build
|
// ensure that nobody can accidentally use this config for a build
|
||||||
"noEmit": true,
|
"noEmit": true
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
// whatever paths you intend to lint
|
// whatever paths you intend to lint
|
||||||
"./**/*.ts",
|
"./**/*.ts",
|
||||||
"./**/*.tsx"
|
"./**/*.tsx"
|
||||||
],
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user