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";
|
||||
import mailer from "../mailer";
|
||||
import { Collection, Team, User } from "../models";
|
||||
import teamCreator from "./teamCreator";
|
||||
import teamCreator, { findExistingTeam } from "./teamCreator";
|
||||
import userCreator from "./userCreator";
|
||||
|
||||
type Props = {|
|
||||
|
@ -53,13 +53,15 @@ export default async function accountProvisioner({
|
|||
}: Props): Promise<AccountProvisionerResult> {
|
||||
let result;
|
||||
try {
|
||||
result = await teamCreator({
|
||||
name: teamParams.name,
|
||||
domain: teamParams.domain,
|
||||
subdomain: teamParams.subdomain,
|
||||
avatarUrl: teamParams.avatarUrl,
|
||||
authenticationProvider: authenticationProviderParams,
|
||||
});
|
||||
result =
|
||||
(await findExistingTeam(authenticationProviderParams)) ||
|
||||
(await teamCreator({
|
||||
name: teamParams.name,
|
||||
domain: teamParams.domain,
|
||||
subdomain: teamParams.subdomain,
|
||||
avatarUrl: teamParams.avatarUrl,
|
||||
authenticationProvider: authenticationProviderParams,
|
||||
}));
|
||||
} catch (err) {
|
||||
throw new AuthenticationError(err.message);
|
||||
}
|
||||
|
|
|
@ -12,6 +12,44 @@ type TeamCreatorResult = {|
|
|||
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({
|
||||
name,
|
||||
domain,
|
||||
|
|
Reference in New Issue