Пример #1
0
        /// <summary>
        /// Register a new OCM User (identified by email/password)
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public User RegisterNewUser(API.Common.Model.RegistrationModel model)
        {
            model.EmailAddress = model.EmailAddress.Trim().ToLower();
            var existingUser = dataModel.Users.FirstOrDefault(u => u.EmailAddress.ToLower() == model.EmailAddress.ToLower().Trim());

            if (existingUser != null)
            {
                //if existing user has same email address, cannot perform new registration
                return(null);
            }

            var userDetails = new Core.Data.User();

            userDetails.IdentityProvider = "OCM";
            userDetails.Identifier       = model.EmailAddress;

            userDetails.Username        = model.Username;
            userDetails.EmailAddress    = model.EmailAddress;
            userDetails.DateCreated     = DateTime.UtcNow;
            userDetails.DateLastLogin   = DateTime.UtcNow;
            userDetails.IsProfilePublic = true;

            dataModel.Users.Add(userDetails);
            dataModel.SaveChanges();

            SetNewPassword(userDetails.Id, (PasswordChangeModel)model);
            AssignNewSessionToken(userDetails.Id);

            return(API.Common.Model.Extensions.User.BasicFromDataModel(userDetails));
        }
Пример #2
0
        public static Model.User FromDataModel(Core.Data.User source)
        {
            if (source == null)
            {
                return(null);
            }

            return(new Model.User()
            {
                ID = source.ID,
                IdentityProvider = source.IdentityProvider,
                Identifier = source.Identifier,
                CurrentSessionToken = source.CurrentSessionToken,
                Username = source.Username,
                Profile = source.Profile,
                Location = source.Location,
                WebsiteURL = source.WebsiteURL,
                ReputationPoints = source.ReputationPoints,
                Permissions = source.Permissions,
                PermissionsRequested = source.PermissionsRequested,
                DateCreated = source.DateCreated,
                DateLastLogin = source.DateLastLogin,
                IsProfilePublic = source.IsProfilePublic,
                IsPublicChargingProvider = source.IsPublicChargingProvider,
                IsEmergencyChargingProvider = source.IsEmergencyChargingProvider,
                Latitude = source.Latitude,
                Longitude = source.Longitude,
                EmailAddress = source.EmailAddress,
                SyncedSettings = source.SyncedSettings
            });
        }
Пример #3
0
 /// <summary>
 /// Register a new account in database
 /// </summary>
 /// <param name="username">User name</param>
 /// <param name="email">Email</param>
 /// <param name="password">Password</param>
 /// <returns>returns true if user added to database</returns>
 public bool Register(string email, string username, string password)
 {
     Core.Data.User user = new Core.Data.User();
     user.email    = email;
     user.username = username;
     user.password = password;
     Core.Data.DataProvider db = Core.Data.DataProvider.DataProviderFactory();
     return(db.Insert(user));
 }
Пример #4
0
        public static string GetProfileImageURL(Core.Data.User source)
        {
            if (String.IsNullOrEmpty(source.EmailAddress))
            {
                return(null);
            }
            var emailHash = OCM.Core.Util.SecurityHelper.GetMd5Hash(source.EmailAddress);

            return("https://www.gravatar.com/avatar/" + emailHash + "?s=80&d=robohash");
        }
Пример #5
0
 public bool UserAdd(Core.Data.User model)
 {
     try
     {
         UserRepository.Insert(model);
         return(true);
     }
     catch (Exception ex)
     {
         return(false);
     }
 }
Пример #6
0
        /// <summary>
        /// returns a User object with sensitive information removed
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static Model.User BasicFromDataModel(Core.Data.User source)
        {
            if (source == null)
            {
                return(null);
            }

            return(new Model.User()
            {
                ID = source.ID,
                Username = source.Username,
                ReputationPoints = source.ReputationPoints
            });
        }
Пример #7
0
        /// <summary>
        /// returns a User object with sensitive information removed
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        public static Model.User BasicFromDataModel(Core.Data.User source)
        {
            if (source == null)
            {
                return(null);
            }

            return(new Model.User()
            {
                ID = source.Id,
                Username = source.Username,
                ReputationPoints = source.ReputationPoints,
                ProfileImageURL = GetProfileImageURL(source)
            });
        }
Пример #8
0
        public static Model.User PublicProfileFromDataModel(Core.Data.User source)
        {
            if (source == null)
            {
                return(null);
            }

            return(new Model.User()
            {
                ID = source.ID,
                Username = source.Username,
                ReputationPoints = source.ReputationPoints,
                Location = source.Location,
                Profile = source.Profile,
                DateCreated = source.DateCreated,
                DateLastLogin = source.DateLastLogin
            });
        }
Пример #9
0
        public static Model.User PublicProfileFromDataModel(Core.Data.User source, bool includeEmailHash = false)
        {
            if (source == null)
            {
                return(null);
            }

            return(new Model.User()
            {
                ID = source.Id,
                Username = source.Username,
                ReputationPoints = source.ReputationPoints,
                Location = source.Location,
                Profile = source.Profile,
                DateCreated = source.DateCreated,
                DateLastLogin = source.DateLastLogin,
                ProfileImageURL = GetProfileImageURL(source)
            });
        }
Пример #10
0
        public Core.Data.User UserEdit(Core.Data.User model)
        {
            var newUser = UserRepository.GetById(model.Id);

            foreach (var item in model.GetType().GetProperties())
            {
                foreach (var item2 in newUser.GetType().GetProperties())
                {
                    if (item.GetValue(model) != null)
                    {
                        if (item2.Name == item.Name)
                        {
                            item2.SetValue(newUser, item.GetValue(model));
                        }
                    }
                }
            }

            UserRepository.Update(newUser);
            return(newUser);
        }
Пример #11
0
        private ActionResult ProcessLoginResult(string userIdentifier, string loginProvider, string name, string email)
        {
            //TODO: move all of this logic to UserManager
            string newSessionToken = Guid.NewGuid().ToString();

            using (var dataModel = new OCMEntities())
            {
                var userDetails = dataModel.Users.FirstOrDefault(u => u.Identifier.ToLower() == userIdentifier.ToLower() && u.IdentityProvider.ToLower() == loginProvider.ToLower());
                if (userDetails == null)
                {
                    //create new user details
                    userDetails = new Core.Data.User();
                    userDetails.IdentityProvider = loginProvider;
                    userDetails.Identifier       = userIdentifier;
                    if (String.IsNullOrEmpty(name) && loginProvider.ToLower() == "twitter")
                    {
                        name = userIdentifier;
                    }
                    if (String.IsNullOrEmpty(name) && email != null)
                    {
                        name = email.Substring(0, email.IndexOf("@"));
                    }

                    userDetails.Username        = name;
                    userDetails.EmailAddress    = email;
                    userDetails.DateCreated     = DateTime.UtcNow;
                    userDetails.DateLastLogin   = DateTime.UtcNow;
                    userDetails.IsProfilePublic = true;

                    //only update session token if new (also done on logout)
                    if (String.IsNullOrEmpty(userDetails.CurrentSessionToken))
                    {
                        userDetails.CurrentSessionToken = newSessionToken;
                    }

                    dataModel.Users.Add(userDetails);
                }
                else
                {
                    //update date last logged in and refresh users details if more information provided
                    userDetails.DateLastLogin = DateTime.UtcNow;

                    if (userDetails.Username == userDetails.Identifier && !String.IsNullOrEmpty(name))
                    {
                        userDetails.Username = name;
                    }
                    if (String.IsNullOrEmpty(userDetails.EmailAddress) && !String.IsNullOrEmpty(email))
                    {
                        userDetails.EmailAddress = email;
                    }

                    //only update session token if new (also done on logout)
                    if (String.IsNullOrEmpty(userDetails.CurrentSessionToken))
                    {
                        userDetails.CurrentSessionToken = newSessionToken;
                    }
                }

                //get whichever session token we used
                //newSessionToken = userDetails.CurrentSessionToken;

                //store updates to user
                dataModel.SaveChanges();

                PerformCoreLogin(OCM.API.Common.Model.Extensions.User.FromDataModel(userDetails));

                /*if (HttpContext.Items.ContainsKey("_postLoginRedirect"))
                 * {
                 *  string returnURL = HttpContext.Items["_postLoginRedirect"].ToString();
                 *  return Redirect(returnURL);
                 * }*/

                if (!String.IsNullOrEmpty(Session.GetString("_redirectURL")))
                {
                    string returnURL = Session.GetString("_redirectURL");
                    return(Redirect(returnURL));
                }
                else
                {
                    //nowhere specified to redirect to, redirect to home page
                    return(RedirectToAction("Index", "Home"));
                }
            }
        }
        private ActionResult ProcessLoginResult(string userIdentifier, string loginProvider, string name, string email)
        {
            //TODO: move all of this logic to UserManager
            string newSessionToken = Guid.NewGuid().ToString();

            var dataModel = new OCMEntities();
            var userDetails = dataModel.Users.FirstOrDefault(u => u.Identifier.ToLower() == userIdentifier.ToLower() && u.IdentityProvider.ToLower() == loginProvider.ToLower());
            if (userDetails == null)
            {
                //create new user details
                userDetails = new Core.Data.User();
                userDetails.IdentityProvider = loginProvider;
                userDetails.Identifier = userIdentifier;
                if (String.IsNullOrEmpty(name) && loginProvider.ToLower() == "twitter") name = userIdentifier;
                if (String.IsNullOrEmpty(name) && email != null) name = email.Substring(0, email.IndexOf("@"));

                userDetails.Username = name;
                userDetails.EmailAddress = email;
                userDetails.DateCreated = DateTime.UtcNow;
                userDetails.DateLastLogin = DateTime.UtcNow;
                userDetails.IsProfilePublic = true;

                //only update session token if new (also done on logout)
                if (String.IsNullOrEmpty(userDetails.CurrentSessionToken)) userDetails.CurrentSessionToken = newSessionToken;

                dataModel.Users.Add(userDetails);
            }
            else
            {
                //update date last logged in and refresh users details if more information provided
                userDetails.DateLastLogin = DateTime.UtcNow;

                if (userDetails.Username == userDetails.Identifier && !String.IsNullOrEmpty(name)) userDetails.Username = name;
                if (String.IsNullOrEmpty(userDetails.EmailAddress) && !String.IsNullOrEmpty(email)) userDetails.EmailAddress = email;

                //only update session token if new (also done on logout)
                if (String.IsNullOrEmpty(userDetails.CurrentSessionToken)) userDetails.CurrentSessionToken = newSessionToken;
            }

            //get whichever session token we used
            //newSessionToken = userDetails.CurrentSessionToken;

            //store updates to user
            dataModel.SaveChanges();

            PerformCoreLogin(OCM.API.Common.Model.Extensions.User.FromDataModel(userDetails));

            if (!String.IsNullOrEmpty((string)Session["_redirectURL"]))
            {
                string returnURL = Session["_redirectURL"].ToString();
                return Redirect(returnURL);
            }
            else
            {
                //nowhere specified to redirect to, redirect to home page
                return RedirectToAction("Index", "Home");
            }
        }
Пример #13
0
 public bool AddUserCheck(Core.Data.User model)
 {
     return(UserRepository.Table.Where(c => c.Email == model.Email || c.UserName == model.UserName).Any());
 }
Пример #14
0
        /// <summary>
        /// Register a new OCM User (identified by email/password)
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public User RegisterNewUser(API.Common.Model.RegistrationModel model)
        {
            model.EmailAddress = model.EmailAddress.Trim().ToLower();
            var existingUser = dataModel.Users.FirstOrDefault(u => u.EmailAddress.ToLower() == model.EmailAddress.ToLower().Trim());
            if (existingUser != null)
            {
                //if existing user has same email address, cannot perform new registration
                return null;
            }

            var userDetails = new Core.Data.User();
            userDetails.IdentityProvider = "OCM";
            userDetails.Identifier = model.EmailAddress;

            userDetails.Username = model.Username;
            userDetails.EmailAddress = model.EmailAddress;
            userDetails.DateCreated = DateTime.UtcNow;
            userDetails.DateLastLogin = DateTime.UtcNow;
            userDetails.IsProfilePublic = true;

            dataModel.Users.Add(userDetails);
            dataModel.SaveChanges();

            SetNewPassword(userDetails.ID, (PasswordChangeModel)model);
            AssignNewSessionToken(userDetails.ID);

            return API.Common.Model.Extensions.User.BasicFromDataModel(userDetails);
        }