public static string GetGoogleId(string authToken, AuthTokenRepository authTokenRepository, UserRepository userRepository) { if (string.IsNullOrEmpty(authToken)) { throw new ArgumentNullException("authToken"); } User user; var googleId = authTokenRepository.GetGoogleIdByAuthToken(authToken); if (googleId == null) { user = RecordTheAuthTokenInTheDatabase(authToken, authTokenRepository); googleId = user.GoogleId; } else { user = userRepository.GetUserByGoogleId(googleId); if (user == null) { var googlePlusLoginDto = GetGooglePlusLoginDto(authToken); if (googlePlusLoginDto == null || String.IsNullOrEmpty(googlePlusLoginDto.id)) { throw new ArgumentException(String.Format("Unable to retrieve a Google user for auth token: '{0}'.", authToken)); } user = Mapper.Map<GooglePlusLoginDto, User>(googlePlusLoginDto); } } AddOrUpdateTheUser(user, userRepository); return googleId; }
/// <inheritdoc /> protected override async void OnEventFired(object source, EventArgs args) { //TODO: Check result //We don't need to be on the main thread to send a session claim request. await SendService.SendMessage(new ClientSessionClaimRequestPayload(AuthTokenRepository.RetrieveWithType(), CharacterDataRepository.CharacterId)) .ConfigureAwait(false); }
public async Task <RES_LOGIN> Process(REQ_LOGIN requestPacket) { var responseResult = new RES_LOGIN(); var userObject = await UserRepository.GetUser(requestPacket.UserID); if (userObject == null) { return(responseResult.Return(ERROR_CODE.REQ_LOGIN_INVALID_USER)); } if (userObject.PW != requestPacket.PW) { return(responseResult.Return(ERROR_CODE.REQ_LOGIN_PW)); } //시간은 좋지 않다. https://paragonie.com/blog/2016/05/how-generate-secure-random-numbers-in-various-programming-languages var authToken = System.DateTime.Now.Ticks.ToString(); //레디스에 등록하기 전에 확인을 해보거나 await AuthTokenRepository.Add(requestPacket.UserID, authToken); responseResult.SetResult(ERROR_CODE.NONE); responseResult.AuthToken = authToken; return(responseResult); }
public UnitOfWork() { _appDbContext = new AppDbContext(); Accounts = new AccountsRepository(_appDbContext); EmailVerificationTokens = new EmailVerificationTokenRepository(_appDbContext); AuthTokens = new AuthTokenRepository(_appDbContext); }
protected override void OnEventFired(object source, EventArgs args) { //Once connection to the instance server is established //we must attempt to claim out session on to actually fully enter. //We send time sync first since we need to have a good grasp of the current network time before //we even spawn into the world and start recieveing the world states. SendService.SendMessageImmediately(new ServerTimeSyncronizationRequestPayload(DateTime.UtcNow.Ticks)) .ConfigureAwaitFalse(); //TODO: When it comes to community servers, we should not expose the sensitive JWT to them. We need a better way to deal with auth against untrusted instance servers SendService.SendMessage(new ClientSessionClaimRequestPayload(AuthTokenRepository.RetrieveWithType(), CharacterDataRepository.CharacterId)); }
public AccountService(RequestContext c, UserAccountRepository userAccounts, AuthTokenRepository authTokens, ApiKeyRepository apiKeys, StoreUserRelationshipRepository adminUsersXStores, StoreRepository stores) { context = c; AdminUsers = userAccounts; AuthTokens = authTokens; ApiKeys = apiKeys; AdminUsersXStores = adminUsersXStores; Stores = stores; }
public async Task <RES_LOGOUT> Process(REQ_LOGOUT requestPacket) { var responseResult = new RES_LOGOUT(); var userObject = await AuthTokenRepository.Check(requestPacket.UserID, requestPacket.AuthToken); if (userObject == false) { return(responseResult.Return(ERROR_CODE.REQ_LOGOUT_FAIL_CHECK_ID_OR_AUTHTOKEN)); } await AuthTokenRepository.Delete(requestPacket.UserID); responseResult.SetResult(ERROR_CODE.NONE); return(responseResult); }
public UnitOfWork() { _appDbContext = new AppDbContext(); var accounts = new AccountsRepository(_appDbContext); _repositories.Add(accounts); Accounts = accounts; var emailVerificationTokens = new EmailVerificationTokenRepository(_appDbContext); _repositories.Add(emailVerificationTokens); EmailVerificationTokens = emailVerificationTokens; var authTokens = new AuthTokenRepository(_appDbContext); _repositories.Add(authTokens); AuthTokens = authTokens; }
public async Task <RES_LOGIN> Process(REQ_LOGIN requestPacket) { var responseResult = new RES_LOGIN(); var userObject = await UserRepository.GetUser(requestPacket.UserID); if (userObject == null) { return(responseResult.Return(ERROR_CODE.REQ_LOGIN_INVALID_USER)); } if (userObject.PW != requestPacket.PW) { return(responseResult.Return(ERROR_CODE.REQ_LOGIN_PW)); } var authToken = System.DateTime.Now.Ticks.ToString(); await AuthTokenRepository.Add(requestPacket.UserID, authToken); responseResult.SetResult(ERROR_CODE.NONE); responseResult.AuthToken = authToken; return(responseResult); }
//TODO: Race condition here because it's possible the subsciber hasn't subscribed just yet. /// <inheritdoc /> public async Task OnGameInitialized() { CharacterListResponse listResponse = await CharacterQueryable.GetCharacters(AuthTokenRepository.RetrieveWithType()) .ConfigureAwait(true); if (!listResponse.isSuccessful || listResponse.CharacterIds.Count == 0) { if (Logger.IsErrorEnabled) { Logger.Error($"Failed to query character list. Recieved ResultCode: {listResponse.ResultCode}"); } //We don't have character creation... Soooo, nothing we can do right now. return; } //TODO: Should we make this API spit out network guids? foreach (var characterId in listResponse.CharacterIds) { NetworkEntityGuid entityGuid = new NetworkEntityGuidBuilder() .WithType(EntityType.Player) .WithId(characterId) .Build(); OnCharacterSelectionEntryChanged?.Invoke(this, new CharacterSelectionEntryDataChangeEventArgs(entityGuid)); } }
private static User RecordTheAuthTokenInTheDatabase(string authToken, AuthTokenRepository authTokenRepository) { var googlePlusLoginDto = GetGooglePlusLoginDto(authToken); if (googlePlusLoginDto == null || String.IsNullOrEmpty(googlePlusLoginDto.id)) { throw new ArgumentException(String.Format("Unable to retrieve a Google user for auth token: '{0}'.", authToken)); } var mappedUser = Mapper.Map<GooglePlusLoginDto, User>(googlePlusLoginDto); authTokenRepository.Add(new AuthToken { Token = authToken, GoogleId = mappedUser.GoogleId, CreateDate = DateTimeOffset.Now }); return mappedUser; }
protected override void OnEventFired(object source, EventArgs args) { //Once connection to the instance server is established //we must attempt to claim out session on to actually fully enter. EventQueueable.Enqueue(async() => { try { CharacterListResponse listResponse = await CharacterService.GetCharacters(); await CharacterService.TryEnterSession(listResponse.CharacterIds.First()); CharacterDataRepository.UpdateCharacterId(listResponse.CharacterIds.First()); //TODO: When it comes to community servers, we should not expose the sensitive JWT to them. We need a better way to deal with auth against untrusted instance servers await SendService.SendMessage(new ClientSessionClaimRequestPayload(AuthTokenRepository.RetrieveWithType(), listResponse.CharacterIds.First())); } catch (Exception e) { if (Logger.IsErrorEnabled) { Logger.Error($"Failed to authenticate to instance server as character. Reason: {e.ToString()}"); } throw; } }); }