✨ create oauth login
Create authentication with oAuth using a third-party vendor. Currently, only GitHub is available, but more will be added in the future.
This commit is contained in:
27
src/modules/auth/services/githubCallback.service.ts
Normal file
27
src/modules/auth/services/githubCallback.service.ts
Normal file
@ -0,0 +1,27 @@
|
||||
import { AppError } from "../../../helpers/error/instances/app";
|
||||
import { githubProvider } from "../providers/github.provider";
|
||||
|
||||
export const githubCallbackService = async (code: string) => {
|
||||
try {
|
||||
const github = githubProvider();
|
||||
const tokens = await github.validateAuthorizationCode(code);
|
||||
const accessToken = tokens.accessToken();
|
||||
const userdata = await fetch("https://api.github.com/user", {
|
||||
headers: {
|
||||
Authorization: `Bearer ${accessToken}`,
|
||||
},
|
||||
});
|
||||
const useremail = await fetch("https://api.github.com/user/emails", {
|
||||
headers: {
|
||||
Authorization: `Bearer ${accessToken}`,
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
userdata: await userdata.json(),
|
||||
useremail: await useremail.json(),
|
||||
};
|
||||
} catch (error) {
|
||||
return new AppError(500, "Authentication service error", error);
|
||||
}
|
||||
};
|
||||
16
src/modules/auth/services/githubRequest.service.ts
Normal file
16
src/modules/auth/services/githubRequest.service.ts
Normal file
@ -0,0 +1,16 @@
|
||||
import * as arctic from "arctic";
|
||||
import { githubProvider } from "../providers/github.provider";
|
||||
import { AppError } from "../../../helpers/error/instances/app";
|
||||
|
||||
export const githubRequestService = async () => {
|
||||
try {
|
||||
const github = githubProvider();
|
||||
const state = arctic.generateState();
|
||||
const scopes = ["user:email"];
|
||||
const url = github.createAuthorizationURL(state, scopes);
|
||||
|
||||
return url;
|
||||
} catch (error) {
|
||||
throw new AppError(500, "Oops! something happening", error);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user