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

27 lines
901 B
TypeScript
Raw Normal View History

import { inject, injectable } from 'tsyringe'
import { FederatedIdentityRepository } from '../repositories/federated_identity.repository'
import { UsersService } from './users.service'
2024-09-16 16:07:22 +00:00
@injectable()
2024-09-16 16:07:22 +00:00
export class OAuthService {
constructor(
@inject(FederatedIdentityRepository) private readonly federatedIdentityRepository: FederatedIdentityRepository,
@inject(UsersService) private readonly usersService: UsersService,
2024-09-16 16:07:22 +00:00
) {}
async handleOAuthUser(oauthUserId: number, oauthUsername: string, oauthProvider: string) {
const federatedUser = await this.federatedIdentityRepository.findOneByFederatedUserIdAndProvider(`${oauthUserId}`, 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(oauthUserId, oauthUsername, 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
}
}