Auth API typing.
This commit is contained in:
parent
cb49beb317
commit
8c8a973c91
|
@ -3,14 +3,28 @@ export interface LoginRequest {
|
||||||
password: string
|
password: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface LogoutResponse {
|
||||||
|
message: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SetInitInfoRequest extends Record<string, any> {}
|
||||||
|
|
||||||
|
export interface GetInitInfoResponse extends Record<string, any> {}
|
||||||
|
|
||||||
export interface PasswordResetRequest {
|
export interface PasswordResetRequest {
|
||||||
email: string
|
email: string
|
||||||
}
|
}
|
||||||
|
export interface PasswordResetResponse {
|
||||||
|
message: string
|
||||||
|
}
|
||||||
|
|
||||||
export interface PasswordResetUpdateRequest {
|
export interface PasswordResetUpdateRequest {
|
||||||
resetCode: string
|
resetCode: string
|
||||||
password: string
|
password: string
|
||||||
}
|
}
|
||||||
|
export interface PasswordResetUpdateResponse {
|
||||||
|
message: string
|
||||||
|
}
|
||||||
|
|
||||||
export interface UpdateSelfRequest {
|
export interface UpdateSelfRequest {
|
||||||
firstName?: string
|
firstName?: string
|
||||||
|
|
|
@ -16,8 +16,15 @@ import {
|
||||||
PasswordResetUpdateRequest,
|
PasswordResetUpdateRequest,
|
||||||
GoogleInnerConfig,
|
GoogleInnerConfig,
|
||||||
DatasourceAuthCookie,
|
DatasourceAuthCookie,
|
||||||
|
LogoutResponse,
|
||||||
|
UserCtx,
|
||||||
|
SetInitInfoRequest,
|
||||||
|
GetInitInfoResponse,
|
||||||
|
PasswordResetResponse,
|
||||||
|
PasswordResetUpdateResponse,
|
||||||
} from "@budibase/types"
|
} from "@budibase/types"
|
||||||
import env from "../../../environment"
|
import env from "../../../environment"
|
||||||
|
import { Next } from "koa"
|
||||||
|
|
||||||
import * as authSdk from "../../../sdk/auth"
|
import * as authSdk from "../../../sdk/auth"
|
||||||
import * as userSdk from "../../../sdk/users"
|
import * as userSdk from "../../../sdk/users"
|
||||||
|
@ -52,7 +59,7 @@ async function passportCallback(
|
||||||
ctx.set(Header.TOKEN, token)
|
ctx.set(Header.TOKEN, token)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const login = async (ctx: Ctx<LoginRequest>, next: any) => {
|
export const login = async (ctx: Ctx<LoginRequest, void>, next: Next) => {
|
||||||
const email = ctx.request.body.username
|
const email = ctx.request.body.username
|
||||||
|
|
||||||
const user = await userSdk.db.getUserByEmail(email)
|
const user = await userSdk.db.getUserByEmail(email)
|
||||||
|
@ -72,7 +79,7 @@ export const login = async (ctx: Ctx<LoginRequest>, next: any) => {
|
||||||
)(ctx, next)
|
)(ctx, next)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const logout = async (ctx: any) => {
|
export const logout = async (ctx: UserCtx<void, LogoutResponse>) => {
|
||||||
if (ctx.user && ctx.user._id) {
|
if (ctx.user && ctx.user._id) {
|
||||||
await authSdk.logout({ ctx, userId: ctx.user._id })
|
await authSdk.logout({ ctx, userId: ctx.user._id })
|
||||||
}
|
}
|
||||||
|
@ -81,13 +88,13 @@ export const logout = async (ctx: any) => {
|
||||||
|
|
||||||
// INIT
|
// INIT
|
||||||
|
|
||||||
export const setInitInfo = (ctx: any) => {
|
export const setInitInfo = (ctx: UserCtx<SetInitInfoRequest, void>) => {
|
||||||
const initInfo = ctx.request.body
|
const initInfo = ctx.request.body
|
||||||
setCookie(ctx, initInfo, Cookie.Init)
|
setCookie(ctx, initInfo, Cookie.Init)
|
||||||
ctx.status = 200
|
ctx.status = 200
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getInitInfo = (ctx: any) => {
|
export const getInitInfo = (ctx: UserCtx<void, GetInitInfoResponse>) => {
|
||||||
try {
|
try {
|
||||||
ctx.body = getCookie(ctx, Cookie.Init) || {}
|
ctx.body = getCookie(ctx, Cookie.Init) || {}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
@ -101,7 +108,9 @@ export const getInitInfo = (ctx: any) => {
|
||||||
/**
|
/**
|
||||||
* Reset the user password, used as part of a forgotten password flow.
|
* Reset the user password, used as part of a forgotten password flow.
|
||||||
*/
|
*/
|
||||||
export const reset = async (ctx: Ctx<PasswordResetRequest>) => {
|
export const reset = async (
|
||||||
|
ctx: Ctx<PasswordResetRequest, PasswordResetResponse>
|
||||||
|
) => {
|
||||||
const { email } = ctx.request.body
|
const { email } = ctx.request.body
|
||||||
|
|
||||||
await authSdk.reset(email)
|
await authSdk.reset(email)
|
||||||
|
@ -114,7 +123,9 @@ export const reset = async (ctx: Ctx<PasswordResetRequest>) => {
|
||||||
/**
|
/**
|
||||||
* Perform the user password update if the provided reset code is valid.
|
* Perform the user password update if the provided reset code is valid.
|
||||||
*/
|
*/
|
||||||
export const resetUpdate = async (ctx: Ctx<PasswordResetUpdateRequest>) => {
|
export const resetUpdate = async (
|
||||||
|
ctx: Ctx<PasswordResetUpdateRequest, PasswordResetUpdateResponse>
|
||||||
|
) => {
|
||||||
const { resetCode, password } = ctx.request.body
|
const { resetCode, password } = ctx.request.body
|
||||||
try {
|
try {
|
||||||
await authSdk.resetUpdate(resetCode, password)
|
await authSdk.resetUpdate(resetCode, password)
|
||||||
|
@ -130,7 +141,10 @@ export const resetUpdate = async (ctx: Ctx<PasswordResetUpdateRequest>) => {
|
||||||
|
|
||||||
// DATASOURCE
|
// DATASOURCE
|
||||||
|
|
||||||
export const datasourcePreAuth = async (ctx: any, next: any) => {
|
export const datasourcePreAuth = async (
|
||||||
|
ctx: UserCtx<void, void>,
|
||||||
|
next: Next
|
||||||
|
) => {
|
||||||
const provider = ctx.params.provider
|
const provider = ctx.params.provider
|
||||||
const { middleware } = require(`@budibase/backend-core`)
|
const { middleware } = require(`@budibase/backend-core`)
|
||||||
const handler = middleware.datasource[provider]
|
const handler = middleware.datasource[provider]
|
||||||
|
@ -147,7 +161,7 @@ export const datasourcePreAuth = async (ctx: any, next: any) => {
|
||||||
return handler.preAuth(passport, ctx, next)
|
return handler.preAuth(passport, ctx, next)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const datasourceAuth = async (ctx: any, next: any) => {
|
export const datasourceAuth = async (ctx: UserCtx<void, void>, next: Next) => {
|
||||||
const authStateCookie = getCookie<DatasourceAuthCookie>(
|
const authStateCookie = getCookie<DatasourceAuthCookie>(
|
||||||
ctx,
|
ctx,
|
||||||
Cookie.DatasourceAuth
|
Cookie.DatasourceAuth
|
||||||
|
@ -171,7 +185,7 @@ export async function googleCallbackUrl(config?: GoogleInnerConfig) {
|
||||||
* The initial call that google authentication makes to take you to the google login screen.
|
* The initial call that google authentication makes to take you to the google login screen.
|
||||||
* On a successful login, you will be redirected to the googleAuth callback route.
|
* On a successful login, you will be redirected to the googleAuth callback route.
|
||||||
*/
|
*/
|
||||||
export const googlePreAuth = async (ctx: any, next: any) => {
|
export const googlePreAuth = async (ctx: Ctx<void, void>, next: Next) => {
|
||||||
const config = await configs.getGoogleConfig()
|
const config = await configs.getGoogleConfig()
|
||||||
if (!config) {
|
if (!config) {
|
||||||
return ctx.throw(400, "Google config not found")
|
return ctx.throw(400, "Google config not found")
|
||||||
|
@ -190,7 +204,7 @@ export const googlePreAuth = async (ctx: any, next: any) => {
|
||||||
})(ctx, next)
|
})(ctx, next)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const googleCallback = async (ctx: any, next: any) => {
|
export const googleCallback = async (ctx: Ctx<void, void>, next: Next) => {
|
||||||
const config = await configs.getGoogleConfig()
|
const config = await configs.getGoogleConfig()
|
||||||
if (!config) {
|
if (!config) {
|
||||||
return ctx.throw(400, "Google config not found")
|
return ctx.throw(400, "Google config not found")
|
||||||
|
@ -241,7 +255,7 @@ export const oidcStrategyFactory = async (ctx: any) => {
|
||||||
* The initial call that OIDC authentication makes to take you to the configured OIDC login screen.
|
* The initial call that OIDC authentication makes to take you to the configured OIDC login screen.
|
||||||
* On a successful login, you will be redirected to the oidcAuth callback route.
|
* On a successful login, you will be redirected to the oidcAuth callback route.
|
||||||
*/
|
*/
|
||||||
export const oidcPreAuth = async (ctx: Ctx, next: any) => {
|
export const oidcPreAuth = async (ctx: Ctx<void, void>, next: Next) => {
|
||||||
const { configId } = ctx.params
|
const { configId } = ctx.params
|
||||||
if (!configId) {
|
if (!configId) {
|
||||||
ctx.throw(400, "OIDC config id is required")
|
ctx.throw(400, "OIDC config id is required")
|
||||||
|
@ -266,7 +280,7 @@ export const oidcPreAuth = async (ctx: Ctx, next: any) => {
|
||||||
})(ctx, next)
|
})(ctx, next)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const oidcCallback = async (ctx: any, next: any) => {
|
export const oidcCallback = async (ctx: Ctx<void, void>, next: Next) => {
|
||||||
const strategy = await oidcStrategyFactory(ctx)
|
const strategy = await oidcStrategyFactory(ctx)
|
||||||
|
|
||||||
return passport.authenticate(
|
return passport.authenticate(
|
||||||
|
|
Loading…
Reference in New Issue