void ValidateRequest(RecordRewardRequest request) { User user = userRepository.TryGet(request.Username)?.ToServiceModel(); if (user is null) { AuthenticationException ex = new AuthenticationException("The provided user is not registered"); logger.Error( MyOperation.RecordReward, OperationStatus.Failure, ex, new LogInfo(MyLogInfoKey.User, request.Username)); throw ex; } bool isTokenValid = requestHmacEncoder.IsTokenValid(request.HmacToken, request, user.SharedSecretKey); if (!isTokenValid) { AuthenticationException ex = new AuthenticationException("The provided HMAC token is not valid"); logger.Error( MyOperation.RecordReward, OperationStatus.Failure, ex, new LogInfo(MyLogInfoKey.User, request.Username), new LogInfo(MyLogInfoKey.GiveawaysProvider, request.GiveawaysProvider), new LogInfo(MyLogInfoKey.GiveawayId, request.GiveawayId)); throw ex; } }
public ActionResult RecordReward( [FromQuery] string username, [FromQuery] string gaProvider, [FromQuery] string gaId, [FromQuery] string steamUsername, [FromQuery] string steamAppId, [FromQuery] string activationKey, [FromQuery] string hmac) { try { RecordRewardRequest request = new RecordRewardRequest { Username = username, GiveawaysProvider = gaProvider, GiveawayId = gaId, SteamUsername = steamUsername, SteamAppId = steamAppId, ActivationKey = activationKey, HmacToken = hmac }; service.RecordReward(request); return(Ok()); } catch (Exception ex) { ErrorResponse response = new ErrorResponse(ex); return(BadRequest(response)); } }
Reward GetRewardObjectFromRequest(RecordRewardRequest request) { Reward reward = new Reward(); reward.Id = $"{request.GiveawaysProvider}-{request.GiveawayId}-{reward.SteamUsername}"; reward.GiveawaysProvider = request.GiveawaysProvider; reward.GiveawayId = request.GiveawayId; reward.SteamUsername = request.SteamUsername; reward.ActivationKey = request.ActivationKey; reward.SteamApp = new SteamApp(); reward.SteamApp.Id = request.SteamAppId; return(reward); }
public void RecordReward(RecordRewardRequest request) { logger.Info( MyOperation.RecordReward, OperationStatus.Started, new LogInfo(MyLogInfoKey.User, request.Username), new LogInfo(MyLogInfoKey.GiveawaysProvider, request.GiveawaysProvider), new LogInfo(MyLogInfoKey.GiveawayId, request.GiveawayId)); ValidateRequest(request); Reward reward = GetRewardObjectFromRequest(request); reward.SteamApp = storefrontDataRetriever.GetAppData(reward.SteamApp.Id).ToServiceModel(); if (WasRewardAlreadyRecorded(reward)) { logger.Warn( MyOperation.RecordReward, OperationStatus.Failure, "Reward already recorded", new LogInfo(MyLogInfoKey.User, request.Username), new LogInfo(MyLogInfoKey.GiveawaysProvider, request.GiveawaysProvider), new LogInfo(MyLogInfoKey.GiveawayId, request.GiveawayId)); return; } StoreReward(reward); notificationSender.SendNotificationAsync(reward); logger.Info( MyOperation.RecordReward, OperationStatus.Success, new LogInfo(MyLogInfoKey.User, request.Username), new LogInfo(MyLogInfoKey.GiveawaysProvider, request.GiveawaysProvider), new LogInfo(MyLogInfoKey.GiveawayId, request.GiveawayId)); }