예제 #1
0
        /// <summary>
        /// Fired when the player posts a new comment.
        /// </summary>
        /// <param name="player"></param>
        /// <param name="request"></param>
        /// <returns></returns>
        private async Task <ActionResult> OnRequestUpdateComment(Player player, GrimRequest request)
        {
            if (!request.TryGetParameterByKey("bbs_board_id", out var bbsBoardIdParam) || !int.TryParse(bbsBoardIdParam.Text, out int bbs_board_id))
            {
                _logger.LogWarning($"Got bbs.updateComment request with missing 'bbs_board_id' parameter");
                return(BadRequest());
            }

            if (!request.TryGetParameterByKey("comment", out var comment))
            {
                _logger.LogWarning($"Got bbs.updateComment request with missing 'bbs_comment_id' parameter");
                return(BadRequest());
            }

            if (comment.Text.Length == 0 || comment.Text.Length > 140)
            {
                _logger.LogWarning("Got bbs.updateComment with empty or too long comment? In: {length}, Max: 30", comment.Text.Length);
                return(BadRequest());
            }

            // Bbs Board ids is just the user number - get the user using it
            var user = await _userDb.GetByIDAsync(bbs_board_id);

            if (user is null)
            {
                BadRequest();
            }

            var newComment = new BbsDTO(bbs_board_id, player.Data.Id, comment.Text, DateTime.Now);
            await _bbsDb.AddAsync(newComment);

            return(Ok(GrimResult.FromBool(true)));
        }
예제 #2
0
        /// <summary>
        /// Fired when the player deletes an image, or can also be used for the player
        /// to sync their local images to the server and removing the ones that the player no longer has.
        /// </summary>
        /// <param name="player"></param>
        /// <param name="gRequest"></param>
        /// <returns></returns>
        private async Task <ActionResult> OnRequestDeleteImage(Player player, GrimRequest gRequest)
        {
            if (Player is null)
            {
                _logger.LogWarning("Could not get current player for host {host}", Request.Host);
                return(Unauthorized());
            }

            if (!gRequest.TryGetParameterLongByKey("photo_id", out long photo_id))
            {
                _logger.LogWarning($"Got photo.upload request with missing 'photo_id' parameter");
                return(BadRequest());
            }

            var photo = await _photoDb.GetByIDAsync(photo_id);

            if (photo is null)
            {
                return(NotFound());
            }

            if (photo.UserId != player.Data.Id)
            {
                return(Forbid());
            }

            await _photoDb.RemoveAsync(photo_id);

            return(Ok(GrimResult.FromBool(true)));
        }
예제 #3
0
        /// <summary>
        /// Fired when the player updates their welcome message (GT5).
        /// </summary>
        /// <param name="player"></param>
        /// <param name="message">New welcome message.</param>
        /// <returns></returns>
        private async Task <ActionResult> OnUpdateAutoMessage(Player player, string message)
        {
            if (message.Length > 30)
            {
                return(BadRequest());
            }

            var data = player.Data;

            data.WelcomeMessage = message;

            await _userDB.UpdateWelcomeMessage(data);

            return(Ok(GrimResult.FromBool(true)));
        }
예제 #4
0
        // see requestActionLogList in gtmode.ad
        private async Task <ActionResult> OnActionPutLog(Player player, GrimRequest gRequest)
        {
            if (!gRequest.TryGetParameterByKey("action_type", out var actionTypeParam) || !int.TryParse(actionTypeParam.Text, out int action_type))
            {
                _logger.LogWarning($"Got actionlog.putActionLog request with missing 'action_type' parameter");
                return(BadRequest());
            }
            if (!gRequest.TryGetParameterByKey("value1", out var value1Param))
            {
                _logger.LogWarning($"Got actionlog.putActionLog request with missing 'value1' parameter");
                return(BadRequest());
            }
            if (!gRequest.TryGetParameterByKey("value2", out var value2Param))
            {
                _logger.LogWarning($"Got actionlog.putActionLog request with missing 'value2' parameter");
                return(BadRequest());
            }
            if (!gRequest.TryGetParameterByKey("value3", out var value3Param))
            {
                _logger.LogWarning($"Got actionlog.putActionLog request with missing 'value3' parameter");
                return(BadRequest());
            }
            if (!gRequest.TryGetParameterByKey("value4", out var value4Param))
            {
                _logger.LogWarning($"Got actionlog.putActionLog request with missing 'value4' parameter");
                return(BadRequest());
            }
            if (!gRequest.TryGetParameterByKey("value5", out var value5Param))
            {
                _logger.LogWarning($"Got actionlog.putActionLog request with missing 'value5' parameter");
                return(BadRequest());
            }

            if (!ActionLog.Tags.TryGetValue(value1Param.Text, out string def))
            {
                return(Ok());
            }

            // TODO: Some actionlog checks
            LogAction(player, def, value2Param.Text, value3Param.Text, value4Param.Text, value5Param.Text);

            var log = new ActionLogDTO(player.Data.Id, DateTime.Now, value1Param.Text, value2Param.Text,
                                       value3Param.Text, value4Param.Text, value5Param.Text);

            await _actionLogDb.AddAsync(log);

            return(Ok(GrimResult.FromBool(true)));
        }
예제 #5
0
        /// <summary>
        /// Fired when the player updates their progression.
        /// </summary>
        /// <param name="player"></param>
        /// <param name="license_level">Current license of the player.</param>
        /// <param name="achievement">Achievement count.</param>
        /// <param name="trophy">Trophy count.</param>
        /// <param name="car_count">Total car count.</param>
        /// <param name="license_gold">Total golded licenses.</param>
        /// <param name="odometer">Total distance travelled.</param>
        /// <returns></returns>
        private async Task <ActionResult> OnRequestUpdateGameStats(Player player, int license_level, int achievement, int trophy,
                                                                   int car_count, int license_gold, float odometer)
        {
            // TODO: Do game stats verification
            var data = player.Data;

            data.LicenseLevel     = license_level;
            data.AchievementCount = achievement;
            data.TrophyCount      = trophy;
            data.CarCount         = car_count;
            data.LicenseGoldCount = license_gold;
            data.Odometer         = odometer;

            await _userDB.UpdateGameStats(data);

            return(Ok(GrimResult.FromBool(true)));
        }
예제 #6
0
        /// <summary>
        /// Fired when the player updates their menu design (GT5).
        /// </summary>
        /// <param name="player"></param>
        /// <param name="menuColorParam">Menu color index (string).</param>
        /// <param name="menuMatiereParam">Menu matiere index (string).</param>
        /// <returns></returns>
        private async Task <ActionResult> OnUpdateMyHomeDesign(Player player, string menuColorParam, string menuMatiereParam)
        {
            if (!int.TryParse(menuColorParam, out int menuColorIndex))
            {
                return(BadRequest());
            }
            if (!int.TryParse(menuMatiereParam, out int menuMatiereIndex))
            {
                return(BadRequest());
            }

            player.Data.MenuColor   = menuColorIndex;
            player.Data.MenuMatiere = menuMatiereIndex;

            await _userDB.UpdateHomeDesign(player.Data);

            return(Ok(GrimResult.FromBool(true)));
        }
예제 #7
0
        /// <summary>
        /// Fired when the player updates their suit data.
        /// </summary>
        /// <param name="player"></param>
        /// <param name="wearParam">Wear Id (string).</param>
        /// <param name="wearColorParam">Wear Color Index (string).</param>
        /// <returns></returns>
        private async Task <ActionResult> OnUpdateWear(Player player, string wearParam, string wearColorParam)
        {
            if (!int.TryParse(wearParam, out int wearId))
            {
                return(BadRequest());
            }
            if (!int.TryParse(wearColorParam, out int wearColorId))
            {
                return(BadRequest());
            }

            player.Data.WearId      = wearId;
            player.Data.WearColorId = wearColorId;

            await _userDB.UpdateWear(player.Data);

            return(Ok(GrimResult.FromBool(true)));
        }
예제 #8
0
        /// <summary>
        /// Fired when the player updates their helmet data.
        /// </summary>
        /// <param name="player"></param>
        /// <param name="helmetParam">Helmet Id (string).</param>
        /// <param name="helmetColorParam">Helmet Color Index (string).</param>
        /// <returns></returns>
        private async Task <ActionResult> OnUpdateHelmet(Player player, string helmetParam, string helmetColorParam)
        {
            if (!int.TryParse(helmetParam, out int helmetId))
            {
                return(BadRequest());
            }
            if (!int.TryParse(helmetColorParam, out int helmetColorId))
            {
                return(BadRequest());
            }

            player.Data.HelmetId      = helmetId;
            player.Data.HelmetColorId = helmetColorId;

            await _userDB.UpdateHelmet(player.Data);

            return(Ok(GrimResult.FromBool(true)));
        }
예제 #9
0
        /// <summary>
        /// Fired when the player deletes a comment from their board.
        /// </summary>
        /// <param name="player"></param>
        /// <param name="request"></param>
        /// <returns></returns>
        private async Task <ActionResult> OnRequestDeleteComment(Player player, GrimRequest request)
        {
            if (!request.TryGetParameterByKey("bbs_comment_id", out var commentIdParam) || !int.TryParse(commentIdParam.Text, out int bbs_comment_id))
            {
                _logger.LogWarning($"Got bbs.deleteComment request with missing 'bbs_comment_id' parameter");
                return(BadRequest());
            }

            // Get user's comment
            var comment = await _bbsDb.GetByIDAsync(bbs_comment_id);

            if (comment is null || (comment.BbsBoardId != player.Data.Id && comment.AuthorId != player.Data.Id))
            {
                return(Forbid());
            }

            await _bbsDb.RemoveAsync(bbs_comment_id);

            return(Ok(GrimResult.FromBool(true)));
        }
예제 #10
0
        /// <summary>
        /// Fired when the player requests any kind of profile update.
        /// </summary>
        /// <param name="player"></param>
        /// <param name="requestReq"></param>
        /// <returns></returns>
        private async Task <ActionResult> OnProfileUpdate(Player player, GrimRequest requestReq)
        {
            // requestUpdateGameStats or updateMyHomeProfile?
            if (requestReq.TryGetParameterByKey("license_level", out var licenseLevelParam) && int.TryParse(licenseLevelParam.Text, out int license_level))
            {
                if (!requestReq.TryGetParameterByKey("achievement", out var achievementParam) || !int.TryParse(achievementParam.Text, out int achievement))
                {
                    return(BadRequest());
                }

                if (!requestReq.TryGetParameterByKey("trophy", out var trophyParam) || !int.TryParse(trophyParam.Text, out int trophy))
                {
                    return(BadRequest());
                }

                if (!requestReq.TryGetParameterByKey("car_count", out var carCountParam) || !int.TryParse(carCountParam.Text, out int car_count))
                {
                    return(BadRequest());
                }

                if (!requestReq.TryGetParameterByKey("license_gold", out var licenseGoldParam) || !int.TryParse(licenseGoldParam.Text, out int license_gold))
                {
                    return(BadRequest());
                }

                if (!requestReq.TryGetParameterByKey("odometer", out var odometerParam) || !float.TryParse(odometerParam.Text, out float odometer))
                {
                    return(BadRequest());
                }

                // Can we assume we have don't have more? If so, it's requestUpdateGameStats
                if (!requestReq.TryGetParameterByKey("win_count", out var winCountParam))
                {
                    return(await OnRequestUpdateGameStats(player, license_level, achievement, trophy, car_count, license_gold, odometer));
                }

                // Then we know its a global profile update - UpdateMyHomeProfile
                if (!int.TryParse(winCountParam.Text, out int win_count))
                {
                    return(BadRequest());
                }

                if (!requestReq.TryGetParameterByKey("credit", out var creditParam) || !int.TryParse(creditParam.Text, out int credit))
                {
                    return(BadRequest());
                }

                if (!requestReq.TryGetParameterByKey("license_silver", out var licenseSilverParam) || !int.TryParse(licenseSilverParam.Text, out int license_silver))
                {
                    return(BadRequest());
                }

                if (!requestReq.TryGetParameterByKey("license_bronze", out var licenseBronzeParam) || !int.TryParse(licenseBronzeParam.Text, out int license_bronze))
                {
                    return(BadRequest());
                }

                if (!requestReq.TryGetParameterByKey("aspec_level", out var aspecLevelParam) || !int.TryParse(aspecLevelParam.Text, out int aspec_level))
                {
                    return(BadRequest());
                }

                if (!requestReq.TryGetParameterByKey("bspec_level", out var bspecLevelParam) || !int.TryParse(bspecLevelParam.Text, out int bspec_level))
                {
                    return(BadRequest());
                }

                if (!requestReq.TryGetParameterByKey("aspec_exp", out var aspecExpParam) || !int.TryParse(aspecExpParam.Text, out int aspec_exp))
                {
                    return(BadRequest());
                }

                if (!requestReq.TryGetParameterByKey("bspec_exp", out var bspecExpParam) || !int.TryParse(bspecExpParam.Text, out int bspec_exp))
                {
                    return(BadRequest());
                }

                var data = player.Data;
                data.WinCount           = win_count;
                data.Credit             = credit;
                data.LicenseSilverCount = license_silver;
                data.LicenseBronzeCount = license_bronze;
                data.ASpecLevel         = aspec_level;
                data.ASpecExp           = aspec_exp;
                data.BSpecLevel         = bspec_level;
                data.BSpecExp           = bspec_exp;

                await _userDB.UpdateMyHomeProfile(data);

                return(Ok(GrimResult.FromBool(true)));
            }
            // Can we assume its requestUpdateOnlineProfile?
            else if (requestReq.TryGetParameterByKey("profile_level", out var profileLevelParam) && requestReq.Params.ParamList.Count == 5)
            {
                if (!int.TryParse(profileLevelParam.Text, out int profile_level))
                {
                    return(BadRequest());
                }

                if (!requestReq.TryGetParameterByKey("comment_level", out var commentLevelParam) || !int.TryParse(commentLevelParam.Text, out int comment_level))
                {
                    return(BadRequest());
                }

                if (!requestReq.TryGetParameterByKey("playtime_level", out var playtimeLevelParam) || !int.TryParse(playtimeLevelParam.Text, out int playtime_level))
                {
                    return(BadRequest());
                }

                if (!requestReq.TryGetParameterByKey("playtime", out var playtimeParam))
                {
                    return(BadRequest());
                }

                if (!requestReq.TryGetParameterByKey("comment", out var commentParam))
                {
                    return(BadRequest());
                }

                return(await OnUpdateOnlineProfile(player, profile_level, comment_level,
                                                   playtime_level, playtimeParam.Text, commentParam.Text));
            }
            else if (requestReq.TryGetParameterByKey("welcomemessage", out var welcomeMessage) && requestReq.Params.ParamList.Count == 1)
            {
                return(await OnUpdateAutoMessage(player, welcomeMessage.Text));
            }
            else if (requestReq.TryGetParameterByKey("helmet", out var helmet) && requestReq.TryGetParameterByKey("helmet_color", out var helmetColor))
            {
                return(await OnUpdateHelmet(player, helmet.Text, helmetColor.Text));
            }
            else if (requestReq.TryGetParameterByKey("wear", out var wear) && requestReq.TryGetParameterByKey("wear_color", out var wear_color))
            {
                return(await OnUpdateWear(player, wear.Text, wear_color.Text));
            }
            else if (requestReq.TryGetParameterByKey("menu_color", out var menu_color) && requestReq.TryGetParameterByKey("menu_matiere", out var menu_matiere))
            {
                return(await OnUpdateMyHomeDesign(player, menu_color.Text, menu_matiere.Text));
            }

            // No parsing is done.
            return(BadRequest());
        }
예제 #11
0
 public GrimResult Post()
 {
     _logger.LogInformation($"Got session extend request");
     return(GrimResult.FromBool(true));
 }