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

28 lines
931 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 {OAuthUser} from "$lib/server/api/common/types/oauth-user";
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(oAuthUser: OAuthUser, oauthProvider: string) {
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
}
}