boredgame/src/lib/server/api/services/oauth.service.ts

28 lines
892 B
TypeScript
Raw Normal View History

2024-11-12 01:14:20 +00:00
import {inject, injectable} from '@needle-di/core'
import {FederatedIdentityRepository} from '../repositories/federated_identity.repository'
import {UsersService} from './users.service'
import type {OAuthProviders, OAuthUser} from "$lib/server/api/common/types/oauth";
2024-09-16 16:07:22 +00:00
@injectable()
2024-09-16 16:07:22 +00:00
export class OAuthService {
constructor(
2024-11-12 01:14:20 +00:00
private federatedIdentityRepository = inject(FederatedIdentityRepository),
private usersService = inject(UsersService),
2024-09-16 16:07:22 +00:00
) {}
2024-09-21 16:37:21 +00:00
async handleOAuthUser(oAuthUser: OAuthUser, oauthProvider: OAuthProviders) {
const federatedUser = await this.federatedIdentityRepository.findOneByFederatedUserIdAndProvider(oAuthUser.sub, oauthProvider)
2024-09-16 16:07:22 +00:00
if (federatedUser) {
return federatedUser.user_id
}
2024-09-16 16:07:22 +00:00
const user = await this.usersService.createOAuthUser(oAuthUser, oauthProvider)
2024-09-16 16:07:22 +00:00
if (!user) {
throw new Error('Failed to create user')
2024-09-16 16:07:22 +00:00
}
return user.id
2024-09-16 16:07:22 +00:00
}
}