示例#1
0
        /// <summary>
        /// Creates the approriate response model based on the result of assigning the achievement
        /// </summary>
        /// <param name="assignAchievementResult">The result of the achievement assigning</param>
        /// <returns>MobileAppScanResultModel</returns>
        private MobileAppScanResultModel GetAssignResultModel(JPPConstants.AssignAchievementResult assignAchievementResult)
        {
            switch (assignAchievementResult)
            {
            case JPPConstants.AssignAchievementResult.Success:
                return(new MobileAppScanResultModel()
                {
                    Success = true,
                    Message = "Achievement Successfully Assigned",
                    Code = 0
                });

            case JPPConstants.AssignAchievementResult.SuccessNoCard:
                return(new MobileAppScanResultModel()
                {
                    Success = true,
                    Message = "Achievement Successfully Assigned, Pick Up Card Elsewhere",
                    Code = 0
                });

            case JPPConstants.AssignAchievementResult.SuccessYesCard:
                return(new MobileAppScanResultModel()
                {
                    Success = true,
                    Message = "Achievement Successfully Assigned, Give Card",
                    Code = 0
                });

            case JPPConstants.AssignAchievementResult.SuccessRepetition:
                return(new MobileAppScanResultModel()
                {
                    Success = true,
                    Message = "Repetition Success",
                    Code = 0
                });

            case JPPConstants.AssignAchievementResult.SuccessThresholdTriggered:
                return(new MobileAppScanResultModel()
                {
                    Success = true,
                    Message = "Achievement Successfully Assigned, Threshold Unlocked",
                    Code = 0
                });

            case JPPConstants.AssignAchievementResult.FailureInvalidAchievement:
                return(new MobileAppScanResultModel()
                {
                    Success = false,
                    Message = "Achievement Invalid",
                    Code = 0
                });

            case JPPConstants.AssignAchievementResult.FailureInvalidPlayer:
                return(new MobileAppScanResultModel()
                {
                    Success = false,
                    Message = "Player Invalid",
                    Code = 0
                });

            case JPPConstants.AssignAchievementResult.FailureUnauthorizedPlayer:
                return(new MobileAppScanResultModel()
                {
                    Success = false,
                    Message = "Player Unauthorized",
                    Code = 0
                });

            case JPPConstants.AssignAchievementResult.FailureInvalidAssigner:
                return(new MobileAppScanResultModel()
                {
                    Success = false,
                    Message = "Assigner Invalid",
                    Code = 0
                });

            case JPPConstants.AssignAchievementResult.FailureUnauthorizedAssigner:
                return(new MobileAppScanResultModel()
                {
                    Success = false,
                    Message = "Assigner Unauthorized",
                    Code = 0
                });

            case JPPConstants.AssignAchievementResult.FailureAlreadyAchieved:
                return(new MobileAppScanResultModel()
                {
                    Success = false,
                    Message = "Player already has this achievement",
                    Code = 0
                });

            case JPPConstants.AssignAchievementResult.FailureRepetitionDelay:
                return(new MobileAppScanResultModel()
                {
                    Success = false,
                    Message = "Player needs to wait longer to get this achievement again",
                    Code = 0
                });

            case JPPConstants.AssignAchievementResult.FailureOther:
                return(new MobileAppScanResultModel()
                {
                    Success = false,
                    Message = "Failure Other",
                    Code = 0
                });
            }
            return(null);
        }
示例#2
0
        public JsonResult ReportScan(int aID, bool hasCardToGive, string timeScanned, string token, int userID, string authHash)
        {
            /*---------------------------------Token Validation Begin-----------------------------------*/
            #region Validate the Token

            //Get the current token
            UnitOfWork     work         = new UnitOfWork();
            external_token currentToken = work.SystemRepository.GetAuthorizationToken(token);

            //Invalid token
            if (currentToken == null)
            {
                return(Json(new MobileAppTokenErrorModel()
                {
                    Success = false, Message = GetTokenValidationResultMessage(TokenValidationResult.FailureInvalid)
                }));
            }

            //Expired token
            if (DateTime.Now.CompareTo(currentToken.expiration_date) > 0)
            {
                return(Json(new MobileAppTokenErrorModel()
                {
                    Success = false, Message = GetTokenValidationResultMessage(TokenValidationResult.FailureExpired)
                }));
            }

            //Make sure the date passed in is valid
            DateTime dt = DateTime.Now;
            if (!DateTime.TryParse(timeScanned, out dt))
            {
                return(Json(new MobileAppScanResultModel()
                {
                    Success = false, Message = "DateTime was invalid", Code = 11
                }));
            }

            //Build the string to be hashed
            string salt        = currentToken.refresh_token;
            String paramString = "";
            paramString += "aID=" + aID + "&hasCardToGive=" + hasCardToGive.ToString().ToLower() + "&timeScanned=" + timeScanned + "&token=" + token + "&userID=" + userID;
            string stringToHash = salt + "?" + paramString;

            //Invalid hash
            if (!ValidateHash(stringToHash, authHash))
            {
                return(Json(new MobileAppTokenErrorModel()
                {
                    Success = false, Message = GetTokenValidationResultMessage(TokenValidationResult.FailureExpired)
                }));
            }

            #endregion
            /*----------------------------------Token Validation End------------------------------------*/

            //Default AchievementResult is falilure
            JPPConstants.AssignAchievementResult assignAchievementResult = JPPConstants.AssignAchievementResult.FailureOther;

            //Assign the achievement and get the result
            assignAchievementResult = work.AchievementRepository.AssignAchievement(userID, aID, currentToken.user_id, true, dt, hasCardToGive);

            //Create the response model
            MobileAppScanResultModel response = GetAssignResultModel(assignAchievementResult);

            //Return
            return(Json(response));
        }