public HttpResponseMessage Authenticate([FromBody] SystemUser user)
        {
            if (user == null)
            {
                var ex = new ArgumentNullException("user");
                return Request.CreateResponse(HttpStatusCode.InternalServerError, ex);
            }

            if ((user = SystemUser.Authenticate(user.Username, user.Password)) != null)
            {
                var authUser = new SystemUser
                {
                    Id = user.Id,
                    Username = user.Username,
                };
                authUser.GenerateAuthToken();
                ApplicationContext.AddAuthenticatedUser(authUser);

                return Request.CreateResponse(HttpStatusCode.OK, authUser);
            }
            else
            {
                return Request.CreateResponse(HttpStatusCode.Forbidden);
            }
        }
        public static async Task<SystemUser> Insert(SystemUser data)
        {
            var ctx = ModelContext.GetInstance();
                        
            ctx.systemUsers.Add(toRaw(data));

            await ctx.SaveChangesAsync();

            return (SystemUser)ctx.systemUsers.OrderByDescending(x => x.id).FirstOrDefault();
        }
        public static async Task<SystemUser> Update(SystemUser data)
        {
            var ctx = ModelContext.GetNewInstance();

            var raw = toRaw(data);
            ctx.systemUsers.Attach(raw);
            System.Data.Entity.Infrastructure.DbEntityEntry<Database.systemUser> entry = ctx.Entry(raw);
            entry.State = System.Data.Entity.EntityState.Modified;
            
            await ctx.SaveChangesAsync();
                        
            return Get((int)data.Id);
        }
        public static Database.systemUser toRaw(SystemUser data)
        {
            var raw = new Database.systemUser()
            {
                username = data.Username,
                password = data.Password,
                email = data.Email
            };

            if (data.Id != null)
            {
                raw.id = (int)data.Id;
            }

            return raw;
        }
 public static bool AddAuthenticatedUser(SystemUser user)
 {
     return LoggedUsersDic.TryAdd(user.AuthToken, user);
 }