public static int AddSchoolWithDefaultUser(School schoolToInsert)
        {
            //create DBContext object
            using (var smsDB = new SMSEntities())
            {
                //Add Student object into Students DBset
                smsDB.Schools.Add(schoolToInsert);

                //School school = new GetSchool
                // Get Admin User
                //UserGroup userGroup = GetUserGroup(1);

                // ExternalUserInfo
                ExternalUserInfo externalUserToAdd = new ExternalUserInfo();
                externalUserToAdd.SchoolID  = schoolToInsert.SchoolID;
                externalUserToAdd.FirstName = "Admin";
                externalUserToAdd.LastName  = "Admin";
                int result = DA_ExternalUser.AddExternalUserInfo(externalUserToAdd);

                ExternalUserLogin externalUserLogin = new ExternalUserLogin();
                //externalUserLogin.
                // ExternalUserLogin

                // ExternalUserLogin_UserGroup_Mapping

                //
                // call SaveChanges method to save student into database
                return(smsDB.SaveChanges());
            }
        }
        public ActionResult Login(LoginCredentials login)
        {
            /**
             *  UserGroupId	UserGroupName
             *  1	Admin
             *  2	Parent
             *  3	Student
             *  4	Teacher
             *  5	View
             */

            ExternalUserLogin extuser = DA_Login.GetExternalUser(login);

            if (extuser != null)
            {
                if (extuser.Password != login.Password)
                {
                    return(View("Index"));
                }

                ExternalUserInfo exUserInfo = DA_ExternalUser.GetExternalUserInfo(extuser.ExternalUserInfoID);
                Session["CurrentUser"] = exUserInfo;
                int userGroupID = DA_ExternalUser.GetExternalUserGroup(extuser.ExternalUserLoginID).UserGroupId;
                Session["UserGroupID"] = userGroupID;
                if (userGroupID == 3) // student
                {
                    StudentInfo sInfo = DA_Student.GetStudentInfoByLoginID(extuser.ExternalUserLoginID);
                    return(View("~/Views/Student/Index.cshtml", sInfo));
                }

                if (userGroupID == 4) // Teacher
                {
                    return(View("~/Views/Teacher/Index.cshtml", exUserInfo));
                }
            }
            else
            {
                InternalUser interanlUser = DA_Login.GetInternalUser(login);

                if (interanlUser != null)
                {
                    if (interanlUser.Password != login.Password)
                    {
                        return(View("Index"));
                    }
                    Session["CurrentUser"] = interanlUser;
                    Session["UserGroupID"] = interanlUser.UserGroupId;
                }
                else
                {
                    return(View("Index"));
                }
            }



            return(View());
        }
 public void Set(ExternalUserInfo other)
 {
     if (other != null)
     {
         m_ApiVersion = UserInfoInterface.ExternaluserinfoApiLatest;
         AccountType  = other.AccountType;
         AccountId    = other.AccountId;
         DisplayName  = other.DisplayName;
     }
 }
        public static int AddExternalUserInfo(ExternalUserInfo userToInsert)
        {
            //create DBContext object
            using (var smsDB = new SMSEntities())
            {
                //Add Student object into Students DBset
                smsDB.ExternalUserInfoes.Add(userToInsert);

                // call SaveChanges method to save student into database
                return(smsDB.SaveChanges());
            }
        }
Exemplo n.º 5
0
        public async Task <Boolean> CreateUserAsync(String loginProvider, ExternalUserInfo user)
        {
            var foundUser = await UserManager.FindAsync(new UserLoginInfo("PhoneNumber", user.PhoneNumber));

            if (foundUser != null)
            {
                await UserManager.AddLoginAsync(foundUser.Id, new UserLoginInfo(loginProvider, user.ProviderKey));

                return(true);
            }

            foundUser = await UserManager.FindAsync(new UserLoginInfo("UserName", user.Email.ToLowerInvariant()));

            if (foundUser != null)
            {
                await UserManager.AddLoginAsync(foundUser.Id, new UserLoginInfo(loginProvider, user.ProviderKey));

                return(true);
            }

            var userToCreate = new AppUser
            {
                UserName     = user.UserName,
                Email        = user.Email,
                PhoneNumber  = user.PhoneNumber,
                PersonName   = user.PersonName,
                Tenant       = -1,
                RegisterHost = loginProvider
            };

            var result = await UserManager.CreateAsync(userToCreate, user.Password);

            if (!result.Succeeded)
            {
                return(false);
            }
            var    createdUser = UserManager.FindByName(userToCreate.UserName);
            String token       = await UserManager.GenerateEmailConfirmationTokenAsync(createdUser.Id);

            await UserManager.AddLoginAsync(createdUser.Id, new UserLoginInfo(loginProvider, user.ProviderKey));

            await UserManager.ConfirmEmailAsync(createdUser.Id, token);

            await UserManager.UpdateAsync(createdUser);

            return(true);
        }
        public static int DeleteExternalUserInfo(int?externalUserInfoId)
        {
            using (var smsDB = new SMSEntities())
            {
                ExternalUserInfo externalUserInfo = smsDB.ExternalUserInfoes.Find(externalUserInfoId);

                if (externalUserInfo != null)
                {
                    smsDB.ExternalUserInfoes.Remove(externalUserInfo);
                    return(smsDB.SaveChanges());
                }
                else
                {
                    return(0); // no record found
                }
            }
        }
Exemplo n.º 7
0
        public GenericAjaxResponse <ExternalUserInfo> UpdateUser(ExternalUserInfo externalUserAccount)
        {
            var request = new RestRequest("api/Userinfo/UpdateUser", Method.POST);

            request.RequestFormat = DataFormat.Json;
            request.AddJsonBody(externalUserAccount);
            var response = _restClient.Execute <GenericResponse <ExternalUserInfo> >(request);

            if (response.ResponseStatus == ResponseStatus.Completed && response.Data != null)
            {
                GenericAjaxResponse <ExternalUserInfo> apiResponse = new GenericAjaxResponse <ExternalUserInfo>();
                apiResponse.Success = response.Data.Success;
                apiResponse.Data    = response.Data.Data;
                apiResponse.Errors  = response.Data.Errors;
                return(apiResponse);
            }
            else
            {
                return(null);
            }
        }
        public static int EditExternalUserInfo(ExternalUserInfo userToEdit)
        {
            //create DBContext object
            using (var smsDB = new SMSEntities())
            {
                ExternalUserInfo externalUser = smsDB.ExternalUserInfoes.Find(userToEdit.ExternalUserInfoID);
                externalUser.FirstName  = userToEdit.FirstName;
                externalUser.LastName   = userToEdit.LastName;
                externalUser.MiddleName = userToEdit.MiddleName;
                externalUser.Pin        = userToEdit.Pin;
                externalUser.School     = userToEdit.School;
                externalUser.SchoolID   = userToEdit.SchoolID;
                externalUser.Address1   = userToEdit.Address1;
                externalUser.Address2   = userToEdit.Address2;
                externalUser.City       = userToEdit.City;
                externalUser.Country    = userToEdit.Country;
                externalUser.CreateDate = userToEdit.CreateDate;
                externalUser.EmailID    = userToEdit.EmailID;
                externalUser.State      = userToEdit.State;

                return(smsDB.SaveChanges());
            }
        }
        public static int AddSchool(School schoolToInsert)
        {
            //create DBContext object
            using (var smsDB = new SMSEntities())
            {
                //Add Student object into Students DBset
                schoolToInsert.CreateDate = DateTime.Now;
                schoolToInsert.IsActive   = true;
                smsDB.Schools.Add(schoolToInsert);

                // call SaveChanges method to save student into database
                smsDB.SaveChanges();

                // Add Default Admin User into database when school is added.
                ExternalUserInfo externalUserInfo = new ExternalUserInfo();
                externalUserInfo.SchoolID = schoolToInsert.SchoolID;
                externalUserInfo.EmailID  = "Admin@" + externalUserInfo.SchoolID + ".com";

                smsDB.ExternalUserInfoes.Add(externalUserInfo);
                smsDB.SaveChanges();

                ExternalUserLogin externalUserLogin = new ExternalUserLogin();
                externalUserLogin.ExternalUserInfoID = externalUserInfo.ExternalUserInfoID;
                externalUserLogin.ExternalUserName   = "******" + schoolToInsert.SchoolID;
                externalUserLogin.Password           = "******";

                smsDB.ExternalUserLogins.Add(externalUserLogin);
                smsDB.SaveChanges();

                ExternalUserLogin_UserGroup_Mapping userMapping = new ExternalUserLogin_UserGroup_Mapping();
                userMapping.ExternalUserLoginID = externalUserLogin.ExternalUserLoginID;
                userMapping.UserGroupId         = 1;

                smsDB.ExternalUserLogin_UserGroup_Mapping.Add(userMapping);
                return(smsDB.SaveChanges());
            }
        }
Exemplo n.º 10
0
        public async Task <IActionResult> Callback(string code, string state, string session_state)
        {
            // Get the return url for the frontend from the cookies.
            string returnUrl = HttpContext.Request.Cookies["returnUrl"];

            HttpContext.Response.Cookies.Delete("returnUrl");

            //Request an accesstoken and idtoken from the authority.
            RestClient  client  = new RestClient(config.FfhictOIDC.Authority + "/connect/token");
            RestRequest request = new RestRequest(Method.POST);

            request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
            request.AddParameter("grant_type", "authorization_code");
            request.AddParameter("code", code);
            request.AddParameter("redirect_uri", config.FfhictOIDC.RedirectUri);
            request.AddParameter("client_id", config.FfhictOIDC.ClientId);
            request.AddParameter("client_secret", config.FfhictOIDC.ClientSecret);
            IRestResponse response = client.Execute(request);

            if (response.StatusCode != HttpStatusCode.OK)
            {
                return(BadRequest("Could not validate the identity server authentication."));
            }

            // Parse the content to get the access token.
            ExternalConnectToken fhictToken = JsonConvert.DeserializeObject <ExternalConnectToken>(response.Content);

            if (string.IsNullOrWhiteSpace(fhictToken.AccessToken))
            {
                throw new Exception("The FHICT didn't return a correct response. Is the FHICT server accessible?", new Exception("Content:\n" + response.Content + "\n\nError:\n" + response.ErrorMessage, response.ErrorException));
            }

            JwtSecurityToken jwt = new JwtSecurityToken(fhictToken.AccessToken);
            string           idp = (string)jwt.Payload.FirstOrDefault(c => c.Key.Equals("idp")).Value;
            string           iss = (string)jwt.Payload.FirstOrDefault(c => c.Key.Equals("iss")).Value;

            ExternalResult result = new ExternalResult
            {
                Schema    = iss,
                Claims    = jwt.Claims,
                ReturnUrl = returnUrl,
                IdToken   = fhictToken.IdToken
            };

            // lookup our user and external provider info
            (IdentityUser user, string provider, string providerUserId, IEnumerable <Claim> claims) = await FindUserFromExternalProvider(result);

            if (user == null)
            {
                //Retrieve more user information from the external source.
                // Get User information
                RestClient  informationClient  = new RestClient($"{iss}/connect/userinfo");
                RestRequest informationRequest = new RestRequest(Method.GET);
                informationRequest.AddHeader("Authorization", $"Bearer {fhictToken.AccessToken}");
                IRestResponse    informationResponse = informationClient.Execute(informationRequest);
                ExternalUserInfo userinfo            = JsonConvert.DeserializeObject <ExternalUserInfo>(informationResponse.Content);

                List <Claim> claimsList = claims.ToList();
                claimsList.Add(new Claim("email", userinfo.PreferredUsername));
                claimsList.Add(new Claim("idp", idp));
                claimsList.Add(new Claim("name", userinfo.Name));
                IdentityUser toInsertuser = new IdentityUser()
                {
                    ProviderId        = provider,
                    ExternalSubjectId = providerUserId,
                    Email             = userinfo.Email,
                    Firstname         = userinfo.GivenName,
                    Lastname          = userinfo.FamilyName,
                    Name               = userinfo.Name,
                    Username           = userinfo.PreferredUsername,
                    ExternalProfileUrl = userinfo.Profile
                };

                // simply auto-provisions new external user
                user = await identityUserService.AutoProvisionUser(toInsertuser);
            }

            // this allows us to collect any additional claims or properties
            // for the specific protocols used and store them in the local auth cookie.
            // this is typically used to store data needed for signout from those protocols.
            List <Claim>             additionalLocalClaims = new List <Claim>();
            AuthenticationProperties localSignInProps      = new AuthenticationProperties();

            ProcessLoginCallbackForOidc(result, additionalLocalClaims, localSignInProps);

            // issue authentication cookie for user
            IdentityServerUser isuser = new IdentityServerUser(user.SubjectId)
            {
                DisplayName      = user.Name,
                IdentityProvider = provider,
                AdditionalClaims = additionalLocalClaims
            };

            await HttpContext.SignInAsync(isuser, localSignInProps).ConfigureAwait(false);

            // delete temporary cookie used during external authentication
            await HttpContext.SignOutAsync(IdentityServerConstants.ExternalCookieAuthenticationScheme).ConfigureAwait(false);

            // check if external login is in the context of an OIDC request
            AuthorizationRequest context = await interaction.GetAuthorizationContextAsync(returnUrl).ConfigureAwait(false);

            await events.RaiseAsync(new UserLoginSuccessEvent(provider,
                                                              providerUserId,
                                                              user.SubjectId,
                                                              user.Username,
                                                              true,
                                                              context?.ClientId)).ConfigureAwait(false);

            if (context != null)
            {
                if (await clientStore.IsPkceClientAsync(context.ClientId).ConfigureAwait(false))
                {
                    // if the client is PKCE then we assume it's native, so this change in how to
                    // return the response is for better UX for the end user.
                    return(this.LoadingPage("Redirect", returnUrl));
                }
            }

            return(Redirect(returnUrl));
        }
Exemplo n.º 11
0
        /// <summary>
        /// Fetches an external user info for a given external account ID.
        /// <seealso cref="Release" />
        /// </summary>
        /// <param name="options">Structure containing the account ID being accessed</param>
        /// <param name="outExternalUserInfo">The external user info. If it exists and is valid, use <see cref="Release" /> when finished</param>
        /// <returns>
        /// <see cref="Result.Success" /> if the information is available and passed out in OutExternalUserInfo
        /// <see cref="Result.InvalidParameters" /> if you pass a null pointer for the out parameter
        /// <see cref="Result.NotFound" /> if the external user info is not found
        /// </returns>
        public Result CopyExternalUserInfoByAccountId(CopyExternalUserInfoByAccountIdOptions options, out ExternalUserInfo outExternalUserInfo)
        {
            System.IntPtr optionsAddress = new System.IntPtr();
            Helper.TryMarshalSet <CopyExternalUserInfoByAccountIdOptionsInternal, CopyExternalUserInfoByAccountIdOptions>(ref optionsAddress, options);

            var outExternalUserInfoAddress = System.IntPtr.Zero;

            var funcResult = EOS_UserInfo_CopyExternalUserInfoByAccountId(InnerHandle, optionsAddress, ref outExternalUserInfoAddress);

            Helper.TryMarshalDispose(ref optionsAddress);

            if (Helper.TryMarshalGet <ExternalUserInfoInternal, ExternalUserInfo>(outExternalUserInfoAddress, out outExternalUserInfo))
            {
                EOS_UserInfo_ExternalUserInfo_Release(outExternalUserInfoAddress);
            }

            return(funcResult);
        }