Ejemplo n.º 1
0
        private List <string> GetExtraRoles(Models.Entities.Views.RosterMeta4 user)
        {
            List <string> result = new List <string>();
            Dictionary <string, List <string> > secNamesMaping = dBContext.UserGroupsOrNames
                                                                 .Where(w => w.UserGroup == null)
                                                                 .Include(i => i.UserPermissions).ThenInclude(ti => ti.Role)
                                                                 .ToDictionary(k => k.UserName.ToLower(),
                                                                               v => v.UserPermissions.Select(x => x.Role.Name).ToList());

            foreach (KeyValuePair <string, List <string> > secName in secNamesMaping)
            {
                if (secName.Key == user.NetworkLogin)
                {
                    result = result.Concat(secName.Value).ToList();
                }
            }
            return(result.Distinct().ToList());
        }
Ejemplo n.º 2
0
        public ObjectResult DevLogin([FromBody] SMUserCredentials data)
        {
            SMGenericResponse response = new SMGenericResponse()
            {
                Status  = "Success",
                Message = "Credentials Correct"
            };

            try {
                SMUserCredentials            credentials = data.CleanData();
                MCredentialsCheckResultClass result      = SearchUserInfoLDAP(credentials);
                if (result.Result == null)
                {
                    response.Status  = "Error";
                    response.Message = result.Message;
                    response.Data    = null;
                    return(BuildResponseObjectResult(response, (int)HttpStatusCode.InternalServerError));
                }

                List <string> roles = (List <string>)result.Result;
                if (roles.Count <= 0)
                {
                    response.Status  = "Error";
                    response.Message = "The user has no valid access roles to this application";
                    response.Data    = null;
                    return(BuildResponseObjectResult(response, (int)HttpStatusCode.Unauthorized));
                }

                Models.Entities.Views.RosterMeta4 rosterMeta4 = dBContext.RosterMeta4.Include(i => i.User).First(f => f.NetworkLogin == credentials.Username);
                if (!rosterMeta4.Status)
                {
                    response.Status  = "Error";
                    response.Message = "The user has no access permission due inactivity";
                    response.Data    = null;
                    return(BuildResponseObjectResult(response, (int)HttpStatusCode.Forbidden));
                }

                MUserTokenClaimsClass userTokenClaims = null;
                try {
                    if (rosterMeta4.User == null)
                    {
                        rosterMeta4.User = new Users()
                        {
                            EmployeeNumber = rosterMeta4.EmployeeNumber,
                            DateFirstLogin = DateTime.Now,
                            DateLastLogin  = DateTime.Now
                        };
                    }
                    else
                    {
                        rosterMeta4.User.DateLastLogin = DateTime.Now;
                    }
                    dBContext.SaveChanges();
                    roles.AddRange(GetExtraRoles(rosterMeta4));
                    userTokenClaims = new MUserTokenClaimsClass()
                    {
                        FullName          = rosterMeta4.FullName,
                        NetworkLogin      = rosterMeta4.NetworkLogin,
                        UserID            = rosterMeta4.User.ID,
                        EmployeeNumber    = rosterMeta4.EmployeeNumber,
                        EmployeeNumberSup = rosterMeta4.EmployeeNumberSup,
                        ClientIP          = Request.HttpContext.Connection.RemoteIpAddress.ToString(),
                        Roles             = roles.Distinct().ToList(),
                        TokenV            = 1.0
                    };
                } catch (Exception ee) {
                    response.Status  = "Error";
                    response.Message = "Error fetching App/User extra info from requests";
                    response.Data    = ee.ToString();
                    return(BuildResponseObjectResult(response, (int)HttpStatusCode.InternalServerError));
                }
                response.Data = GetJWTToken(userTokenClaims);
            } catch (Exception e) {
                response.SetErrorInfo(e);
            }
            return(BuildResponseObjectResult(response));
        }