public IUserService CreateUserServiceNoPermissions(User user, InventorySoftwareType version, bool storePassword, string password = null)
        {
            var userEntity = _context.Users.Include(e => e.Permission).FirstOrDefault(e => e.UserName == user.UserName);

            if (userEntity != null)
            {
                return(this.CreateServiceDefualtPermissions(userEntity, storePassword, version, password));
            }
            else
            {
                return(this.CreateServiceNewUserEntity(user, storePassword, version, password: password));
            }
        }
        public LogInResponce LogInWithPassword(string username, string password, bool storePassword, InventorySoftwareType version)
        {
            try {
                var result = this._domainOperations.Authenticate(username, password);
                switch (result.Status)
                {
                case AuthenticationStatus.Authenticated: {
                    var    user       = ((AuthenticatedResult)result).User;
                    string permission = ((AuthenticatedResult)result).Permission;
                    var    service    = this._userServiceProvider.CreateUserServiceUserAuthenticated(user, version, storePassword, permission, password);
                    return(new LogInResponce(service));
                }

                case AuthenticationStatus.InvalidCredentials: {
                    return(new LogInResponce("Invalid Credentials,please try logging in again without saved password"));
                }

                case AuthenticationStatus.UserNotFound: {
                    return(new LogInResponce("User was no found on domain, Please contact administrator"));
                }

                case AuthenticationStatus.NoPermissions: {
                    var user    = ((NoPermissionsResult)result).User;
                    var service = this._userServiceProvider.CreateUserServiceNoPermissions(user, version, storePassword, password);
                    return(new LogInResponce(service));
                }

                default: {
                    return(new LogInResponce("Internal Error, Please contact administrator"));
                }
                }
            } catch (LDAPCommunicationException e) {
                throw e;
            }
        }
 public UserService(User currentUser, Session currentSession, Permission userPermission, InventorySoftwareType softwareVersion)
 {
     this.CurrentUser     = currentUser;
     this.CurrentSession  = currentSession;
     this.UserPermission  = userPermission;
     this.SoftwareVersion = softwareVersion;
     this.Initialize();
 }
 private IUserService CreateService(User user, bool storePassword, string permission, InventorySoftwareType version, string password = null)
 {
     if (user.Permission.Name == permission)
     {
         var userPermission = user.Permission;
         if (storePassword && !string.IsNullOrEmpty(password))
         {
             this.GeneratePasswordEncryption(password, user);
         }
         Session session = new Session(user);
         _context.Sessions.Add(session);
         user.SoftwareVersion = version;
         _context.Entry <User>(user).State = EntityState.Modified;
         _context.SaveChanges();
         _context.Entry <User>(user).State = EntityState.Detached;
         _context.Entry <Permission>(userPermission).State = EntityState.Detached;
         _context.Entry <Session>(session).State           = EntityState.Detached;
         return(new UserService(user, session, userPermission, user.SoftwareVersion));
     }
     else
     {
         var permissionEnity = _context.Permissions.First(e => e.Name == permission);
         if (permissionEnity != null)
         {
             user.Permission = permissionEnity;
             if (storePassword && !string.IsNullOrEmpty(password))
             {
                 this.GeneratePasswordEncryption(password, user);
             }
             Session session = new Session(user);
             user.SoftwareVersion = version;
             _context.Entry <User>(user).State = EntityState.Modified;
             _context.Sessions.Add(session);
             _context.SaveChanges();
             _context.Entry <User>(user).State = EntityState.Detached;
             _context.Entry <Permission>(permissionEnity).State = EntityState.Detached;
             _context.Entry <Session>(session).State            = EntityState.Detached;
             return(new UserService(user, session, permissionEnity, user.SoftwareVersion));
         }
         else
         {
             Permission newPermission = new Permission()
             {
                 Name        = permission,
                 Description = ""
             };
             _context.Permissions.Add(newPermission);
             user.Permission = newPermission;
             if (storePassword && !string.IsNullOrEmpty(password))
             {
                 this.GeneratePasswordEncryption(password, user);
             }
             Session session = new Session(user);
             _context.Sessions.Add(session);
             user.SoftwareVersion = version;
             _context.Entry <User>(user).State = EntityState.Modified;
             _context.SaveChanges();
             _context.Entry <User>(user).State = EntityState.Detached;
             _context.Entry <Permission>(newPermission).State = EntityState.Detached;
             _context.Entry <Session>(session).State          = EntityState.Detached;
             return(new UserService(user, session, newPermission, user.SoftwareVersion));
         }
     }
 }
        private IUserService CreateServiceDefualtPermissions(User userEntity, bool storePassword, InventorySoftwareType version, string password = null)
        {
            var permission = this._context.Permissions.FirstOrDefault(e => e.Name == LogInService.DefaultDomainPermissions);

            if (permission != null)
            {
                if (this._domainManager.AddUserToGroup(userEntity.UserName, LogInService.DefaultDomainPermissions))
                {
                    userEntity.Permission = permission;
                    if (storePassword && !string.IsNullOrEmpty(password))
                    {
                        this.GeneratePasswordEncryption(password, userEntity);
                    }
                    Session session = new Session(userEntity);
                    userEntity.SoftwareVersion = version;
                    _context.Entry <User>(userEntity).State = EntityState.Modified;
                    _context.Sessions.Add(session);
                    _context.SaveChanges();
                    _context.Entry <User>(userEntity).State       = EntityState.Detached;
                    _context.Entry <Permission>(permission).State = EntityState.Detached;
                    _context.Entry <Session>(session).State       = EntityState.Detached;
                    return(new UserService(userEntity, session, permission, userEntity.SoftwareVersion));
                }
                else
                {
                    return(null);
                }
            }
            else
            {
                return(null);
            }
        }