merge changes from oidc fix branch
continuous-integration/drone Build is passing
Details
continuous-integration/drone Build is passing
Details
This commit is contained in:
parent
170213a305
commit
3e68d80a9e
|
@ -8,7 +8,7 @@ import {
|
||||||
} from "../errors";
|
} from "../errors";
|
||||||
import mailer from "../mailer";
|
import mailer from "../mailer";
|
||||||
import { Collection, Team, User } from "../models";
|
import { Collection, Team, User } from "../models";
|
||||||
import teamCreator from "./teamCreator";
|
import teamCreator, { findExistingTeam } from "./teamCreator";
|
||||||
import userCreator from "./userCreator";
|
import userCreator from "./userCreator";
|
||||||
|
|
||||||
type Props = {|
|
type Props = {|
|
||||||
|
@ -53,13 +53,15 @@ export default async function accountProvisioner({
|
||||||
}: Props): Promise<AccountProvisionerResult> {
|
}: Props): Promise<AccountProvisionerResult> {
|
||||||
let result;
|
let result;
|
||||||
try {
|
try {
|
||||||
result = await teamCreator({
|
result =
|
||||||
name: teamParams.name,
|
(await findExistingTeam(authenticationProviderParams)) ||
|
||||||
domain: teamParams.domain,
|
(await teamCreator({
|
||||||
subdomain: teamParams.subdomain,
|
name: teamParams.name,
|
||||||
avatarUrl: teamParams.avatarUrl,
|
domain: teamParams.domain,
|
||||||
authenticationProvider: authenticationProviderParams,
|
subdomain: teamParams.subdomain,
|
||||||
});
|
avatarUrl: teamParams.avatarUrl,
|
||||||
|
authenticationProvider: authenticationProviderParams,
|
||||||
|
}));
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
throw new AuthenticationError(err.message);
|
throw new AuthenticationError(err.message);
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,44 @@ type TeamCreatorResult = {|
|
||||||
isNewTeam: boolean,
|
isNewTeam: boolean,
|
||||||
|};
|
|};
|
||||||
|
|
||||||
|
export async function findExistingTeam(authenticationProvider: {|
|
||||||
|
name: string,
|
||||||
|
providerId: string,
|
||||||
|
|}): Promise<TeamCreatorResult | null> {
|
||||||
|
// Should outline deployed in a multi-tenant environment, skip searching
|
||||||
|
// for an existing team.
|
||||||
|
if (process.env.DEPLOYMENT === "hosted") return null;
|
||||||
|
|
||||||
|
// get the first team that exists, ordered by createdAt
|
||||||
|
const team = await Team.findOne({ limit: 1, order: ["createdAt"] });
|
||||||
|
if (team === null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// query if a corresponding authenticationProvider already exists
|
||||||
|
let authenticationProviders = await team.getAuthenticationProviders({
|
||||||
|
where: {
|
||||||
|
name: authenticationProvider.name,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// ... if this is not the case, create a new authentication provider
|
||||||
|
// that we use instead, overwriting the providerId with the domain of the team
|
||||||
|
let authP =
|
||||||
|
authenticationProviders.length === 0
|
||||||
|
? await team.createAuthenticationProvider({
|
||||||
|
...authenticationProvider,
|
||||||
|
providerId: team.domain,
|
||||||
|
})
|
||||||
|
: authenticationProviders[0];
|
||||||
|
|
||||||
|
return {
|
||||||
|
authenticationProvider: authP,
|
||||||
|
team: team,
|
||||||
|
isNewTeam: false,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export default async function teamCreator({
|
export default async function teamCreator({
|
||||||
name,
|
name,
|
||||||
domain,
|
domain,
|
||||||
|
|
Reference in New Issue