public static bool checkRolePermission(ApplicationUser currentUser, string requiredPermission) { if (currentUser != null) { var rbac = new RBAC(currentUser.Id); return rbac.HasPermission(requiredPermission); } return false; }
public bool validate() { this.errors = new Dictionary<string, List<string>>(); if (exchangeOption == null) { addError("exchange_option_id", "Exchange Option has been removed"); return false; } if (this.exchangeOption.is_archived) { this.addError("exchange_option_id", "Exchange Option has been removed"); } if (this.exchangeOption.game_id != this.game.id) { this.addError("exchange_option_id", "Exchange Option does not belong to game"); } //Game is not archived and active RBAC rbac = new RBAC(user.id); if (!(rbac.HasRole("admin") || rbac.HasRole("game_admin"))) { if (!this.game.is_active || this.game.is_archived) this.addError("game_id", "Game is not active or has been removed"); } try { //self.inGameAmount = int(self.inGameAmount) if (this.exchangeOption is CreditType) { if (this.inGameAmount < 0) { this.addError("exchange_amount", "Exchange amount needs to be a positive integer"); } } else if (this.exchangeOption is Package) { if (this.inGameAmount != 1) { this.addError("exchange_amount", "Exchange amount needs to be 01"); } } } catch (Exception) { this.addError("exchange_amount", "Exchange amount needs to be a positive integer"); } if (this.inGameAmount == 0) { this.addError("exchange_amount", "Exchange amount is required"); } if (this.errors.Count == 0) { Tuple<decimal, decimal> tuple = calculate().Result; if (!(tuple.Item1 > 0 || tuple.Item2 > 0)) this.addError("exchange_amount", "Insufficient Balance"); } if (this.errors.Count > 0) { return false; } return true; }
public async Task<object> InAppPurchase([FromBody] APIInAppPurchaseModel model) { var request = HttpContext.Current.Request; GoPlayApi api = GoPlayApi.Instance; string gameUid = model.game_id; Game game = api.GetGame(gameUid).Data; string session = !string.IsNullOrEmpty(model.session) ? UrlHelperExtensions.GetSession(model.session) : request.Params["session"]; customer_account user = api.LoadFromAccessToken(session).Data; int quantity = model.quantity > 0 ? model.quantity : model.amount; string order_id = model.order_id; string exchangeOptionType = model.exchange_option_type; int exchangeOptionID = model.exchange_option_id; string exchangeOptionIdentifier = model.exchange_option_identifier; ErrorCodes? error = null; dynamic exchangeOption = new ExpandoObject(); BaseExchangeHandlerInterface hander = null; if (game == null) error = ErrorCodes.INVALID_GAME_ID; else if (user == null) error = ErrorCodes.INVALID_SESSION; else if (quantity == 0 || (string.IsNullOrEmpty(exchangeOptionIdentifier) && (exchangeOptionID == 0 || string.IsNullOrEmpty(order_id)) )) error = ErrorCodes.MISSING_FIELDS; else { RBAC rbac = new RBAC(user.id); bool? isActive = true; if (!rbac.HasRole(GoPlayConstantValues.S_ROLE_GAME_ADMIN) && !rbac.HasRole(GoPlayConstantValues.S_ROLE_ADMIN)) { isActive = null; } if (exchangeOptionID > 0 && !string.IsNullOrEmpty(order_id)) { exchangeOption = BaseExchangeHandler.retrieveExchangeOption(exchangeOptionType, exchangeOptionID, isActive); } else if (!string.IsNullOrEmpty(exchangeOptionIdentifier)) { exchangeOption = BaseExchangeHandler.retrieveExchangeOptionByStrIdentifier(exchangeOptionIdentifier, isActive); } hander = BaseExchangeHandler.retrieveExchangeHandler(user, game, exchangeOption, quantity, IPAddress.Parse(WebApiIpHelper.GetClientIp(Request))); var errorDict = new Dictionary<string, ErrorCodes>() { }; if (!hander.validate()) { var errors = hander.getErrors(); error = EnumEx.GetValueFromDescription<ErrorCodes>(errors[errors.Keys.First()].First()); } else if (!await hander.exchange()) { var errors = hander.getErrors(); error = EnumEx.GetValueFromDescription<ErrorCodes>(errors[errors.Keys.First()].First()); } } api.LogApi("1", request.Url.LocalPath, error == null, request.UserAgent != null ? request.UserAgent.ToString() : string.Empty, game == null ? 0 : game.id, user == null ? 0 : user.id, request.UserHostAddress, error.ToErrorCode(), request.Params.ToString()); if (error != null) return Json(new { success = false, message = error.ToErrorMessage(), error_code = error.ToErrorCode() }); return Json(new { success = true, transaction_id = new string[] { hander.getCoinTransaction().order_id }, exchange = TransactionHelper.toDictionary(hander.getCoinTransaction()) }); }
public bool ExchangeHandlerValidation(dynamic exchangeOption, out List<Tuple<string, string>> result, Game game, customer_account user) { result = new List<Tuple<string, string>>(); if (exchangeOption == null) { result.Add(Tuple.Create<string, string>("exchange_option_id", "Exchange Option has been removed")); return false; } if (exchangeOption.is_archived) { result.Add(Tuple.Create<string, string>("exchange_option_id", "Exchange Option has been removed")); } if (exchangeOption.game != game.id) { result.Add(Tuple.Create<string, string>("exchange_option_id", "Exchange Option does not belong to game")); } RBAC rbac = new RBAC(CurrentUser.Id); if (!rbac.HasRole(GoPlayConstantValues.S_ROLE_GAME_ADMIN) && !rbac.HasRole(GoPlayConstantValues.S_ROLE_ADMIN)) { if (!game.is_active || game.is_archived) { result.Add(Tuple.Create<string, string>("exchange_option_id", "Exchange Option has been removed")); } } int in_game_amount = 0; bool isParse = Int32.TryParse(exchangeOption.inGameAmount, out in_game_amount); if (!isParse) { result.Add(Tuple.Create<string, string>("exchange_option_id", "Exchange amount needs to be a positive integer")); } if (in_game_amount == 0) { result.Add(Tuple.Create<string, string>("exchange_option_id", "Exchange amount is required")); } if (!result.Any()) { decimal freePlayToken = 0; decimal playToken = 0; GoPlayApi.Instance.Calculate(exchangeOption, out freePlayToken, out playToken, user, in_game_amount); if (playToken == 0 && freePlayToken == 0) result.Add(Tuple.Create<string, string>("exchange_option_id", "Insufficient Balance")); else return true; } return false; }
public object UpdateExternalExchange() { var request = HttpContext.Current.Request; GoPlayApi api = GoPlayApi.Instance; string gameUid = request.Params["game_id"]; Game game = api.GetGame(gameUid).Data; //string session = request.Params["session"]; string session = !string.IsNullOrEmpty(request.Form["session"]) ? UrlHelperExtensions.GetSession(request.Form["session"]) : request.Params["session"]; customer_account user = api.LoadFromAccessToken(session).Data; string identifier = request.Params["exchange_option_identifier"] == null ? string.Empty : request.Params["exchange_option_identifier"]; string transactionId = request.Params["transaction_id"]; ErrorCodes? error = null; if (game == null) error = ErrorCodes.INVALID_GAME_ID; else if (user == null) error = ErrorCodes.INVALID_SESSION; else { RBAC rbac = new RBAC(user.id); bool? isActive = true; //# To allow admin account to test exchange option without showing it to everyone if (rbac.HasRole(GoPlayConstantValues.S_ROLE_GAME_ADMIN) || rbac.HasRole(GoPlayConstantValues.S_ROLE_ADMIN)) isActive = null; Tuple<string, int> tuple = api.GetExchangeOption(identifier, isActive, false); if (tuple == null) error = ErrorCodes.INVALID_EXCHANGE_OPTION; else { var lstExternalExchange = api.GetExternalExchanges(user.id, game.id, null, transactionId); if (lstExternalExchange != null && lstExternalExchange.Any()) error = ErrorCodes.EXCHANGE_RECORDED; else { var externalExchange = new external_exchange { customer_account_id = user.id, game_id = game.id, exchange_option_identifier = identifier, transaction_id = transactionId }; if (string.Compare(tuple.Item1, GoPlayConstantValues.S_CREDIT_TYPE, StringComparison.OrdinalIgnoreCase) == 0) externalExchange.credit_type_id = tuple.Item2; else if (string.Compare(tuple.Item1, GoPlayConstantValues.S_PACKAGE, StringComparison.OrdinalIgnoreCase) == 0) externalExchange.package_id = tuple.Item2; if (!api.CreateExternalExchange(externalExchange)) error = ErrorCodes.ServerError; } } } api.LogApi("1", request.Url.LocalPath, error == null, request.UserAgent != null ? request.UserAgent.ToString() : string.Empty, game == null ? 0 : game.id, user == null ? 0 : user.id, request.UserHostAddress, error.ToErrorCode(), request.Params.ToString()); if (error == null) return Json(new { success = true }); return Json(new { success = false, message = error.ToErrorMessage(), error_code = error.ToErrorCode() }); }