public async override Task AuthorizeEndpoint(OAuthAuthorizeEndpointContext context) { var formData = await context.Request.ReadFormAsync(); if (!formData.Any()) { context.Response.RenderEmbeddedResource("WispCloud.Templates.Files.OAuth2AuthorizationForm.html"); context.RequestCompleted(); return; } var login = formData["login"]; var password = formData["password"]; var user = context.GetWispContext().Data.Accounts.FirstOrDefault(x => x.Login == login && x.Active); Try.Condition(user != null && user.ComparePasword(password), "The user name or password is incorrect;"); var authentication = context.OwinContext.Authentication; authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie); authentication.SignIn(GetBearerIdentity(user)); context.RequestCompleted(); return; }
public Account CheckForAccessOverSlave(Account slaveAccount, AccountAccessRoles role) { //Admin can do anything if (UserContext.CurrentUser.Role == AccountRole.Admin) { return(slaveAccount); } //Master can read anything if (UserContext.CurrentUser.Role == AccountRole.Master && role == AccountAccessRoles.Read) { return(slaveAccount); } //You have all access rights for yourself if (UserContext.CurrentUser.Login == slaveAccount.Login) { return(slaveAccount); } var accessLevel = GetCurrentAccountAccess(slaveAccount.Login); Try.Condition(accessLevel != null && accessLevel.Role >= role, NotEnoughPrivilegeText); return(slaveAccount); }
public DateTime LastCycleDate() { Try.Condition(Constants.ContainsKey("LastCycle"), $"Не найдено значение константы LastCycle"); var secValue = Constants["LastCycle"].Value; return(new DateTime(2017, 1, 1, 3, 0, 0).AddSeconds(secValue)); }
public Loyalty NewLoyalty(Loyalty data) { _rightsManager.CheckRole(AccountRole.Admin); var loyalAcc = UserContext.Accounts.GetOrFail(data.LoyalName);//_userManager.FindById(data.LoyalName); Try.Condition(loyalAcc.Role.IsCompany(), $"{loyalAcc.Login} не является компанией"); var check = UserContext.Data.Loyalties.Where(x => x.LoyalName == loyalAcc.Login && x.Insurance == data.Insurance); Try.Condition(!check.Any(), $"Компания уже обслуживает данную страховку"); Try.Condition(data.MinLevel < 4 && data.MinLevel > 0, $"Значения MinLevel разрешены в диапазоне [1:3]"); var loyalty = new Loyalty(loyalAcc, data.Insurance); loyalty.MinLevel = data.MinLevel; UserContext.Data.Loyalties.Add(loyalty); UserContext.Data.SaveChanges(); var issuerAcc = GetIssuerFromType(data.Insurance); UserContext.AddGameEvent(issuerAcc.Login, GameEventType.Insurance, $"Вашу страховку теперь обслуживает {loyalAcc.DisplayName}", true); UserContext.AddGameEvent(loyalAcc.Login, GameEventType.Insurance, $"Вы начали обслуживать страховку {loyalty.Insurance}", true); return(loyalty); }
public Account Registration(RegistrationClientData clientData) { _rightsManager.CheckRole(AccountRole.Admin); var existing = Get(clientData.Login); if (clientData.Status != AccountStatus.Blocked) { clientData.Status = AccountStatus.Active; } if (existing != null) { return(SetAccountProperties(clientData)); } var newUser = new Account(clientData.Login, AccountRole.Person); var result = _userManager.Create(newUser, clientData.Password); Try.Condition(result.Succeeded, $"Не удалось создать счет {clientData.Login}, {result.Errors.FirstOrDefault()}"); UserContext.Data.SaveChanges(); UserContext.AddGameEvent(clientData.Login, GameEventType.None, $"Аккаунт создан"); return(SetAccountProperties(clientData)); }
public void CheckRoleInInstallation(long installationID, InInstallationRoles role) { CheckUser(); CheckInstallationExistsAndActive(installationID); var installationAcces = GetInstallationAcces(installationID); Try.Condition(installationAcces != null && (role & installationAcces.Role) > 0, NotEnoughRightsMessageText); }
public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context) { Uri uri; Try.Condition(Uri.TryCreate(context.RedirectUri, UriKind.Absolute, out uri), "Bad redirect uri;"); context.Validated(); return(Task.FromResult(0)); }
public override void Validate() { Try.NotEmpty(Seller, $"Поле {nameof(Seller)} не должно быть пустым"); Try.NotEmpty(Receiver, $"Поле {nameof(Receiver)} не должно быть пустым"); Try.NotEmpty(ReceiverPass, $"Поле {nameof(ReceiverPass)} не должно быть пустым"); Try.Condition(Price >= 0, $"Сумма покупки должна быть неотрицательной"); Try.Condition(Index >= 0, $"Сумма покупки должна быть неотрицательной"); }
//public UserSettings Settings { get; set; } public override void Validate() { Try.NotEmpty(Login, "Пустое поле Login"); //Try.NotEmpty(Password, "Пустое поле Password"); Try.Condition(Cash == null || Cash >= 0, "Поле Cash должно быть неотрицательным"); Try.Condition(SalaryLevel == null || SalaryLevel >= 0, "Поле SalaryLevel должно быть неотрицательным"); Try.Condition(SalaryLevel == null || SalaryLevel <= 3, "Поле SalaryLevel должно быть в диапазоне 0 -3"); Try.Condition(InsuranceLevel == null || InsuranceLevel >= 0, "Поле InsuranceLevel должно быть неотрицательным"); }
public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) { Try.Condition(!string.IsNullOrEmpty(context.UserName) && !string.IsNullOrEmpty(context.Password), "The user name or password is incorrect;"); var user = context.GetWispContext().Data.Accounts.FirstOrDefault(x => x.Login == context.UserName && x.Active); Try.Condition(user != null && user.ComparePasword(context.Password), "The user name or password is incorrect;"); context.Validated(GetBearerIdentity(user)); return(Task.FromResult(0)); }
public void DeleteConstant(string name) { UserContext.Rights.CheckRole(AccountRole.Admin); Try.Condition(Constants.ContainsKey(name), $"Не найдена константа: {name}."); Constants.Remove(name); var c = UserContext.Data.Constants.First(x => x.Name == name); UserContext.Data.Constants.Remove(c); UserContext.Data.SaveChanges(); }
public void RemoveInsuranceHolder(string user) { var userAccount = UserContext.Accounts.GetOrFail(user); Try.Condition(userAccount.Insurance != InsuranceType.None, $"У пользователя {user} нет страховки"); var corpAccount = GetIssuerFromType(userAccount.Insurance); _rightsManager.CheckForAccessOverSlave(corpAccount, AccountAccessRoles.Withdraw); RemoveInsuranceHolder_Checked(userAccount, corpAccount); }
public void Implant(ImplantClientData data) { var receiverAcc = UserContext.Accounts.GetOrFail(data.Receiver, data.ReceiverPass); var sellerAcc = UserContext.Accounts.GetOrFail(data.Seller); var parentAcc = UserContext.Accounts.Get(sellerAcc.ParentID) ?? sellerAcc; _rightsManager.CheckForAccessOverSlave(sellerAcc, AccountAccessRoles.Withdraw); Try.Condition(parentAcc.Role.IsCompany(), $"Продавать импланты может только компания"); Try.Condition(receiverAcc.Role == AccountRole.Person, $"Получать импланты может только персона"); int indexCost = data.Index; if (receiverAcc.Insurance == InsuranceType.SuperVip || parentAcc == UserContext.Insurances.GetIssuerFromType(receiverAcc.Insurance)) { var discount = UserContext.Constants.GetDiscount(receiverAcc.EffectiveLevel); indexCost = (int)Math.Ceiling(indexCost * (1 - discount)); } Try.Condition(parentAcc.Index >= indexCost, $"Недостаточно индекса"); data.Description = ParseImplantDescription(data.Description, indexCost > 0); var tdata = new TransferClientData(receiverAcc.Login, sellerAcc.Login, data.Price) { Description = data.Description }; var trList = P2BTransfer(receiverAcc, sellerAcc, tdata); using (var dbTransact = UserContext.Data.Database.BeginTransaction()) { UserContext.Data.BeginFastSave(); trList.ForEach(TransactiontoDb); parentAcc.Index -= indexCost; dbTransact.Commit(); } if (indexCost > 0) { if (parentAcc != sellerAcc) { UserContext.AddGameEvent(parentAcc.Login, GameEventType.Index, $"Имплант за {indexCost} индекса установлен магазином {sellerAcc.Fullname}", true); } UserContext.AddGameEvent(sellerAcc.Login, GameEventType.Index, $"Имплант за {indexCost} индекса установлен {receiverAcc.Fullname}", true); UserContext.AddGameEvent(receiverAcc.Login, GameEventType.Index, $"Получен имплант от {sellerAcc.Fullname}", true); } }
//Транзакции между юолицами и прочие, особых правил нет private List <Transaction> B2BTransfer(Account sender, Account receiver, TransferClientData data) { Try.Condition(sender.Cash >= data.Amount, $"Недостаточно средств"); var transaction = new Transaction(sender, receiver, data.Amount); transaction.Comment = data.Description; var ret = new List <Transaction> { transaction }; return(ret); }
private void SetInsuranceHolder_Checked(Account userAccount, int level, InsuranceType t, bool isStolen = false) { Try.Condition((userAccount.Role & AccountRole.Person) > 0, $"Только персоны могут быть держателями страховки"); var oldIssuer = GetIssuerFromType(userAccount.Insurance); var newIssuer = GetIssuerFromType(t); if (!isStolen) { var price = (int)UserContext.Constants.GetInsuranceCost(t, level); var priceOld = (int)UserContext.Constants.GetInsuranceCost(t, userAccount.InsuranceLevel); if (userAccount.Insurance == t) { price = Math.Max(0, price - priceOld); } Try.Condition(newIssuer.InsurancePoints >= price, $"Не хватает очков страховки"); newIssuer.InsurancePoints -= price; UserContext.Accounts.Update(newIssuer); var txtverb = userAccount.Insurance == t ? "изменение" : "выдачу"; UserContext.AddGameEvent(newIssuer.Login, GameEventType.Index, $"Потрачено {price} очков на {txtverb} страховки {userAccount.DisplayName}", true); } //Отменить старую страховку, если была if (oldIssuer != null && userAccount.Insurance != t) { UserContext.AddGameEvent(oldIssuer.Login, GameEventType.Insurance, $"{userAccount.DisplayName} отказался от вашей страховки", true); UserContext.AddGameEvent(userAccount.Login, GameEventType.Insurance, $"Вы отказались от страховки {t}", true); } userAccount.Insurance = t; userAccount.InsuranceLevel = level; UserContext.Accounts.Update(userAccount); //if(!isStolen) // UserContext.AddGameEvent(newIssuer.Login, GameEventType.Insurance, // $"Выдана страховка {userAccount.DisplayName}" + // $"уровня {userAccount.InsuranceLevel}"); UserContext.AddGameEvent(userAccount.Login, GameEventType.Insurance, $"Выдана страховка {userAccount.Insurance} " + $"уровня {userAccount.InsuranceLevel}", true); UpdateInsuranceInAlice(userAccount); }
public void SetInsuranceHolder(SetInsuranceClientData data) { var companyAcc = _rightsManager.CheckForAccessOverSlave(data.Company, AccountAccessRoles.Withdraw); var userAccount = UserContext.Accounts.GetOrFail(data.Holder, data.Password); Try.Condition(_associations.ContainsKey(companyAcc.Login), $"{companyAcc.Login} не выпускает страховки"); var t = _associations[companyAcc.Login]; var level = data.Level ?? 0; //t.SetLevel() Try.Condition(CheckInsuranceLevel(level, t), $"Неверный уровень страховки {level}"); SetInsuranceHolder_Checked(userAccount, level, t); }
public List <Transaction> GetHistory(string login, int take, int skip) { var user = UserContext.Accounts.GetOrFail(login); Try.Condition(skip >= 0, $"Поле {nameof(skip)} не должно быть отрицательным"); Try.Condition(take >= 0, $"Поле {nameof(take)} не должно быть отрицательным"); _rightsManager.CheckForAccessOverSlave(user, AccountAccessRoles.Read); var ret = UserContext.Data.Transactions .Where(x => x.Receiver == user.Login || x.Sender == user.Login) .OrderByDescending(x => x.Time).Skip(skip).Take(take).ToList(); ret.ForEach(x => { x.HideIfRequired(); }); return(ret.ToList()); }
public Account CutAccountIndex(string login, int index) { CheckRole(AccountRole.Master); var editAccount = UserContext.Accounts.GetOrFail(login); Try.Condition(editAccount.Index >= index, "Недостаточно индекса"); editAccount.Index -= index; UserContext.Accounts.Update(editAccount); UserContext.AddGameEvent(editAccount.Login, GameEventType.Index, $"Списано {index} индекса"); return(editAccount); }
public Constant NewConstant(string text, string name, float value) { UserContext.Rights.CheckRole(AccountRole.Admin); Try.Condition(!Constants.ContainsKey(name), $"Эта константа уже существует: {name}."); var c = new Constant { Description = text, Value = value, Name = name }; Constants.Add(name, c); UserContext.Data.Constants.Add(c); UserContext.Data.SaveChanges(); return(c); }
public void StealInsurance(StealInsuranceClientData data) { _rightsManager.CheckRole(AccountRole.Admin); var loserAccount = UserContext.Accounts.GetOrFail(data.Loser); var receiverAccount = UserContext.Accounts.GetOrFail(data.Receiver); Try.Condition(receiverAccount.EffectiveLevel <= loserAccount.EffectiveLevel, "Ваша страховка лучше, чем у жертвы"); Try.Condition(loserAccount.Insurance != InsuranceType.None, $"У пользователя {loserAccount.Login} нет страховки"); receiverAccount.InsuranceHidden = true; SetInsuranceHolder_Checked(receiverAccount, loserAccount.InsuranceLevel, loserAccount.Insurance, true); RemoveInsuranceHolder(loserAccount.Login); }
public float Transfer(TransferClientData data) { var receiverAcc = UserContext.Accounts.GetOrFail(data.Receiver, true); //Разрешен Alias var senderAcc = UserContext.Accounts.GetOrFail(data.Sender); Try.Condition(receiverAcc.Login != senderAcc.Login, "Нельзя переводить самому себе"); _rightsManager.CheckForAccessOverSlave(senderAcc, AccountAccessRoles.Withdraw); data.Description = data.Description ?? ""; var trList = new List <Transaction>(); //Разные виды налогообложения if (receiverAcc.Role == AccountRole.Person && senderAcc.Role == AccountRole.Person) { trList = P2PTransfer(senderAcc, receiverAcc, data); } else if (receiverAcc.Role.IsCompany() && senderAcc.Role == AccountRole.Person) { trList = P2BTransfer(senderAcc, receiverAcc, data); } else { trList = B2BTransfer(senderAcc, receiverAcc, data); } //Анонимные транзакции if (data.Receiver.ToLower() == receiverAcc.Alias.ToLower() && receiverAcc.Role == AccountRole.Person) { trList.ForEach(x => { if (x.ReceiverAccount.Login == receiverAcc.Login) { x.Type |= TransactionType.Anonymous; } }); } using (var dbTransact = UserContext.Data.Database.BeginTransaction()) { UserContext.Data.BeginFastSave(); trList.ForEach(TransactiontoDb); dbTransact.Commit(); } return(senderAcc.Cash); }
public Constant EditConstant(ConstantClientData data) { UserContext.Rights.CheckRole(AccountRole.Admin); Try.Condition(Constants.ContainsKey(data.Name), $"Не найдена константа: {data.Name}."); var c = Constants[data.Name]; if (!String.IsNullOrEmpty(data.Description)) { c.Description = data.Description; } c.Value = data.Value; var dbconst = UserContext.Data.Constants.Find(data.Name); dbconst.Description = c.Description; dbconst.Value = c.Value; UserContext.Data.SaveChanges(); return(c); }
//Транзакции между физлицами //Налог платит отправитель в зависимости от разницы страховок private List <Transaction> P2PTransfer(Account sender, Account receiver, TransferClientData data) { Try.Condition(sender.Cash >= data.Amount, $"Недостаточно средств"); var ret = new List <Transaction>(); var tax = GetP2pTax(sender, receiver); if (tax > 0) { var master = UserContext.Accounts.GetOrFail("admin"); var t = new Transaction(sender, master, data.Amount * tax); t.Comment = $"Налог на транзакции физлиц в размере {tax * 100}%"; t.Type = TransactionType.Tax; ret.Add(t); } var transaction = new Transaction(sender, receiver, data.Amount * (1 - tax)); transaction.Comment = data.Description; ret.Add(transaction); return(ret); }
void SetGroupProperties(List <Group> allGroups, List <PowerBar> allPowerBars, Group editedGroup, GroupClientData clientData) { if (clientData.Name != null) { editedGroup.Name = clientData.Name; } if (clientData.ShortName != null) { editedGroup.ShortName = clientData.ShortName; } if (editedGroup.IsMainGroupInInstallation) { Try.Condition(!clientData.ParentGroupID.HasValue, $"Cant set {nameof(clientData.ParentGroupID)} for main group;"); Try.Condition(clientData.GroupIDs == null, $"Cant set {nameof(clientData.GroupIDs)} for main group;"); Try.Condition(clientData.PowerBarSNs == null, $"Cant set {nameof(clientData.PowerBarSNs)} for main group;"); } else { if (clientData.ParentGroupID.HasValue) { var mainGroup = allGroups.FirstOrDefault(x => x.IsMainGroupInInstallation); Try.NotNull(mainGroup, "Main group not found;", false); editedGroup.ParentGroupID = (clientData.ParentGroupID.Value == 0 || clientData.ParentGroupID.Value == mainGroup.GroupID) ? null : clientData.ParentGroupID; } if (clientData.GroupIDs != null) { SetGroups(allGroups, editedGroup, clientData.GroupIDs); } if (clientData.PowerBarSNs != null) { SetPowerBars(allPowerBars, editedGroup, clientData.PowerBarSNs); } } }
public List <InsuranceHolderServerData> GetInsuranceHolders(string login) { var ret = new List <InsuranceHolderServerData>(); var acc = _rightsManager.CheckForAccessOverSlave(login, AccountAccessRoles.Read); Try.Condition(_associations.ContainsKey(acc.Login), $"{acc.Login} не выпускает страховки"); var t = _associations[acc.Login]; var list = UserContext.Data.Accounts.Where(x => x.Insurance == t); foreach (var user in list.Where(x => !x.InsuranceHidden)) { var h = new InsuranceHolderServerData(user.Login, acc.Login) { InsuranceLevel = user.InsuranceLevel, Insurance = t, UserFullname = user.Fullname ?? "" }; ret.Add(h); } return(ret.OrderBy(x => x.UserFullname).ToList()); }
//Транзакции юрлицам, налог платит получатель //Работают страховки private List <Transaction> P2BTransfer(Account sender, Account receiver, TransferClientData data) { var ret = new List <Transaction>(); var level = _insuranceManager.CheckInsuranceGrade(sender, receiver); var discount = _constantManager.GetDiscount(level); Try.Condition(sender.Cash >= data.Amount * (1 - discount), $"Недостаточно средств"); if (discount == 0) { var master = UserContext.Accounts.GetOrFail("admin"); var t = new Transaction(receiver, master, data.Amount * 0.5f); t.Comment = $"Налог на доходные предприятия в размере 50%"; t.Type = TransactionType.Tax; ret.Add(t); } var transaction = new Transaction(sender, receiver, data.Amount * (1 - discount)); transaction.Comment = data.Description + $" номинал {data.Amount} скидка {discount * 100}%"; ret.Add(transaction); return(ret); }
public void ChangePassword(ChangePasswordClientData clientData) { var account = GetOrFail(clientData.Login); IdentityResult result; if (account.Login != UserContext.CurrentUser.Login) { //Only Administrators can change user account password _rightsManager.CheckRole(AccountRole.Admin); result = _userManager.NewPassword(account.Login, clientData.NewPassword); } else { result = _userManager.ChangePassword(account.Login, clientData.CurrentPassword, clientData.NewPassword); } Try.Condition(result.Succeeded, $"Ошибка обновления персонажа: {result.Errors.FirstOrDefault()}"); UserContext.AddGameEvent(account.Login, GameEventType.None, $"Изменен пароль"); }
public void Update(Account account) { var result = _userManager.Update(account); Try.Condition(result.Succeeded, $"Ошибка обновления персонажа: {result.Errors.FirstOrDefault()}"); }
string GetLogin(HubCallerContext context) { Try.Condition(context.User.Identity.IsAuthenticated, HttpStatusCode.Unauthorized); return(context.User.Identity.Name); }
public override void Validate() { Try.NotEmpty(Sender, $"Поле {nameof(Sender)} не должно быть пустым"); Try.NotEmpty(Receiver, $"Поле {nameof(Receiver)} не должно быть пустым"); Try.Condition(Amount >= 1, $"Сумма транзакции должна быть не менее 1 кр"); }