Beispiel #1
0
        public Identity(IEnumerable<Claim> claims, User user, Session session)
        {
            User = user;
            Session = session;

            Claims = claims.Select(c => c.Name).ToArray();
        }
Beispiel #2
0
        public Session(User user)
        {
            UserId = user.Id;

            using (RandomNumberGenerator rng = new RNGCryptoServiceProvider())
            {
                byte[] tokenData = new byte[32];
                rng.GetBytes(tokenData);
                SessionKey = BitConverter.ToString(tokenData).Replace("-", "");
            }
        }
Beispiel #3
0
        /// <summary>
        /// Set to true to recreate the database (losing all data)
        /// </summary>
        /// <param name="clean"></param>
        /// <param name="connectionString"></param>
        public Database(bool clean = false, string connectionString = null)
        {
            _connectionFactory = new OrmLiteConnectionFactory(connectionString, SqliteDialect.Provider);
            using (var db = _connectionFactory.Open())
            {
                var models = new[]
                {
                    typeof(Device),
                    typeof(Sensor),
                    typeof(StringReading),
                    typeof(DecimalReading),
                    typeof(BlobReading),

                    typeof(User),
                    typeof(Session),
                    typeof(Claim),
                };

                if (clean)
                {
                    foreach (var model in models)
                        db.CreateTable(true, model);

                    using (var transaction = db.OpenTransaction())
                    {
                        //Create admin user with null password
                        var admin = new User(DEFAULT_ADMINISTRATOR_USERNAME, DEFAULT_ADMINISTRATOR_PASSWORD);
                        db.Save(admin);

                        //Create some sensible claims for an admin user
                        string[] claims = {
                            "superuser"
                        };
                        foreach (var claim in claims)
                            db.Save(new Claim(admin, claim));

                        transaction.Commit();
                    }
                }
                else
                {
                    foreach (var model in models)
                        db.CreateTableIfNotExists(model);
                }
            }
        }
Beispiel #4
0
        private Task<dynamic> CreateUser(dynamic parameters, CancellationToken ct)
        {
            return Task<dynamic>.Factory.StartNew(() =>
            {
                this.RequiresAuthentication();
                this.RequiresAnyClaim(new[] { "superuser", "create-user" });

                var userName = (string)Request.Query.UserName ?? (string)Request.Form.UserName;
                var password = (string)Request.Query.Password ?? (string)Request.Form.Password;

                using (var transaction = _connection.OpenTransaction())
                {
                    //Find the user with the given name (and correct password)
                    var user = _connection.Select<User>(a => a.Username == userName).SingleOrDefault();
                    if (user != null)
                    {
                        return Negotiate
                            .WithModel(new { Error = "User With This Username Already Exists" })
                            .WithStatusCode(HttpStatusCode.Conflict);
                    }

                    //Create a new user
                    user = new User(userName, password);

                    _connection.Save(user);

                    // HACK: TEMP ADDING SUPERUSER CLAIM
                    _connection.Save(new Claim(user, "superuser"));

                    //Save any changes made
                    transaction.Commit();

                    //Return the user
                    return SerializeUser(user);
                }
            }, ct);
        }
Beispiel #5
0
 public Claim(User user, string claimName)
 {
     UserId = user.Id;
     Name = claimName;
 }
Beispiel #6
0
 private object SerializeUser(User user)
 {
     return new
     {
         Username = user.Username,
         Claims = ModuleHelpers.CreateUrl(Request, ClaimsModule.PATH.Replace("{username}", Uri.EscapeUriString(user.Username)))
     };
 }
Beispiel #7
0
 public static IEnumerable<Claim> GetClaims(User user, IDbConnection connection)
 {
     return connection.Select<Claim>(c => c.UserId == user.Id);
 }