Files
directus/api/src/auth/auth.ts
Aiden Foxx 084c6117b7 Modular authentication (#6942)
* Moved refactoring from LDAP branch

* Moved Auth into packages

* Updated frontend to support custom auth providers and make implementation more flexible

* Fixed exception handling and numerous bugs. Also added provider support to graphql

* Updated frontend to be able to set provider and identifier

* Fixed issue with setting the auth provider in app

* Updated package-lock.json

* Updated package-lock.json

* Cleanup, adding type handling and disabled changing provider

* Added title formatting to SSO links

* Fixed incorrect type export

* Fixed incorrect rc

* Update api/src/services/authentication.ts

* Updated sub-dependencies to rc87

* Fixed linting errors

* Prefer sending provider name as config var

* Pass clone of user info to auth provider instead of reference

* Moved auth from packages into core

* Removed generic login handler

* Fixed graphql complaint

* Moved exception back to api and cleaned up URLs

* Minor tweak

* Pulled across improvements from openid branch

* Fixed fix that wasn't a fix

* Update auth.ts

* Update auth.ts

* Update authentication.ts

* Update login-form.vue

* Regression fixes and cleanup

* Minor flow improvements

* Flipped if and fixed linting warning

* Un-expanded object that didn't need to be expanded!

* Trimmed auth interface for consistency when verifying passwords

* Removed auth-manager, changed login endpoint, broke out SSO links, removed username support, disabled updating external_identifier, generate provider options as part of field generation

* Cleaned up some code comments

* Use named exports in local driver

* Use async defaults for auth abstract class

* Use JSON for auth_data field

* Move session data blob to directus_sessions

* Remove unused export, rename auth->authDriver

* Opinionated changes

* Move login route registration to driver file

* Revert app changes in favor of PR #8277

* Send session token to auth provider and opinionated changes

* Added missing translation

* Fixed empty elements for users without email

* Update api/src/auth/drivers/local.ts

* Move pw verify to local driver, remove CRUD

* Opinions > logical reasoning

* Use session data, cleanup login method on auth serv

* Remove useless null

* Fixed breaking changes from refactor, and fixed build

* Fixed lint warning

* Ignore typescript nonsense

* Update api/src/services/authentication.ts

* Fix provider name passthrough

Co-authored-by: Aiden Foxx <aiden.foxx@sbab.se>
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
2021-09-27 17:18:20 -04:00

65 lines
1.6 KiB
TypeScript

/* eslint-disable @typescript-eslint/no-empty-function */
import { Knex } from 'knex';
import { User, SessionData } from '../types';
export abstract class AuthDriver {
knex: Knex;
constructor(knex: Knex, _config: Record<string, any>) {
this.knex = knex;
}
/**
* Get user id for a given provider payload
*
* @param payload Any data that the user might've provided
* @throws InvalidCredentialsException
* @return User id of the identifier
*/
abstract getUserID(payload: Record<string, any>): Promise<string>;
/**
* Verify user password
*
* @param user User information
* @param password User password
* @throws InvalidCredentialsException
*/
abstract verify(user: User, password?: string): Promise<void>;
/**
* Check with the (external) provider if the user is allowed entry to Directus
*
* @param _user User information
* @param _payload Any data that the user might've provided
* @throws InvalidCredentialsException
* @returns Data to be stored with the session
*/
async login(_user: User, _payload: Record<string, any>): Promise<SessionData> {
/* Optional, though should probably be set */
return null;
}
/**
* Handle user session refresh
*
* @param _user User information
* @param _sessionData Session data
* @throws InvalidCredentialsException
*/
async refresh(_user: User, _sessionData: SessionData): Promise<void> {
/* Optional */
}
/**
* Handle user session termination
*
* @param _user User information
* @param _sessionData Session data
*/
async logout(_user: User, _sessionData: SessionData): Promise<void> {
/* Optional */
}
}