Example #1
0
        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);
        }
Example #3
0
        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);
        }