This repository has been archived on 2022-08-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
outline/server/middlewares/passport.js
Tom Moor 5d6f68d399 feat: Move to passport for authentication (#1934)
- Added `accountProvisioner`
- Move authentication to use passport strategies
- Make authentication more pluggable
- Change language of services -> providers

closes #1120
2021-03-11 10:02:22 -08:00

34 lines
1.0 KiB
JavaScript

// @flow
import passport from "@outlinewiki/koa-passport";
import type { AccountProvisionerResult } from "../commands/accountProvisioner";
import type { ContextWithAuthMiddleware } from "../types";
export default function createMiddleware(providerName: string) {
return function passportMiddleware(ctx: ContextWithAuthMiddleware) {
return passport.authorize(
providerName,
{ session: false },
(err, _, result: AccountProvisionerResult) => {
if (err) {
if (err.id) {
console.error(err);
const notice = err.id.replace(/_/g, "-");
return ctx.redirect(`${err.redirectUrl || "/"}?notice=${notice}`);
}
if (process.env.NODE_ENV === "development") {
throw err;
}
return ctx.redirect(`/?notice=auth-error`);
}
if (result.user.isSuspended) {
return ctx.redirect("/?notice=suspended");
}
ctx.signIn(result.user, result.team, providerName, result.isNewUser);
}
)(ctx);
};
}