public void EnsureAccount(AccountData account, PrivilegeConfig usage, int operation, int karma, string message, string ip)
        {
            if (account == null)
            {
                throw new InvalidOperationException("Account Not Found");
            }

            if (!usage.IsSatisfied(account.PrivilegeLevelNavigation))
            {
                throw new InvalidOperationException("Account Insufficient Privilege");
            }

            if (account.PrivilegeLevel == GlobalConfig.ACCOUNT_BLOCKED_LEVEL)
            {
                throw new InvalidOperationException("Account Blacklisted");
            }

            if (account.HasSuspended() && account.SuspendUntil >= _time.UtcNow)
            {
                throw new InvalidOperationException("Account Suspended");
            }

            if (!account.PrivilegeLevelNavigation.IgnoreKarma && karma != 0)
            {
                var before = account.Karma;
                var after  = account.Karma + karma;

                if (after < 0 && GlobalConfig.USER_ENABLE_KARMA)
                {
                    throw new InvalidOperationException("Account Insufficient Karma");
                }

                account.Karma = after;

                _context.AccountData.Update(account);

                _context.KarmaLog.Add(new KarmaLog
                {
                    ReportTime = _time.UtcNow,
                    AccountId  = account.AccountId,
                    Reason     = operation,
                    Before     = before,
                    After      = after
                });
            }

            _context.AccountLog.Add(new AccountLog
            {
                ReportTime = _time.UtcNow,
                AccountId  = account.AccountId,
                Message    = operation,
                Detail     = message,
                IpAddress  = ip
            });

            _context.SaveChanges();
        }
Example #2
0
 public static bool IsSatisfied(this PrivilegeConfig requirement, PrivilegeConfig enforcement)
 {
     return(((requirement.AccessData & enforcement.AccessData) == requirement.AccessData) &&
            ((requirement.Login & enforcement.Login) == requirement.Login) &&
            ((requirement.IgnoreKarma & enforcement.IgnoreKarma) == requirement.IgnoreKarma) &&
            ((requirement.AccessStatics & enforcement.AccessStatics) == requirement.AccessStatics) &&
            ((requirement.Debug & enforcement.Debug) == requirement.Debug) &&
            ((requirement.BatchRead & enforcement.BatchRead) == requirement.BatchRead) &&
            ((requirement.BatchWrite & enforcement.BatchWrite) == requirement.BatchWrite) &&
            ((requirement.AccountOperation & enforcement.AccountOperation) == requirement.AccountOperation) &&
            ((requirement.ReleaseUpdate & enforcement.ReleaseUpdate) == requirement.ReleaseUpdate) &&
            ((requirement.DeleteRecord & enforcement.DeleteRecord) == requirement.DeleteRecord) &&
            ((requirement.AccountManagement & enforcement.AccountManagement) == requirement.AccountManagement));
 }
Example #3
0
 public AccountController(IHttpContextAccessor accessor, ITimeService time, MilvanethDbContext context, IAuthentication auth, IPowService pow, ISrp6Service srp, IApiKeySignService api, ITokenSignService token, IVerifyMailService mail, IRepository repo)
 {
     _accessor      = accessor;
     _time          = time;
     _context       = context;
     _auth          = auth;
     _pow           = pow;
     _srp           = srp;
     _api           = api;
     _token         = token;
     _mail          = mail;
     _repo          = repo;
     _userPrivilege = _context.PrivilegeConfig.Single(x => x.Name == "User");
     _changeToken   = _context.KeyUsage.Single(x => x.Name == "Password Change Token");
 }
Example #4
0
        public static void Register(HttpConfiguration config)
        {
            // Configuration et services API Web
            // Itinéraires de l'API Web

            config.MapHttpAttributeRoutes();

            UtilisateurConfig.addRoutes(config);
            PrivilegeConfig.addRoutes(config);
            PrivilegeUtilisateurConfig.addRoutes(config);
            CompteConfig.addRoutes(config);
            TransactionConfig.addRoutes(config);
            TransactionPeriodiqueConfig.addRoutes(config);
            TransfertConfig.addRoutes(config);
            CategorieConfig.addRoutes(config);
            PorteFeuilleConfig.addRoutes(config);
        }