public async Task <AuthResponse> ProfileFromCDKey([FromBody] AuthRequest request) { var response = new AuthResponse(); var cdKeyLookup = new CdKeyLookup(); cdKeyLookup.CdkeyHash = request.cdkey; if (request.gameLookup == null) { throw new BadCdKeyException(); } cdKeyLookup.Gameid = request.gameLookup.id; var profile = await cdkeyRepository.LookupProfileFromCDKey(cdKeyLookup); if (profile == null || request.profileLookup == null || profile.Nick.CompareTo(request.profileLookup.nick) != 0) { throw new BadCdKeyException(); } response.profile = profile; var userLookup = new UserLookup(); userLookup.id = profile.Userid; var user = (await userRepository.Lookup(userLookup)).FirstOrDefault(); response.user = user; return(response); }
public async Task <CDKeySuccessResponse> TestCDKeyValid([FromBody] GetProfileByCDKeyRequest request) { var resp = new CDKeySuccessResponse(); var game = (await gameRepository.Lookup(request.gameLookup)).FirstOrDefault(); if (game == null) { throw new ArgumentException(); } var lookupRequest = new CdKeyLookup(); lookupRequest.Cdkey = request.cdkey; lookupRequest.Gameid = game.Id; var failIfNotFound = await cdkeyRepository.LookupFailItNotFound(lookupRequest); if (failIfNotFound == false) { resp.success = true; return(resp); } var keys = await cdkeyRepository.Lookup(lookupRequest); resp.success = keys.Count() > 0; return(resp); }
public async Task <AuthResponse> CDKeyAuth([FromBody] AuthRequest request) { var response = new AuthResponse(); try { var cdKeyLookup = new CdKeyLookup(); cdKeyLookup.CdkeyHash = request.cdkey; if (request.gameLookup == null) { throw new AuthInvalidCredentialsException(); } cdKeyLookup.Gameid = request.gameLookup.id; cdKeyLookup.profileLookup = request.profileLookup; var profile = await cdkeyRepository.LookupProfileFromCDKey(cdKeyLookup); if (profile == null || request.profileLookup == null || profile.Nick.CompareTo(request.profileLookup.nick) != 0) { throw new AuthInvalidCredentialsException(); } response.profile = profile; var userLookup = new UserLookup(); userLookup.id = profile.Userid; var user = (await userRepository.Lookup(userLookup)).FirstOrDefault(); response.user = user; var sesskey = gs_sesskey(request.session_key); var cdkey = (await cdkeyRepository.Lookup(cdKeyLookup)).FirstOrDefault(); string challenge = cdkey.Cdkey + sesskey.ToString(); using (MD5 md5 = MD5.Create()) { StringBuilder sBuilder = new StringBuilder(); byte[] data = md5.ComputeHash(Encoding.UTF8.GetBytes(challenge)); for (int i = 0; i < data.Length; i++) { sBuilder.Append(data[i].ToString("x2")); } challenge = sBuilder.ToString().ToLower(); } if (!challenge.Equals(request.client_response.ToLower())) { throw new AuthInvalidCredentialsException(); } return(response); } catch (AuthInvalidCredentialsException e) { var profile = (await profileRepository.Lookup(new ProfileLookup { id = configuration.GetValue <int>("PersistCdKeyAuthFallbackProfile") })).FirstOrDefault(); response.profile = profile; var userLookup = new UserLookup(); userLookup.id = profile.Userid; var user = (await userRepository.Lookup(userLookup)).FirstOrDefault(); response.user = user; return(response); } }
public async Task <Profile> GetProfileByCDKey([FromBody] GetProfileByCDKeyRequest request) { var game = (await gameRepository.Lookup(request.gameLookup)).FirstOrDefault(); if (game == null) { throw new ArgumentException(); } var cdkeyLookup = new CdKeyLookup(); cdkeyLookup.Gameid = game.Id; cdkeyLookup.Cdkey = request.cdkey; return(await cdkeyRepository.LookupProfileFromCDKey(cdkeyLookup)); }
public async Task <CDKeySuccessResponse> AssociateCDKeyToProfile([FromBody] CDKeyAssociateRequest request) { var profile = (await profileRepository.Lookup(request.profileLookup)).FirstOrDefault(); if (profile == null) { throw new NoSuchUserException(); } var game = (await gameRepository.Lookup(request.gameLookup)).FirstOrDefault(); if (game == null) { throw new ArgumentException(); } var profileCdKeyLookup = new CdKeyLookup(); profileCdKeyLookup.Gameid = game.Id; profileCdKeyLookup.profileLookup = request.profileLookup; var cdKeyData = await cdkeyRepository.LookupCDKeyFromProfile(profileCdKeyLookup); if (cdKeyData != null) { throw new CdKeyAlreadySetException(); } var cdkeyLookup = new CdKeyLookup(); cdkeyLookup.Cdkey = request.cdkey; cdkeyLookup.Gameid = game.Id; var resp = new CDKeySuccessResponse(); resp.success = await cdkeyRepository.AssociateCDKeyToProfile(cdkeyLookup, profile); return(resp); }