👔 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 { routes } = await import("./routes");
|
||||||
|
|
||||||
const app = new Elysia()
|
const app = new Elysia()
|
||||||
.use(appAccessTokenMiddleware())
|
// .use(appAccessTokenMiddleware())
|
||||||
.use(routes)
|
.use(routes)
|
||||||
.listen(process.env.APP_PORT || 3000);
|
.listen(process.env.APP_PORT || 3000);
|
||||||
|
|
||||||
|
|||||||
@ -46,13 +46,18 @@ export const googleCallbackService = async (
|
|||||||
|
|
||||||
return await OAuthUserProvisionService(
|
return await OAuthUserProvisionService(
|
||||||
{
|
{
|
||||||
providerName: "google",
|
provider: "google",
|
||||||
openId: userData.sub,
|
providerId: userData.sub,
|
||||||
|
providerToken: accessToken,
|
||||||
|
providerPayload: userData,
|
||||||
email: userData.email,
|
email: userData.email,
|
||||||
|
username: `goo_${userData.sub}`,
|
||||||
name: userData.name,
|
name: userData.name,
|
||||||
avatar: userData.picture,
|
avatar: userData.picture,
|
||||||
|
password: Math.random()
|
||||||
|
.toString(36)
|
||||||
|
.slice(2, 16),
|
||||||
},
|
},
|
||||||
userData,
|
|
||||||
userHeaderInfo
|
userHeaderInfo
|
||||||
);
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
@ -3,22 +3,15 @@ import { UserHeaderInformation } from "../../../../helpers/http/userHeader/getUs
|
|||||||
import { findUserService } from "../../../user/services/internal/findUser.service";
|
import { findUserService } from "../../../user/services/internal/findUser.service";
|
||||||
import { createUserSessionService } from "../../../userSession/services/createUserSession.service";
|
import { createUserSessionService } from "../../../userSession/services/createUserSession.service";
|
||||||
import { ErrorForwarder } from "../../../../helpers/error/instances/forwarder";
|
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 (
|
export const OAuthUserProvisionService = async (
|
||||||
payload: {
|
payload: createUserViaOauth,
|
||||||
providerName: string;
|
|
||||||
openId: string;
|
|
||||||
email: string;
|
|
||||||
username?: string;
|
|
||||||
name: string;
|
|
||||||
avatar?: string;
|
|
||||||
bio?: string;
|
|
||||||
},
|
|
||||||
providerRawCallback: unknown,
|
|
||||||
userHeaderInfo: UserHeaderInformation
|
userHeaderInfo: UserHeaderInformation
|
||||||
) => {
|
) => {
|
||||||
try {
|
try {
|
||||||
const providerId = `${payload.providerName}_${payload.openId}`;
|
const providerId = payload.providerId;
|
||||||
const findUserResult = (await findUserService({
|
const findUserResult = (await findUserService({
|
||||||
identifier: providerId,
|
identifier: providerId,
|
||||||
queryTarget: "providerId",
|
queryTarget: "providerId",
|
||||||
@ -28,12 +21,8 @@ export const OAuthUserProvisionService = async (
|
|||||||
if (findUserResult) {
|
if (findUserResult) {
|
||||||
return await createUserSessionService(findUserResult.id, userHeaderInfo);
|
return await createUserSessionService(findUserResult.id, userHeaderInfo);
|
||||||
} else {
|
} else {
|
||||||
/**
|
const createdUser = await createUserService(payload);
|
||||||
* === TODO ===
|
return await createUserSessionService(createdUser.id, userHeaderInfo);
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
ErrorForwarder(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;
|
email: string;
|
||||||
password: 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