postio / apps /backend /src /services /auth /providers /github.provider.ts
Leon4gr45's picture
Upload folder using huggingface_hub (part 4)
3722089 verified
Raw
History Blame Contribute Delete
1.58 kB
import {
AuthProvider,
AuthProviderAbstract,
} from '@gitroom/backend/services/auth/providers.interface';
@AuthProvider({ provider: 'GITHUB' })
export class GithubProvider extends AuthProviderAbstract {
generateLink(): string {
return `https://github.com/login/oauth/authorize?client_id=${
process.env.GITHUB_CLIENT_ID
}&scope=user:email&redirect_uri=${encodeURIComponent(
`${process.env.FRONTEND_URL}/settings`
)}`;
}
async getToken(code: string, _redirectUri?: string): Promise<string> {
const { access_token } = await (
await fetch('https://github.com/login/oauth/access_token', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
},
body: JSON.stringify({
client_id: process.env.GITHUB_CLIENT_ID,
client_secret: process.env.GITHUB_CLIENT_SECRET,
code,
redirect_uri: `${process.env.FRONTEND_URL}/settings`,
}),
})
).json();
return access_token;
}
async getUser(access_token: string): Promise<{ email: string; id: string }> {
const data = await (
await fetch('https://api.github.com/user', {
headers: {
Authorization: `token ${access_token}`,
},
})
).json();
const [{ email }] = await (
await fetch('https://api.github.com/user/emails', {
headers: {
Authorization: `token ${access_token}`,
},
})
).json();
return {
email: email,
id: String(data.id),
};
}
}