👔 add create account in provision
Add logic to create a new account when provisioning if not yet registered.
This commit is contained in:
@ -6,7 +6,7 @@ const { Elysia } = await import("elysia");
|
||||
const { routes } = await import("./routes");
|
||||
|
||||
const app = new Elysia()
|
||||
.use(appAccessTokenMiddleware())
|
||||
// .use(appAccessTokenMiddleware())
|
||||
.use(routes)
|
||||
.listen(process.env.APP_PORT || 3000);
|
||||
|
||||
|
||||
@ -46,13 +46,18 @@ export const googleCallbackService = async (
|
||||
|
||||
return await OAuthUserProvisionService(
|
||||
{
|
||||
providerName: "google",
|
||||
openId: userData.sub,
|
||||
provider: "google",
|
||||
providerId: userData.sub,
|
||||
providerToken: accessToken,
|
||||
providerPayload: userData,
|
||||
email: userData.email,
|
||||
username: `goo_${userData.sub}`,
|
||||
name: userData.name,
|
||||
avatar: userData.picture,
|
||||
password: Math.random()
|
||||
.toString(36)
|
||||
.slice(2, 16),
|
||||
},
|
||||
userData,
|
||||
userHeaderInfo
|
||||
);
|
||||
} catch (error) {
|
||||
|
||||
@ -3,22 +3,15 @@ import { UserHeaderInformation } from "../../../../helpers/http/userHeader/getUs
|
||||
import { findUserService } from "../../../user/services/internal/findUser.service";
|
||||
import { createUserSessionService } from "../../../userSession/services/createUserSession.service";
|
||||
import { ErrorForwarder } from "../../../../helpers/error/instances/forwarder";
|
||||
import { createUserViaOauth } from "../../../user/user.types";
|
||||
import { createUserService } from "../../../user/services/internal/createUser.service";
|
||||
|
||||
export const OAuthUserProvisionService = async (
|
||||
payload: {
|
||||
providerName: string;
|
||||
openId: string;
|
||||
email: string;
|
||||
username?: string;
|
||||
name: string;
|
||||
avatar?: string;
|
||||
bio?: string;
|
||||
},
|
||||
providerRawCallback: unknown,
|
||||
payload: createUserViaOauth,
|
||||
userHeaderInfo: UserHeaderInformation
|
||||
) => {
|
||||
try {
|
||||
const providerId = `${payload.providerName}_${payload.openId}`;
|
||||
const providerId = payload.providerId;
|
||||
const findUserResult = (await findUserService({
|
||||
identifier: providerId,
|
||||
queryTarget: "providerId",
|
||||
@ -28,12 +21,8 @@ export const OAuthUserProvisionService = async (
|
||||
if (findUserResult) {
|
||||
return await createUserSessionService(findUserResult.id, userHeaderInfo);
|
||||
} else {
|
||||
/**
|
||||
* === TODO ===
|
||||
* If the user is not found,
|
||||
* create a new one with the data obtained from the OAuth provider,
|
||||
* then create a user session and authenticate it immediately.
|
||||
*/
|
||||
const createdUser = await createUserService(payload);
|
||||
return await createUserSessionService(createdUser.id, userHeaderInfo);
|
||||
}
|
||||
} catch (error) {
|
||||
ErrorForwarder(error);
|
||||
|
||||
22
src/modules/user/services/internal/createUser.service.ts
Normal file
22
src/modules/user/services/internal/createUser.service.ts
Normal file
@ -0,0 +1,22 @@
|
||||
import { ErrorForwarder } from "../../../../helpers/error/instances/forwarder";
|
||||
import { hashPassword } from "../../../../helpers/security/password/hash";
|
||||
import { createUserViaRegisterRepository } from "../../repositories/create/createUserViaRegister.repository";
|
||||
import {
|
||||
createUserViaOauth,
|
||||
createUserViaRegisterInput,
|
||||
} from "../../user.types";
|
||||
|
||||
export const createUserService = async (
|
||||
payload: createUserViaRegisterInput | createUserViaOauth
|
||||
) => {
|
||||
try {
|
||||
const hashedPassword = await hashPassword(payload.password);
|
||||
|
||||
return await createUserViaRegisterRepository({
|
||||
...payload,
|
||||
password: hashedPassword,
|
||||
});
|
||||
} catch (error) {
|
||||
ErrorForwarder(error);
|
||||
}
|
||||
};
|
||||
@ -15,3 +15,15 @@ export interface createUserViaRegisterInput {
|
||||
email: string;
|
||||
password: string;
|
||||
}
|
||||
export interface createUserViaOauth {
|
||||
provider: string;
|
||||
providerId: string;
|
||||
providerToken?: string;
|
||||
providerPayload?: unknown;
|
||||
email: string;
|
||||
username: string;
|
||||
name: string;
|
||||
avatar?: string;
|
||||
bio?: string;
|
||||
password: string;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user