예제 #1
0
 public Account()
 {
     _db           = new SSOContext();
     _ctx          = WebOperationContext.Current;
     _mngr         = new AccountServiceImplementation(_db);
     _identityMngr = new IdentityServiceImplementation(_db);
 }
예제 #2
0
        /// <summary>
        /// Method to set Seeds into RolePermissions-Table.
        /// </summary>
        /// <param name="db"><see cref="DBConfig"/> object.</param>
        public static void SetSeeds(SSOContext db)
        {
            List <RolePermission> seedList = new List <RolePermission>
            {
                new RolePermission {
                    RoleId = GetId.RoleID("admin", db), PermissionId = GetId.PermissionID("Root", db)
                },
                new RolePermission {
                    RoleId = GetId.RoleID("admin", db), PermissionId = GetId.PermissionID("Edit plan", db)
                },
                new RolePermission {
                    RoleId = GetId.RoleID("dispatcher", db), PermissionId = GetId.PermissionID("Edit plan", db)
                },
                new RolePermission {
                    RoleId = GetId.RoleID("dispatcher", db), PermissionId = GetId.PermissionID("Edit arrival", db)
                },
                new RolePermission {
                    RoleId = GetId.RoleID("dispatcher", db), PermissionId = GetId.PermissionID("Edit departure", db)
                }
            };

            foreach (var item in seedList)
            {
                db.RolePermissions.Add(item);
            }
            db.SaveChanges();
        }
예제 #3
0
        public async Task <ActionResult <Permission> > UpdatePermission([FromBody] Permission permission,
                                                                        [FromHeader(Name = "Authorization")] string inputToken,
                                                                        [FromRoute] int id)
        {
            if (tokenCheck.TokenChecking(inputToken))
            {
                if (id == permission.Id)
                {
                    if (permissionCheck.IsAllowed(inputToken, "edit_permissions"))
                    {
                        using var db = new SSOContext();
                        var oldPermission = await db.Permissions.FindAsync(id);

                        if (oldPermission == null)
                        {
                            throw new ArgumentNullException();
                        }

                        permission.CreatedAt          = oldPermission.CreatedAt;
                        db.Entry(oldPermission).State = EntityState.Detached;

                        db.Permissions.Update(permission);
                        await db.SaveChangesAsync();

                        db.Entry(permission).State = EntityState.Detached;
                        return(await db.Permissions.FindAsync(permission.Id));
                    }
                }
            }
            throw new ArgumentNullException();
        }
예제 #4
0
        public async Task <ActionResult <Permission> > DeletePermission(int id, [FromHeader(Name = "Authorization")] string inputToken)
        {
            if (tokenCheck.TokenChecking(inputToken))
            {
                if (id != 0)
                {
                    if (permissionCheck.IsAllowed(inputToken, "edit_permissions"))
                    {
                        using var db = new SSOContext();
                        var getPermission = await(from permissions in db.Permissions
                                                  where permissions.Id == id
                                                  select permissions).FirstAsync();
                        if (getPermission == null)
                        {
                            throw new ArgumentNullException();
                        }

                        getPermission.DeletedAt = DateTimeOffset.UtcNow;
                        db.Permissions.Update(getPermission);
                        await db.SaveChangesAsync();

                        db.Entry(getPermission).State = EntityState.Detached;
                        return(await db.Permissions
                               .IgnoreQueryFilters()
                               .Where(x => x.Id == id).FirstAsync());
                    }
                }
            }
            throw new ArgumentNullException();
        }
예제 #5
0
        public async Task <ActionResult <Role> > UpdateRole([FromBody] Role role,
                                                            [FromHeader(Name = "Authorization")] string inputToken,
                                                            [FromRoute] int id)
        {
            if (tokenCheck.TokenChecking(inputToken))
            {
                if (id == role.Id)
                {
                    if (permissionCheck.IsAllowed(inputToken, "edit_roles"))
                    {
                        using var db = new SSOContext();
                        var oldRole = await db.Roles.FindAsync(id);

                        if (oldRole == null)
                        {
                            throw new ArgumentNullException();
                        }

                        role.CreatedAt          = oldRole.CreatedAt;
                        db.Entry(oldRole).State = EntityState.Detached;

                        db.Roles.Update(role);
                        await db.SaveChangesAsync();

                        db.Entry(role).State = EntityState.Detached;
                        return(await(from roles in db.Roles
                                     .Include(z => z.Company)
                                     where roles.Id == id
                                     select roles).FirstAsync());
                    }
                }
            }
            throw new ArgumentNullException();
        }
예제 #6
0
        public async Task <ActionResult <IEnumerable <Permission> > > GetAllPermissions([FromHeader(Name = "Authorization")] string inputToken, string searchValue = "")
        {
            if (tokenCheck.TokenChecking(inputToken))
            {
                using var db = new SSOContext();
                List <Permission> permissionList;
                if (string.IsNullOrWhiteSpace(searchValue))
                {
                    permissionList = await(from permissions in db.Permissions
                                           select permissions).ToListAsync();
                }
                else
                {
                    permissionList = await db.Permissions
                                     .Where(x => x.Slug.Contains(searchValue) || x.Table.Contains(searchValue))
                                     .ToListAsync();
                }

                if (permissionList.Any())
                {
                    return(permissionList);
                }
            }

            throw new ArgumentNullException();
        }
 public AccountManagement()
 {
     _db           = new SSOContext();
     _ctx          = WebOperationContext.Current;
     _mngr         = new AccountManagementImpl(_db);
     _authProvider = new AuthProvider(_db);
 }
예제 #8
0
        public async Task <ActionResult <User> > InsertUser([FromBody] User user, [FromHeader(Name = "Authorization")] string inputToken)
        {
            if (tokenCheck.TokenChecking(inputToken))
            {
                if (user != null)
                {
                    if (permissionCheck.IsAllowed(inputToken, "edit_user"))
                    {
                        using var db = new SSOContext();
                        var getUsers = await(from users in db.Users
                                             where users.Email == user.Email
                                             select users).IgnoreQueryFilters().ToListAsync();
                        if (getUsers.Any())
                        {
                            foreach (var item in getUsers)
                            {
                                if (item.DeletedAt == null)
                                {
                                    throw new ArgumentNullException("Existing User.");
                                }
                            }
                        }
                        user.Password = BCrypt.Net.BCrypt.HashPassword(user.Password, ConfigurationExtensions.GetConfig().Salt.Value);
                        db.Users.Add(user);
                        await db.SaveChangesAsync();

                        db.Entry(user).State = EntityState.Detached;
                        return(await db.Users.Include(z => z.Company)
                               .Where(x => x.Id == user.Id).FirstAsync());
                    }
                }
            }
            throw new ArgumentNullException();
        }
예제 #9
0
        public async Task <ActionResult <UserParams> > UpdateUserParams([FromBody] UserParams userParams,
                                                                        [FromHeader(Name = "Authorization")] string inputToken,
                                                                        [FromRoute] int id)
        {
            if (tokenCheck.TokenChecking(inputToken))
            {
                if (id == userParams.Id)
                {
                    if (permissionCheck.IsAllowed(inputToken, "edit_user_params"))
                    {
                        using var db = new SSOContext();
                        var oldParams = await db.UserParameters.FindAsync(id);

                        if (oldParams == null)
                        {
                            throw new ArgumentNullException();
                        }

                        userParams.CreatedAt      = oldParams.CreatedAt;
                        db.Entry(oldParams).State = EntityState.Detached;

                        db.UserParameters.Update(userParams);
                        await db.SaveChangesAsync();

                        db.Entry(userParams).State = EntityState.Detached;
                        return(await db.UserParameters
                               .Include(z => z.User)
                               .ThenInclude(x => x.Company)
                               .Where(x => x.Id == id)
                               .FirstAsync());
                    }
                }
            }
            throw new ArgumentNullException();
        }
예제 #10
0
 public InvitesController(SSOContext context, ITokenCheck tokenCheck, IPermissionCheck permissionCheck, IHttpClientFactory httpClientFactory)
 {
     _context               = context;
     this.tokenCheck        = tokenCheck;
     this.permissionCheck   = permissionCheck;
     this.httpClientFactory = httpClientFactory;
 }
예제 #11
0
        public async Task <ActionResult <UserParams> > DeleteUserParams(int id, [FromHeader(Name = "Authorization")] string inputToken)
        {
            if (tokenCheck.TokenChecking(inputToken))
            {
                if (id != 0)
                {
                    if (permissionCheck.IsAllowed(inputToken, "edit_user_params"))
                    {
                        using var db = new SSOContext();

                        var getUserParams = await db.UserParameters.FindAsync(id);

                        if (getUserParams == null)
                        {
                            throw new ArgumentNullException();
                        }

                        getUserParams.DeletedAt = DateTimeOffset.UtcNow;
                        db.UserParameters.Update(getUserParams);
                        await db.SaveChangesAsync();

                        db.Entry(getUserParams).State = EntityState.Detached;
                        return(await(from u_params in db.UserParameters
                                     .IgnoreQueryFilters()
                                     .Include(z => z.User)
                                     .ThenInclude(x => x.Company)
                                     where u_params.Id == id
                                     select u_params).FirstAsync());
                    }
                }
            }
            throw new ArgumentNullException();
        }
예제 #12
0
        public async Task <ActionResult <Company> > UpdateCompany([FromBody] Company company,
                                                                  [FromHeader(Name = "Authorization")] string inputToken,
                                                                  [FromRoute] int id)
        {
            if (tokenCheck.TokenChecking(inputToken))
            {
                if (id == company.Id)
                {
                    if (permissionCheck.IsAllowed(inputToken, "edit_companies"))
                    {
                        using var db = new SSOContext();
                        var oldCompany = await db.Companies.FindAsync(id);

                        if (oldCompany == null)
                        {
                            throw new ArgumentNullException();
                        }

                        company.CreatedAt          = oldCompany.CreatedAt;
                        db.Entry(oldCompany).State = EntityState.Detached;

                        db.Companies.Update(company);
                        await db.SaveChangesAsync();

                        db.Entry(company).State = EntityState.Detached;
                        return(await db.Companies.FindAsync(id));
                    }
                }
            }

            throw new ArgumentNullException();
        }
예제 #13
0
파일: DBGetStuff.cs 프로젝트: Shketkol/sso
        /// <summary>
        /// Method to get user object.
        /// </summary>
        /// <returns>
        /// <see cref="ClaimsIdentity"/>.
        /// </returns>
        /// <exception cref="ArgumentNullException">Thrown when one parameter is null.</exception>
        /// <param name="email">A string.</param>
        /// <param name="password">A string.</param>
        public static ClaimsIdentity GetUserObject(string email, string password)
        {
            using var db = new SSOContext();

            var getStuff = (from users in db.Users
                            select users).ToList();

            if (getStuff.Any())
            {
                foreach (var user in getStuff)
                {
                    if (email == user.Email && BCrypt.Net.BCrypt.Verify(password, user.Password))
                    {
                        var claims = new List <Claim>
                        {
                            new Claim(ClaimTypes.Email, user.Email),
                            new Claim(ClaimTypes.Name, user.Name),
                            new Claim(ClaimTypes.NameIdentifier, user.Id.ToString())
                        };
                        ClaimsIdentity claimsIdentity = new ClaimsIdentity(claims);
                        return(claimsIdentity);
                    }
                }
            }

            throw new ArgumentNullException();
        }
예제 #14
0
        /// <summary>
        /// Method to set Seeds into CompanyAirportsSet-Table.
        /// </summary>
        /// <param name="db">DB context.</param>
        public static void SetSeeds(SSOContext db)
        {
            List <CompanyAirports> seedList = new List <CompanyAirports>
            {
                new CompanyAirports {
                    CompanyId = GetId.CompanyID("PROFI-IT", db), AirportId = 1
                },
                new CompanyAirports {
                    CompanyId = GetId.CompanyID("ODS", db), AirportId = 1
                }
            };

            db.AddRange(seedList);
            db.SaveChanges();
        }
예제 #15
0
        public async Task <ActionResult <IEnumerable <Company> > > GetAllCompanies([FromHeader(Name = "Authorization")] string inputToken)
        {
            if (tokenCheck.TokenChecking(inputToken))
            {
                using var db = new SSOContext();
                var companyList = await(from companies in db.Companies
                                        select companies).ToListAsync();

                if (companyList.Any())
                {
                    return(companyList);
                }
            }
            throw new ArgumentNullException();
        }
예제 #16
0
        public async Task <ActionResult <IEnumerable <Role> > > GetAllRoles([FromHeader(Name = "Authorization")] string inputToken)
        {
            if (tokenCheck.TokenChecking(inputToken))
            {
                using var db = new SSOContext();
                var roleList = await(from roles in db.Roles
                                     .Include(z => z.Company)
                                     select roles).ToListAsync();

                if (roleList.Any())
                {
                    return(roleList);
                }
            }
            throw new ArgumentNullException();
        }
예제 #17
0
 public string UserInfo()
 {
     try
     {
         using (var ctx = new SSOContext())
         {
             var sessionid = Request.Cookies["session"].Values["sid"];
             var session   = ctx.Sessions.Where(m => m.SessionId == sessionid).FirstOrDefault();
             if (session != null)
             {
                 var user = ctx.Users.Where(m => m.UserId == session.UserId).Select(m => new
                 {
                     UserId    = m.UserId,
                     LoginName = m.LoginName,
                     NickName  = m.NickName,
                     Profile   = m.Profile,
                     Gender    = m.Gender,
                     Birthday  = m.Birthday,
                     Location  = m.Location,
                     Phone     = m.Phone,
                     Email     = m.Email,
                 }).FirstOrDefault();
                 if (user != null)
                 {
                     return(JsonConvert.SerializeObject(new
                     {
                         res = "OK",
                         msg = JsonConvert.SerializeObject(user)
                     }));
                 }
             }
             return(JsonConvert.SerializeObject(new
             {
                 res = "ERROR",
                 msg = "登录信息过期或找不到当前用户"
             }));
         }
     }
     catch (Exception e)
     {
         return(JsonConvert.SerializeObject(new
         {
             res = "ERROR",
             msg = e.Message
         }));
     }
 }
예제 #18
0
 public string Logout()
 {
     try
     {
         using (var ctx = new SSOContext())
         {
             #region 登录过的,删除数据库和客户端cookie。
             string sessionid = "";
             try
             {
                 sessionid = Request.Cookies["session"].Values["sid"];
             }
             catch (Exception)
             {
             }
             var session = ctx.Sessions.Where(m => m.SessionId == sessionid).FirstOrDefault();
             if (session != null)
             {
                 ctx.Sessions.Remove(session);
                 ctx.SaveChanges();
             }
             #region cookie重置
             HttpCookie cookie = new HttpCookie("session");
             cookie.Expires = DateTime.Now;
             cookie.Values.Add("sid", "0");
             cookie.Values.Add("uid", "0");
             cookie.Values.Add("ctime", DateTime.Now.ToString());
             cookie.Values.Add("etime", DateTime.Now.ToString());
             Response.SetCookie(cookie);
             #endregion
             #endregion
             return(JsonConvert.SerializeObject(new
             {
                 res = "OK",
                 msg = "成功退出当前账号"
             }));
         }
     }
     catch (Exception e)
     {
         return(JsonConvert.SerializeObject(new
         {
             res = "ERROR",
             msg = e.Message
         }));
     }
 }
예제 #19
0
        public async Task <ActionResult <IEnumerable <UserParams> > > GetAllUserParams([FromHeader(Name = "Authorization")] string inputToken)
        {
            if (tokenCheck.TokenChecking(inputToken))
            {
                using var db = new SSOContext();
                var usersParamsList = await(from u_params in db.UserParameters
                                            .Include(z => z.User)
                                            .ThenInclude(x => x.Company)
                                            select u_params).ToListAsync();

                if (usersParamsList.Any())
                {
                    return(usersParamsList);
                }
            }
            throw new ArgumentNullException();
        }
예제 #20
0
        public string UpdateUserInfo()
        {
            try
            {
                using (var ctx = new SSOContext())
                {
                    var sessionid = Request.Cookies["session"].Values["sid"];
                    var session   = ctx.Sessions.Where(m => m.SessionId == sessionid).FirstOrDefault();
                    if (session != null)
                    {
                        var user = ctx.Users.Where(m => m.UserId == session.UserId).FirstOrDefault();

                        if (user != null)
                        {
                            //用户id,登录名,密码不在此处修改
                            user.NickName = Request.Form["NickName"];
                            user.Profile  = Request.Form["Profile"];
                            user.Gender   = Request.Form["Gender"];
                            user.Birthday = DateTime.Parse(Request.Form["Birthday"]).ToString("yyyy-MM-dd");
                            user.Location = Request.Form["Location"];
                            user.Phone    = Request.Form["Phone"];
                            user.Email    = Request.Form["Email"];
                            ctx.SaveChanges();
                            return(JsonConvert.SerializeObject(new
                            {
                                res = "OK",
                                msg = "用户信息修改成功"
                            }));
                        }
                    }
                    return(JsonConvert.SerializeObject(new
                    {
                        res = "ERROR",
                        msg = "登录信息过期或找不到当前用户"
                    }));
                }
            }
            catch (Exception e)
            {
                return(JsonConvert.SerializeObject(new
                {
                    res = "ERROR",
                    msg = e.Message
                }));
            }
        }
예제 #21
0
 public override void OnActionExecuting(ActionExecutingContext filterContext)
 {
     try
     {
         string sessionid = "";
         try
         {
             sessionid = filterContext.HttpContext.Request.Cookies["session"].Values["sid"];
         }
         catch (Exception)
         {
             throw new Exception("用户尚未登录");
         }
         using (var ctx = new SSOContext())
         {
             var session = ctx.Sessions.Where(m => m.SessionId == sessionid).FirstOrDefault();
             if (session == null)
             {
                 throw new Exception("非法参数");
             }
             if (session != null && session.ExpireTime.CompareTo(DateTime.Now) > 0)
             {
                 session.ExpireTime = DateTime.Now.AddHours(1);
                 HttpCookie cookie = new HttpCookie("session");
                 cookie.Expires = session.ExpireTime;
                 cookie.Values.Add("sid", session.SessionId);
                 cookie.Values.Add("uid", session.UserId);
                 cookie.Values.Add("ctime", session.CreateTime.ToString());
                 cookie.Values.Add("etime", session.ExpireTime.ToString());
                 filterContext.HttpContext.Response.SetCookie(cookie);
                 ctx.SaveChanges();
             }
             if (session != null && session.ExpireTime.CompareTo(DateTime.Now) <= 0)
             {
                 ctx.Sessions.Remove(session);
                 ctx.SaveChanges();
                 throw new Exception("会话过期,请重新登录。");
             }
         }
     }
     catch (Exception e)
     {
         filterContext.Result = new RedirectResult("/api/Home/ValidFailed?exception=" + e.Message);
     }
 }
예제 #22
0
        /// <summary>
        /// Method to set Seeds into UserRoles-Table.
        /// </summary>
        /// <param name="db"><see cref="DBConfig"/> object.</param>
        public static void SetSeeds(SSOContext db)
        {
            List <UserRole> seedList = new List <UserRole>
            {
                new UserRole {
                    RoleId = GetId.RoleID("admin", db), UserId = GetId.UserID("greentee5", db)
                },
                new UserRole {
                    RoleId = GetId.RoleID("admin", db), UserId = GetId.UserID("sipdrenma", db)
                }
            };

            foreach (var item in seedList)
            {
                db.UserRoles.Add(item);
            }
            db.SaveChanges();
        }
예제 #23
0
파일: DBGetStuff.cs 프로젝트: Shketkol/sso
        /// <summary>
        /// Method to check if user record exists.
        /// </summary>
        /// <returns>
        /// <see cref="bool"/>.
        /// </returns>
        /// <exception cref="ArgumentNullException">Thrown when some variable is null.</exception>
        /// <param name="token">A <see cref="ClaimsPrincipal"/> object.</param>
        public static bool CheckUser(ClaimsPrincipal token)
        {
            using var db = new SSOContext();
            var identity = (ClaimsIdentity)token.Identity;
            var claims   = identity.Claims.ToList();

            var getUsers = db.Users.Select(p => p)
                           .Where(p => p.Email == claims[0].Value &&
                                  p.Name == claims[1].Value &&
                                  p.Id.ToString() == claims[2].Value)
                           .IgnoreQueryFilters().First();

            if (getUsers == null)
            {
                throw new ArgumentNullException("user is not exist");
            }
            return(true);
        }
예제 #24
0
파일: RoleSeed.cs 프로젝트: Shketkol/sso
        /// <summary>
        /// Method to set Seeds into Roles-Table.
        /// </summary>
        /// <param name="db"><see cref="DBConfig"/> object.</param>
        public static void SetSeeds(SSOContext db)
        {
            List <Role> seedList = new List <Role>
            {
                new Role {
                    Slug = "admin", CompanyId = GetId.CompanyID("PROFI-IT", db)
                },
                new Role {
                    Slug = "dispatcher", CompanyId = GetId.CompanyID("ODS", db)
                }
            };

            foreach (var item in seedList)
            {
                item.Slug = item.Slug.Replace(' ', '-').ToLower();
                db.Roles.Add(item);
            }
            db.SaveChanges();
        }
예제 #25
0
        /// <summary>
        /// Method to set Seeds into Companies-Table.
        /// </summary>
        /// <param name="db"><see cref="DBConfig"/> object.</param>
        public static void SetSeeds(SSOContext db)
        {
            List <Company> seedList = new List <Company>
            {
                new Company {
                    CompanyName = "PROFI-IT", Slug = ""
                },
                new Company {
                    CompanyName = "ODS", Slug = ""
                }
            };

            foreach (var item in seedList)
            {
                item.Slug = item.CompanyName.Replace(' ', '-').ToLower();
                db.Companies.Add(item);
            }
            db.SaveChanges();
        }
예제 #26
0
        public async Task <ActionResult <Permission> > GetPermission(int id, [FromHeader(Name = "Authorization")] string inputToken)
        {
            if (tokenCheck.TokenChecking(inputToken))
            {
                if (id != 0)
                {
                    using var db = new SSOContext();
                    var getPermission = await(from permissions in db.Permissions
                                              where permissions.Id == id
                                              select permissions).FirstAsync();

                    if (getPermission != null)
                    {
                        return(getPermission);
                    }
                }
            }
            throw new ArgumentNullException();
        }
예제 #27
0
        public async Task <TIEntity> Update(TIEntity entity)
        {
            var _entity = await this.SSOContext.Set <TEntity>().FindAsync(entity.Id);

            if (_entity == null)
            {
                throw new System.Exception($"Record not found. {typeof(TEntity).Name}");
            }

            using (var tx = SSOContext.Database.BeginTransaction())
            {
                SSOContext.Update(entity);
                await SSOContext.SaveChangesAsync();

                await tx.CommitAsync();
            }

            return(entity);
        }
예제 #28
0
        public async Task <ActionResult <Permission> > InsertPermission([FromBody] Permission permission, [FromHeader(Name = "Authorization")] string inputToken)
        {
            if (tokenCheck.TokenChecking(inputToken))
            {
                if (permission != null)
                {
                    if (permissionCheck.IsAllowed(inputToken, "edit_permissions"))
                    {
                        using var db = new SSOContext();
                        db.Permissions.Add(permission);
                        await db.SaveChangesAsync();

                        db.Entry(permission).State = EntityState.Detached;
                        return(await db.Permissions.FindAsync(permission.Id));
                    }
                }
            }
            throw new ArgumentNullException();
        }
예제 #29
0
        public async Task <ActionResult <Company> > InsertCompany([FromBody] Company company, [FromHeader(Name = "Authorization")] string inputToken)
        {
            if (tokenCheck.TokenChecking(inputToken))
            {
                if (company != null)
                {
                    if (permissionCheck.IsAllowed(inputToken, "edit_companies"))
                    {
                        using var db = new SSOContext();
                        db.Companies.Add(company);
                        await db.SaveChangesAsync();

                        db.Entry(company).State = EntityState.Detached;
                        return(await db.Companies.FindAsync(company.Id));
                    }
                }
            }
            throw new ArgumentNullException();
        }
예제 #30
0
        public async Task <ActionResult <Company> > GetCompany(int id, [FromHeader(Name = "Authorization")] string inputToken)
        {
            if (tokenCheck.TokenChecking(inputToken))
            {
                if (id != 0)
                {
                    using var db = new SSOContext();
                    var company = await(from companies in db.Companies
                                        where companies.Id == id
                                        select companies).FirstAsync();

                    if (company != null)
                    {
                        return(company);
                    }
                }
            }
            throw new ArgumentNullException();
        }