Ejemplo n.º 1
0
 public static void UpateModel(ref UsersDataStore target, UserNewRequest source)
 {
     target.CompanyId     = source.CompanyId;
     target.Email         = source.Email;
     target.FirebaseToken = source.FirebaseToken;
     target.Password      = source.Password;
     target.Username      = source.Username;
     target.Role          = source.Role;
 }
Ejemplo n.º 2
0
        public static UsersDataStore ToModel(this UserNewRequest source)
        {
            var target = new UsersDataStore();

            target.CompanyId     = source.CompanyId;
            target.Email         = source.Email;
            target.FirebaseToken = source.FirebaseToken;
            target.Password      = EncryptionUtil.Encrypt(source.Password);
            target.Username      = source.Username;
            target.Role          = source.Role;
            return(target);
        }
Ejemplo n.º 3
0
        public virtual Task <int> RegisterUserAsync(UserNewRequest source)
        {
            var targetRecord = GetUserByName(source.Username);

            if (targetRecord == null)
            {
                this._thermoDataContext.Users.Add(source.ToModel());
                return(this._thermoDataContext.SaveChangesAsync());
            }
            else
            {
                return(Task.FromResult(-1));
            }
        }
Ejemplo n.º 4
0
        public async Task <IActionResult> Register([FromBody] UserNewRequest model)
        {
            try
            {
                var result = await _personDataService.RegisterUserAsync(model);

                if (result > 0)
                {
                    return(Ok(result));
                }
            }
            catch (Exception ex)
            {
                return(BadRequest(new { message = ex.Message }));
            }

            return(BadRequest());
        }
Ejemplo n.º 5
0
 public ActionResult NewUserRequest(UserNewRequest model)
 {
     try
     {
         if (ModelState.IsValid)
         {
             ViewBag.Area = new SelectList(context.Area, "AreaId", "AreaName");
             context.UserNewRequest.Add(model);
             context.SaveChanges();
             return(RedirectToAction("Index", "Home"));
         }
         else
         {
             ViewBag.Area = new SelectList(context.Area, "AreaId", "AreaName");
             return(View());
         }
     }
     catch
     {
         return(View());
     }
 }
Ejemplo n.º 6
0
        public static void Start(CaveDb db, Func <bool> isCommandLine, List <RegisterDelegate> endPoints, out Func <HttpContext, Action <UserSession>, Task> handleSession)
        {
            RandomNumberGenerator rng = RandomNumberGenerator.Create();

            Func <int, byte[]> getRng = cnt =>
            {
                byte[] data = new byte[cnt];
                rng.GetBytes(data);
                return(data);
            };

            Func <HttpContext, Action <UserSession>, Task> innerHandleSession = BuildHandleSession(db, isCommandLine);

            handleSession = innerHandleSession;

            Task handleResponse <T>(HttpContext ctx, Func <UserSession, T, Task> action) where T : Response, new()
            {
                return(innerHandleSession(ctx, async session =>
                {
                    T response = new T();
                    response.SetSuccess();
                    try
                    {
                        await action(session, response);
                    }
                    catch (Exception ex)
                    {
                        response.SetFail(HttpStatusCode.InternalServerError, $"Exception thrown: {ex.Message} \r\n {ex.StackTrace}");
                    }

                    ctx.WriteHeader(Mimes.Json, HttpStatusCode.OK);
                    await ctx.WriteBodyObject(response);
                }));
            }

            // define endpoints
            endPoints.Post("/login", async ctx =>
            {
                // read body
                var login = await ctx.ReadBody <LoginRequest>();

                // get login
                var loginResponse = Login(db, isCommandLine, getRng, login);

                // return body
                ctx.WriteHeader(Mimes.Json, HttpStatusCode.OK);
                await ctx.WriteBodyObject(loginResponse);
            });

            endPoints.Get("/user/profile", async ctx =>
            {
                await innerHandleSession(ctx, async session =>
                {
                    ctx.WriteHeader(Mimes.Json, HttpStatusCode.OK);
                    await ctx.WriteBodyObject(new
                    {
                        session.UserId,
                        session.User.Email,
                        session.User.Profile,
                        session.User.Permissions,
                        Status = 200
                    });
                });
            });

            endPoints.Get("/user", async ctx =>
            {
                await handleResponse <ItemsResponse <User> >(ctx, async(session, response) =>
                {
                    if (!session.User.Permissions.Contains('A'))
                    {
                        ctx.Unauthorized();
                        return;
                    }

                    var users      = db.Users.Find(u => true).ToList().ToArray();
                    response.Items = users;
                });
            });

            endPoints.Put("/user", async ctx =>
            {
                await handleResponse <Response>(ctx, async(session, response) =>
                {
                    if (!session.User.Permissions.Contains('A'))
                    {
                        ctx.Unauthorized();
                        return;
                    }

                    var request = await ctx.ReadBody <UserUpdateRequest>();

                    var user = db.Users.Find(u => u.Id == request.Id).FirstOrDefault();

                    if (user == null)
                    {
                        user    = new User();
                        user.Id = Guid.NewGuid().ToString("n");
                        db.Users.InsertOne(user);
                    }

                    user.Name        = request.Name;
                    user.Email       = request.Email;
                    user.Profile     = request.Profile;
                    user.Permissions = request.Permissions;

                    db.Users.ReplaceOne(u => u.Id == user.Id, user);
                });
            });

            endPoints.Put("/user/new", async ctx =>
            {
                await handleResponse <ItemResponse <NewUser> >(ctx, async(session, response) =>
                {
                    UserNewRequest request = await ctx.ReadBody <UserNewRequest>();

                    if (string.IsNullOrWhiteSpace(request.Email))
                    {
                        response.SetFail("No email address specified");
                        return;
                    }

                    if (db.Users.Find(u => u.Email == request.Email).Any())
                    {
                        response.SetFail("Email already exists.");
                        return;
                    }

                    if (string.IsNullOrWhiteSpace(request.Password))
                    {
                        request.Password = GenerateUserPassword();
                    }

                    User user = new User()
                    {
                        Name         = request.Name,
                        Email        = request.Email,
                        IsActive     = true,
                        Created      = DateTime.UtcNow,
                        Profile      = request.Profile,
                        Permissions  = request.Permissions,
                        PasswordSalt = Convert.ToBase64String(getRng(16)),
                    };

                    user.PasswordHash = HashPassword(request.Password, user.PasswordSalt);

                    db.Users.InsertOne(user);

                    response.Item = new NewUser()
                    {
                        Email       = user.Email,
                        Id          = user.Id,
                        Name        = user.Name,
                        Password    = request.Password,
                        Permissions = user.Permissions,
                        Profile     = user.Profile
                    };
                });
            });

            endPoints.Delete("/user/{id}", async ctx =>
            {
                await handleResponse <Response>(ctx, async(session, response) =>
                {
                    string id = ctx.Request.RouteValues["id"].ToString();

                    if (db.Users.DeleteOne(u => u.Id == id).DeletedCount == 0)
                    {
                        response.SetFail("$No user with id {id}");
                        return;
                    }

                    db.History.InsertOne(HistoryEntry(id, null, null, null, "User Deleted"));
                });
            });

            endPoints.Get("/user/password/reset/{id}", async ctx =>
            {
                await handleResponse <UserResetPasswordResponse>(ctx, async(session, response) =>
                {
                    string id = ctx.Request.RouteValues["id"].ToString();
                    User user = db.Users.Find(u => u.Id == id).FirstOrDefault();

                    if (user == null)
                    {
                        response.SetFail($"User {id} not found.");
                        return;
                    }

                    response.NewPassword = GenerateUserPassword();
                    byte[] salt          = getRng(16);
                    user.PasswordSalt    = Convert.ToBase64String(salt);
                    user.PasswordHash    = HashPassword(response.NewPassword, user.PasswordSalt);
                    db.Users.ReplaceOne(u => u.Id == user.Id, user);
                });
            });
        }