public static bool Update(this UserModel model, out Status status) { try { if (model.EmailExists()) { status = Status.DuplicateEmail; return false; } if (model.ScreenNameExists()) { status = Status.DuplicateScreenName; return false; } using (var db = new DbContextHelper()) { User entity = GetUser(db, model.IdKey); if (entity == null) { status = Status.DataNotFound; return false; } entity.FirstName = model.FirstName; entity.LastName = model.LastName; entity.ScreenName = model.ScreenName; entity.Modified = DateTime.Now; entity.AccessToken = model.AccessToken; entity.FacebookId = model.FacebookId; entity.Link = model.Link; var currentTicket = GetFormsAuthenticationTicket(); if (currentTicket.IsInRole("Administrator")) { if (model.Roles.Count == 0) { status = Status.RoleRequired; return false; } // Update the entity user/item relationship entity.Roles.Clear(); var roles = model.Roles.GetRolesFromModel(db); foreach (var item in roles) { entity.Roles.Add(item); } entity.Ministries.Clear(); // Update the entity user/ministry relationship if (model.Ministries != null && model.Ministries.Count > 0) { var ministries = model.Ministries.GetMinistriesFromModel(db); foreach (var item in ministries) { entity.Ministries.Add(item); } } } //end IsInRole check db.SaveChanges(); try // Re-issue authorization currentTicket { // Get current user id Guid userIdKey = currentTicket.IdKey(); // Match? if (userIdKey == entity.IdKey) model.CreateAuthorizationTicket(); } catch (Exception ex) { LogHelper.LogFatalError("UserModelHelper.Update", ex); } model = GetUserModelForEdit(entity.IdKey.ToString()); status = Status.Success; return true; } } catch (Exception ex) { LogHelper.LogFatalError("Manage.UserModelHelper.Edit", ex); status = Status.SystemException; } return false; }
/// <summary> /// Authorize the current user on the site. Authenication occurs via Facebook app (signin) /// </summary> /// <param name="model">User model</param> /// <param name="status">status of authorizing the user</param> /// <param name="code">Facebook Oauth code used to retrieve a Facebook access token</param> /// <returns></returns> /// <remarks>Requires the code to be set on the model. This is used to retrieve a Facebook access token</remarks> public static bool Authorize(this UserModel model, string code, out Status status) { try { using (var db = new DbContextHelper()) { // TODO: Validate the access token var user = ManageUserModelHelper.GetUser(db, idKey: model.IdKey, email: model.Email, screenName: model.ScreenName, facebookId: model.FacebookId); if (user == null) { return model.Register(out status); } user.AccessToken = model.AccessToken; user.LastAccessed = DateTime.Now; user.UserStatusEnum = UserStatus.Online; db.SaveChanges(); // Save the user basic information model.Id = user.Id; model.IdKey = user.IdKey; model.ScreenName = user.ScreenName; model.FirstName = user.FirstName; model.LastName = user.LastName; model.UserStatus = user.UserStatusEnum; model.Roles = user.Roles.ToList().GetRoleModelsFromRoles(); model.CreateAuthorizationTicket(); status = Status.Success; return true; } } catch (Exception ex) { LogHelper.LogFatalError("FacebookHelper.Authorize", ex); status = Status.SystemException; } return false; }
/// <summary> /// Registers a new user on our application using the information /// </summary> /// <param name="model">User with the Facebook access token set to a valid value.</param> /// <param name="status">Status of registring this user</param> /// <returns></returns> /// <remarks>Users is not on our system yet. The model's Facebook access token must be set in order to register the user on our application.</remarks> public static bool Register(this UserModel model, out Status status) { try { using (var db = new DbContextHelper()) { if (model.EmailExists()) { status = Status.DuplicateEmail; return false; } var user = db.Users.Create(); user.Roles = new List<Role>(); // TODO: Get Facebook app role for current user // If administrator or developer grant full access if (false) { user.Roles.Add(ManageRoleModelHelper.GetRole(Role.ADMINISTRATOR_ID, db)); user.Roles.Add(ManageRoleModelHelper.GetRole(Role.CONTENT_APPROVER_ID, db)); user.Roles.Add(ManageRoleModelHelper.GetRole(Role.CONTENT_PUBLISHER_ID, db)); user.Roles.Add(ManageRoleModelHelper.GetRole(Role.MINISTRY, db)); } else { user.Roles.Add(ManageRoleModelHelper.GetRole(Role.BASIC_ID, db)); } user.IdKey = Guid.NewGuid(); user.FacebookId = model.FacebookId; user.Link = model.Link; user.FirstName = model.FirstName; user.LastName = model.LastName; user.ScreenName = model.ScreenName; user.AccessToken = model.AccessToken; user.UserStatusEnum = UserStatus.Active; user.Created = DateTime.Now; user.LastAccessed = DateTime.Now; user.Email = model.Email; user.ScreenName = model.Email; user = db.Users.Add(user); db.SaveChanges(); model.Id = user.Id; model.IdKey = user.IdKey; model.UserIdKey = user.IdKey; List<Role> roles = user.Roles as List<Role>; model.Roles = roles.GetRoleModelsFromRoles(); model.CreateAuthorizationTicket(); status = Status.Success; return true; } } catch (Exception ex) { LogHelper.LogFatalError("FacebookHelper.Register", ex); status = Status.SystemException; } return false; }
/// <summary> /// Authorize the current user on the site. Authenication occurs via Facebook app /// </summary> /// <param name="model"></param> /// <param name="status"></param> /// <returns></returns> public static bool Authorize(this UserModel model, out Status status) { try { using (var db = new DbContextHelper()) { var user = ManageUserModelHelper.GetUser(db, model.IdKey, model.Email); if (user == null) { status = Status.InvalidLoginPassword; return false; } user.AccessToken = model.AccessToken; user.LastAccessed = DateTime.Now; user.UserStatusEnum = UserStatus.Online; db.SaveChanges(); // Save the user basic information model.Id = user.Id; model.IdKey = user.IdKey; model.ScreenName = user.ScreenName; model.FirstName = user.FirstName; model.LastName = user.LastName; model.UserStatus = user.UserStatusEnum; model.Roles = user.Roles.ToList().GetRoleModelsFromRoles(); model.CreateAuthorizationTicket(); status = Status.Success; return true; } } catch (Exception ex) { LogHelper.LogFatalError("UserModelHelper.Authorize", ex); status = Status.SystemException; } return false; }