Пример #1
0
        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;
        }        
Пример #2
0
        /// <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;
        }
Пример #3
0
        /// <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;
        }
Пример #4
0
        /// <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;
        }