protected JsonResult BuildResponseJsonResult(SMGenericResponse res, int code = 0)
 {
     return(new JsonResult(res)
     {
         StatusCode = code != 0 ? code : res.CheckStatus()
     });
 }
 protected ObjectResult BuildResponseObjectResult(SMGenericResponse res, int code = 0)
 {
     return(StatusCode(code != 0 ? code : res.CheckStatus(), res));
 }
        public ObjectResult Login([FromBody] SMUserCredentials data)
        {
            SMGenericResponse response = new SMGenericResponse()
            {
                Status  = "Success",
                Message = "Credentials Correct"
            };

            try {
                SMUserCredentials            credentials = data.CleanData();
                MCredentialsCheckResultClass result      = CheckCredentials(credentials);
                switch (CastToEnum <HttpStatusCode>(result.Result))
                {
                case HttpStatusCode.BadRequest: {
                    response.Status  = "Error";
                    response.Message = result.Message;
                    response.Data    = null;
                    return(BuildResponseObjectResult(response, (int)HttpStatusCode.BadRequest));
                }

                case HttpStatusCode.InternalServerError: {
                    response.Status  = "Error";
                    response.Message = result.Message;
                    response.Data    = null;
                    return(BuildResponseObjectResult(response, (int)HttpStatusCode.InternalServerError));
                }

                case HttpStatusCode.Unauthorized: {
                    response.Status  = "Error";
                    response.Message = result.Message;
                    response.Data    = null;
                    return(BuildResponseObjectResult(response, (int)HttpStatusCode.Unauthorized));
                }

                case HttpStatusCode.Accepted: {
                    response.Status  = "Success";
                    response.Message = "The user has valid access";

                    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));
                    }

                    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) {
                        response.Status  = "Error";
                        response.Message = "Error fetching App/User extra info from requests";
                        response.Data    = null;
                        return(BuildResponseObjectResult(response, (int)HttpStatusCode.InternalServerError));
                    }


                    response.Data = GetJWTToken(userTokenClaims);
                }
                break;

                default: {
                    response.Status  = "Error";
                    response.Message = "Internal server error authenticating with Active Directory (Unknow)";
                    response.Data    = null;
                    return(BuildResponseObjectResult(response, (int)HttpStatusCode.InternalServerError));
                }
                }
            } catch (Exception e) {
                response.SetErrorInfo(e);
            }
            return(BuildResponseObjectResult(response));
        }