diff --git a/package.json b/package.json index 5cf338265..0c05d9dab 100644 --- a/package.json +++ b/package.json @@ -143,6 +143,7 @@ "passport": "^0.6.0", "passport-google-oauth2": "^0.2.0", "passport-oauth2": "^1.6.1", + "passport-req": "^0.1.1", "passport-slack-oauth2": "^1.1.1", "patch-package": "^6.5.1", "pg": "^8.8.0", diff --git a/plugins/req/plugin.json b/plugins/req/plugin.json new file mode 100644 index 000000000..2f50562e5 --- /dev/null +++ b/plugins/req/plugin.json @@ -0,0 +1,4 @@ +{ + "name": "Req", + "description": "Adds an req compatible authentication provider." +} diff --git a/plugins/req/server/.babelrc b/plugins/req/server/.babelrc new file mode 100644 index 000000000..c87001bc4 --- /dev/null +++ b/plugins/req/server/.babelrc @@ -0,0 +1,3 @@ +{ + "extends": "../../../server/.babelrc" +} diff --git a/plugins/req/server/auth/req.ts b/plugins/req/server/auth/req.ts new file mode 100644 index 000000000..bc03fc6d3 --- /dev/null +++ b/plugins/req/server/auth/req.ts @@ -0,0 +1,70 @@ +import passport from "@outlinewiki/koa-passport"; +import type { Context } from "koa"; +import Router from "koa-router"; +import { capitalize } from "lodash"; +import { Strategy as ReqStrategy } from "passport-req"; +import { slugifyDomain } from "@shared/utils/domains"; +import accountProvisioner from "@server/commands/accountProvisioner"; +import env from "@server/env"; +import passportMiddleware from "@server/middlewares/passport"; +import { User } from "@server/models"; +import { AuthenticationResult } from "@server/types"; +import { + StateStore, + getTeamFromContext, + getClientFromContext, +} from "@server/utils/passport"; + +const router = new Router(); +const providerName = "req"; + +export const config = { + name: "visiteur", + enabled: true, +}; + +if (true) { + passport.use( + new ReqStrategy( + async function (req,done) { + try { + const domain = "domain.tld"; + const subdomain = domain.split(".")[0]; + const teamName = capitalize(subdomain); + const name = "visiteur"; + const email = "visiteur@anthropologiebiblique.fr"; + const result = await accountProvisioner({ + ip: req.ip, + team: { + name: teamName, + domain, + subdomain, + }, + user: { + name: name, + email: email, + avatarUrl: null, + }, + authenticationProvider: { + name: providerName, + providerId: domain, + }, + authentication: { + providerId: "1234", + accessToken: null, + refreshToken: null, + scopes: [], + }, + }); + return done(null, result.user, result); + } catch (err) { + return done(err, null); + } + } + ) + ); + + router.get("req", passportMiddleware(providerName)); +} + +export default router; diff --git a/yarn.lock b/yarn.lock index 524d96791..a0c1cc51f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10179,6 +10179,14 @@ passport-oauth@1.0.x: passport-oauth1 "1.x.x" passport-oauth2 "1.x.x" +passport-req@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/passport-req/-/passport-req-0.1.1.tgz#451bff1500b3d464a768d42f0762328a21236a18" + integrity sha512-9qmM0vD5v7jYLWxezNNCleOw+8IkVAuvOwQ6NJaUuJkdFJTR1KatXH1i5MxWgffx+libLWYLRUPtc6GHOmn+6w== + dependencies: + passport "~0.1.1" + pkginfo "0.2.x" + passport-slack-oauth2@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/passport-slack-oauth2/-/passport-slack-oauth2-1.1.1.tgz#d831ffc3f1e968fcc3622e6ecf41643c8d8f9cbc" @@ -10201,6 +10209,14 @@ passport@^0.6.0: pause "0.0.1" utils-merge "^1.0.1" +passport@~0.1.1: + version "0.1.18" + resolved "https://registry.yarnpkg.com/passport/-/passport-0.1.18.tgz#c8264479dcb6414cadbb66752d12b37e0b6525a1" + integrity sha512-qteYojKG/qth7UBbbGU7aqhe5ndJs6YaUkH2B6+7FWQ0OeyYmWknzOATpMhdoSTDcLLliq9n4Fcy1mGs80iUMw== + dependencies: + pause "0.0.1" + pkginfo "0.2.x" + passthrough-counter@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/passthrough-counter/-/passthrough-counter-1.0.0.tgz#1967d9e66da572b5c023c787db112a387ab166fa" @@ -10410,6 +10426,11 @@ pkg-up@^3.1.0: dependencies: find-up "^3.0.0" +pkginfo@0.2.x: + version "0.2.3" + resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.2.3.tgz#7239c42a5ef6c30b8f328439d9b9ff71042490f8" + integrity sha512-7W7wTrE/NsY8xv/DTGjwNIyNah81EQH0MWcTzrHL6pOpMocOGZc0Mbdz9aXxSrp+U0mSmkU8jrNCDCfUs3sOBg== + pkginfo@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff"