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

28 lines
944 B
TypeScript
Raw Normal View History

import {inject, injectable} from 'tsyringe'
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(
@inject(FederatedIdentityRepository) private readonly federatedIdentityRepository: FederatedIdentityRepository,
@inject(UsersService) private readonly usersService: 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
}
}