示例#1
0
        public async Task <ActionResult> RegisterEmployeeUser(RegisterEmployeeViewModel model)
        {
            if (ModelState.IsValid)
            {
                // Check to see if this user is in the existing database
                LogicLayer.UserManager usrMgr = new LogicLayer.UserManager();
                try
                {
                    if (usrMgr.FindUser(model.Email))
                    {
                        // If this user already exists, we need to use the regular Register method
                        return(RedirectToAction("Register", "Account"));
                    }
                    // Not an existing user, create a DataObjects.User without roles
                    else
                    {
                        var employee = new DataObjects.User()
                        {
                            // These fields are need by sp_insert_user
                            Email       = model.Email,
                            FirstName   = model.GivenName,
                            LastName    = model.FamilyName,
                            PhoneNumber = model.PhoneNumber,
                        };
                        // Add the DataObjects.User to Employe table
                        if (usrMgr.AddUser(employee))
                        {
                            var employeeID = usrMgr.RetrieveUserIDFromEmail(model.Email);
                            var user       = new ApplicationUser()
                            {
                                EmployeeID = employeeID,
                                GivenName  = model.GivenName,
                                FamilyName = model.FamilyName,
                                UserName   = model.Email,
                                Email      = model.Email
                            };
                            var result = await UserManager.CreateAsync(user, "newuser");

                            if (result.Succeeded)
                            {
                                return(RedirectToAction("Index", "Admin"));
                            }
                            AddErrors(result);
                        }
                    }
                }
                catch
                {
                    // Creating Employee Failed
                    return(View(model));
                }
            }
            // ModelState was not valid
            return(View(model));
        }
        /// <summary>
        /// Sets User Default Profile
        /// </summary>
        /// <param name="userId">string user id</param>
        /// <param name="defaultProfileId">string profile id</param>
        /// <returns>System.Theading.Tasks.Task</returns>
        public async Task <SyncState> SetUserDefaultProfile(string userId, string defaultProfileId)
        {
            DataObjects.User user = await userTable.LookupAsync(userId);

            if (user != null)
            {
                user.DefaultProfileId = defaultProfileId;
                await userTable.UpdateAsync(user);
            }
            return(await SyncUser());
        }
 /// <summary>
 /// Updates a User and Syncs with mobile API values
 /// </summary>
 /// <param name="user">DataObjects.User row to add or update</param>
 /// <returns>System.Threading.Tasks.Task</returns>
 public async Task UpdateUser(DataObjects.User user)
 {
     try
     {
         await userTable.UpdateAsync(user);
         await SyncUser();
     }
     catch (Exception ex)
     {
         Debug.WriteLine("Error updating user: " + ex.Message);
     }
 }
        public async Task <ActionResult> RegisterEmployeeUser(RegisterEmployeeViewModel model)
        {
            if (ModelState.IsValid)
            {
                // check to see if the user is in the existing database
                LogicLayer.UserManager usrMgr = new LogicLayer.UserManager();
                try
                {
                    if (usrMgr.FindUser(model.Email))
                    {
                        // if the user already exists, we need to use the regular Register method
                        return(RedirectToAction("Register", "Account"));
                    }
                    else // not an existing user, create a DataObjects.User without any roles
                    {
                        var employee = new DataObjects.User()
                        {
                            // these fields are needed by sp_insert_user
                            Email       = model.Email,
                            FirstName   = model.GivenName,
                            LastName    = model.FamilyName,
                            PhoneNumber = model.PhoneNumber
                        };
                        if (usrMgr.CreateEmployee(employee.FirstName, employee.LastName, employee.PhoneNumber, employee.Email)) // add the DataObjects.User to Employee table
                        {
                            var employeeID = usrMgr.RetrieveUserIdFromEmail(model.Email);
                            var user       = new ApplicationUser // if it worked, create an Identity user
                            {
                                EmployeeID = employeeID,
                                GivenName  = model.GivenName,
                                FamilyName = model.FamilyName,
                                UserName   = model.Email,
                                Email      = model.Email
                            };
                            var result = await UserManager.CreateAsync(user, "newuser");

                            if (result.Succeeded) // go back to Admin/Index View
                            {
                                return(RedirectToAction("Index", "Admin"));
                            }
                            AddErrors(result);
                        }
                    }
                }
                catch
                {
                    // creating employee failed
                    return(View(model));
                }
            }
            // modelstate was not valid
            return(View(model));
        }
示例#5
0
        public static DataObjects.User MapFromDto(this DataTransferObject.UserDto itemDto)
        {
            if (itemDto == null) return null;

            var item = new DataObjects.User ();
                item.UserId = itemDto.UserId;
                item.Login = itemDto.Username;
                item.Created = itemDto.Created;
                item.Email = itemDto.Email;

            return item;
        }
示例#6
0
        public static DataTransferObject.UserDto MapToDto(this DataObjects.User item)
        {
            if (item == null)
            {
                return(null);
            }

            var itemDto = new DataTransferObject.UserDto();

            itemDto.UserId   = item.UserId;
            itemDto.Username = item.Login;
            itemDto.Created  = item.Created;
            itemDto.Email    = item.Email;

            return(itemDto);
        }
示例#7
0
        public static DataObjects.User MapFromDto(this DataTransferObject.UserDto itemDto)
        {
            if (itemDto == null)
            {
                return(null);
            }

            var item = new DataObjects.User();

            item.UserId  = itemDto.UserId;
            item.Login   = itemDto.Username;
            item.Created = itemDto.Created;
            item.Email   = itemDto.Email;

            return(item);
        }
示例#8
0
        // GET api/<controller>
        public async Task <User> Get()
        {
            if (credentials == null)
            {
                // get the credentials of the user who already signed in
                credentials = await User.GetAppServiceIdentityAsync <FacebookCredentials>(Request);
            }
            fbRequestUrl = "https://graph.facebook.com/me?fields=name,email,id&access_token=" + credentials.AccessToken;
            var client = new HttpClient();
            var resp   = await client.GetAsync(fbRequestUrl);

            resp.EnsureSuccessStatusCode();

            var fbInfo = await resp.Content.ReadAsStringAsync();

            FacebookInfo info = JsonConvert.DeserializeObject <FacebookInfo>(fbInfo);

            context       = new ToDoTogetherAppContext();
            domainManager = new EntityDomainManager <DataObjects.User>(context, Request);

            var user = context.Users.FirstOrDefault(u => u.Email == info.Email);

            // create new user in the database if one doesn't already exist
            if (user == null)
            {
                user = new DataObjects.User {
                    Email = info.Email, UserName = info.Name, ProviderId = info.Id
                };
                await domainManager.InsertAsync(user);
            }
            // add user to the database with just an email (user was previously added by someone else to the project as a colaborator)
            else if (string.IsNullOrEmpty(user.ProviderId))
            {
                user.UserName   = info.Name;
                user.ProviderId = info.Id;
                await context.SaveChangesAsync();
            }

            return(user);
        }
        /// <summary>
        /// Sets Current User Data in local tables.
        /// </summary>
        /// <param name="Id">String Guid of current authorized user</param>
        /// <returns>System.Threading.Tasks.Task</returns>
        public async Task SetNewUser(string Id)
        {
            try
            {
                DataObjects.Profile defaultProfile = null;
                //New User, User should be connected to internet for sign in to work.
                //Need to sync user table to see if user already exists.
                if (string.IsNullOrEmpty(_currentUserId) || _currentUserId == Guid.Empty.ToString())
                {
                    await SyncUser();
                }
                DataObjects.User currentUser = await userTable.LookupAsync(Id);

                //If user still not found after sync need to insert new user
                if (currentUser == null || currentUser.Id != Id)
                {
                    currentUser = new DataObjects.User()
                    {
                        Id = Id, ActiveDirectoryObjectId = Id
                    };
                    await userTable.InsertAsync(currentUser);

                    defaultProfile = new DataObjects.Profile()
                    {
                        Id = Guid.NewGuid().ToString(), PrimaryUserId = currentUser.Id
                    };
                    await AddUpdateProfile(defaultProfile);
                    await SetUserDefaultProfile(currentUser.Id, defaultProfile.Id);
                    await SyncUser();
                    await SyncProfile();
                }
                else
                {
                    //User Existed In Cloud, retrieve profile
                    await SyncProfile();

                    defaultProfile = await GetProfile(currentUser.DefaultProfileId);

                    if (defaultProfile == null)
                    {
                        defaultProfile = new DataObjects.Profile()
                        {
                            Id = Guid.NewGuid().ToString(), PrimaryUserId = currentUser.Id
                        };
                        await AddUpdateProfile(defaultProfile);
                        await SetUserDefaultProfile(currentUser.Id, defaultProfile.Id);
                        await SyncUser();
                        await SyncProfile();
                    }
                }

                //Make Sure user has a profile.
                _currentUserId    = Id;
                _currentProfileId = defaultProfile.Id;
                _isLoggedIn       = true;
                await SyncPump();
                await SyncChild();
                await SyncMedia();

                await Task.WhenAll(new Task[] { SyncPresetExperiences(),
                                                SyncUserExperiences(),
                                                SyncHistoricalSessions(),
                                                SyncCaregiverRequest(),
                                                SyncCaregiverRelation() });
            }
            catch (Exception ex)
            {
                string error = ex.Message;
            }
            finally
            {
                OnSetUserCompleteEvent(new object());
            }
        }
示例#10
0
        public async Task <IHttpActionResult> GetMe()
        {
            //var settings = this.Configuration.GetMobileAppSettingsProvider().GetMobileAppSettings();
            //var traceWriter = this.Configuration.Services.GetTraceWriter();

            var userId = this.User.GetUserId();
            var creds  = await this.User.GetAppServiceIdentityAsync <FacebookCredentials>(this.Request);

            string facebookUserId = null;
            string firstName      = null;
            string lastName       = null;
            string eMail          = null;
            string imageUrl       = null;
            string profileUrl     = null;

            using (var db = new timelineformsContext())
            {
                var userDb = db.Users.FirstOrDefault(u => u.Id == userId);
                if (userDb == null)
                {
                    // Inserts the user into the database.
                    facebookUserId = creds.UserClaims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier).Value;
                    firstName      = creds.UserClaims.FirstOrDefault(c => c.Type == ClaimTypes.GivenName).Value;
                    lastName       = creds.UserClaims.FirstOrDefault(c => c.Type == ClaimTypes.Surname).Value;
                    eMail          = creds.UserClaims.FirstOrDefault(c => c.Type == ClaimTypes.Email).Value;
                    profileUrl     = creds.UserClaims.FirstOrDefault(c => c.Type == FacebookProfileUrlClaim).Value;
                    imageUrl       = $"https://graph.facebook.com/{facebookUserId}/picture?width=150";

                    userDb = new DataObjects.User
                    {
                        Id             = userId,
                        FacebookUserId = facebookUserId,
                        FirstName      = firstName,
                        LastName       = lastName,
                        EMail          = eMail,
                        ImageUrl       = imageUrl,
                        ProfileUrl     = profileUrl,
                        Deleted        = false
                    };

                    db.Users.Add(userDb);
                    await db.SaveChangesAsync();
                }
                else
                {
                    // The user already exists. Retrieves the information.
                    facebookUserId = userDb.FacebookUserId;
                    firstName      = userDb.FirstName;
                    lastName       = userDb.LastName;
                    eMail          = userDb.EMail;
                    imageUrl       = userDb.ImageUrl;
                    profileUrl     = userDb.ProfileUrl;
                }
            }

            var user = new User
            {
                UserId         = userId,
                FacebookUserId = facebookUserId,
                FirstName      = firstName,
                LastName       = lastName,
                EMail          = eMail,
                ImageUrl       = imageUrl,
                ProfileUrl     = profileUrl
            };

            return(Ok(user));
        }
示例#11
0
        public async Task <ActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                // check to see if this user is in the existing database
                LogicLayer.UserManager usrMgr = new LogicLayer.UserManager();
                try
                {
                    if (usrMgr.FindUser(model.Email))
                    {
                        // this requires the user to use the same password as the one in the internal database
                        var oldUser = usrMgr.AuthenticateUser(model.Email, model.Password);
                        var user    = new ApplicationUser
                        {
                            // populate these fields with wxisting data from oldUser
                            GivenName  = oldUser.FirstName,
                            FamilyName = oldUser.LastName,
                            PersonID   = oldUser.PersonID,

                            // populate these fields normally
                            UserName = model.Email,
                            Email    = model.Email
                        };
                        // create the user with the Identity system UserManager normally
                        var result = await UserManager.CreateAsync(user, model.Password);

                        if (result.Succeeded)
                        {
                            // use the oldUser.Roles list to add the internally assigned roles to the user
                            foreach (var role in oldUser.Roles)
                            {
                                UserManager.AddToRole(user.Id, role);
                            }
                            await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);

                            return(RedirectToAction("Index", "Home"));
                        }
                        AddErrors(result);
                    }
                    else // not an existing user, create a user withou
                    {
                        var user = new ApplicationUser
                        {
                            // We will uncomment the following two lines later, once our ViewModel and
                            // our View are updated to ask for them:
                            GivenName  = model.GivenName,
                            FamilyName = model.FamilyName,
                            UserName   = model.Email,
                            Email      = model.Email
                        };
                        var result = await UserManager.CreateAsync(user, model.Password);

                        if (result.Succeeded)
                        {
                            // my code
                            var dbUser = new DataObjects.User
                            {
                                FirstName = model.GivenName,
                                LastName  = model.FamilyName,
                                Email     = model.Email
                            };
                            usrMgr.AddNewlyRegisteredUser(dbUser, model.Password);


                            await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);

                            return(RedirectToAction("Index", "Home"));
                        }
                        AddErrors(result);
                    }
                }
                catch
                {
                    // creating old user failed, probably because AuthenticateUser failed
                    return(View(model));
                }
            }
            // modelstate was not valid
            return(View(model));
        }