137 lines
5.1 KiB
TypeScript
137 lines
5.1 KiB
TypeScript
import { Request, Response, NextFunction } from 'express'
|
|
import { StatusCodes } from 'http-status-codes'
|
|
import { AccountService } from '../services/account.service'
|
|
import { getRunningExpressApp } from '../../utils/getRunningExpressApp'
|
|
|
|
export class AccountController {
|
|
public async register(req: Request, res: Response, next: NextFunction) {
|
|
try {
|
|
const accountService = new AccountService()
|
|
const data = await accountService.register(req.body)
|
|
return res.status(StatusCodes.CREATED).json(data)
|
|
} catch (error) {
|
|
next(error)
|
|
}
|
|
}
|
|
|
|
public async invite(req: Request, res: Response, next: NextFunction) {
|
|
try {
|
|
const accountService = new AccountService()
|
|
const data = await accountService.invite(req.body, req.user)
|
|
return res.status(StatusCodes.CREATED).json(data)
|
|
} catch (error) {
|
|
next(error)
|
|
}
|
|
}
|
|
|
|
public async login(req: Request, res: Response, next: NextFunction) {
|
|
try {
|
|
const accountService = new AccountService()
|
|
const data = await accountService.login(req.body)
|
|
return res.status(StatusCodes.CREATED).json(data)
|
|
} catch (error) {
|
|
next(error)
|
|
}
|
|
}
|
|
|
|
public async verify(req: Request, res: Response, next: NextFunction) {
|
|
try {
|
|
const accountService = new AccountService()
|
|
const data = await accountService.verify(req.body)
|
|
return res.status(StatusCodes.CREATED).json(data)
|
|
} catch (error) {
|
|
next(error)
|
|
}
|
|
}
|
|
|
|
public async resendVerificationEmail(req: Request, res: Response, next: NextFunction) {
|
|
try {
|
|
const accountService = new AccountService()
|
|
const data = await accountService.resendVerificationEmail(req.body)
|
|
return res.status(StatusCodes.CREATED).json(data)
|
|
} catch (error) {
|
|
next(error)
|
|
}
|
|
}
|
|
|
|
public async forgotPassword(req: Request, res: Response, next: NextFunction) {
|
|
try {
|
|
const accountService = new AccountService()
|
|
const data = await accountService.forgotPassword(req.body)
|
|
return res.status(StatusCodes.CREATED).json(data)
|
|
} catch (error) {
|
|
next(error)
|
|
}
|
|
}
|
|
|
|
public async resetPassword(req: Request, res: Response, next: NextFunction) {
|
|
try {
|
|
const accountService = new AccountService()
|
|
const data = await accountService.resetPassword(req.body)
|
|
return res.status(StatusCodes.CREATED).json(data)
|
|
} catch (error) {
|
|
next(error)
|
|
}
|
|
}
|
|
|
|
public async createStripeCustomerPortalSession(req: Request, res: Response, next: NextFunction) {
|
|
try {
|
|
const { url: portalSessionUrl } = await getRunningExpressApp().identityManager.createStripeCustomerPortalSession(req)
|
|
return res.status(StatusCodes.OK).json({ url: portalSessionUrl })
|
|
} catch (error) {
|
|
next(error)
|
|
}
|
|
}
|
|
|
|
public async logout(req: Request, res: Response, next: NextFunction) {
|
|
try {
|
|
if (req.user) {
|
|
const accountService = new AccountService()
|
|
await accountService.logout(req.user)
|
|
if (req.isAuthenticated()) {
|
|
req.logout((err) => {
|
|
if (err) {
|
|
return res.status(500).json({ message: 'Logout failed' })
|
|
}
|
|
req.session.destroy((err) => {
|
|
if (err) {
|
|
return res.status(500).json({ message: 'Failed to destroy session' })
|
|
}
|
|
})
|
|
})
|
|
} else {
|
|
// For JWT-based users (owner, org_admin)
|
|
res.clearCookie('connect.sid') // Clear the session cookie
|
|
res.clearCookie('token') // Clear the JWT cookie
|
|
res.clearCookie('refreshToken') // Clear the JWT cookie
|
|
return res.redirect('/login') // Redirect to the login page
|
|
}
|
|
}
|
|
return res.status(200).json({ message: 'logged_out', redirectTo: `/login` })
|
|
} catch (error) {
|
|
next(error)
|
|
}
|
|
}
|
|
|
|
public async getBasicAuth(req: Request, res: Response) {
|
|
if (process.env.FLOWISE_USERNAME && process.env.FLOWISE_PASSWORD) {
|
|
return res.status(StatusCodes.OK).json({
|
|
isUsernamePasswordSet: true
|
|
})
|
|
} else {
|
|
return res.status(StatusCodes.OK).json({
|
|
isUsernamePasswordSet: false
|
|
})
|
|
}
|
|
}
|
|
|
|
public async checkBasicAuth(req: Request, res: Response) {
|
|
const { username, password } = req.body
|
|
if (username === process.env.FLOWISE_USERNAME && password === process.env.FLOWISE_PASSWORD) {
|
|
return res.json({ message: 'Authentication successful' })
|
|
} else {
|
|
return res.json({ message: 'Authentication failed' })
|
|
}
|
|
}
|
|
}
|