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