예제 #1
0
        public JsonResult UpdateAppUserInformation(AppUserInformationModel appUserInformationModel)
        {
            Response <bool> response = new Response <bool>();

            appUserProvider = new AppUserProvider();

            AppUserModel appUserModel = SessionExtension.GetSessionUser(HttpContext.Session);

            if (appUserModel != null)
            {
                AppUserModel appUserTokenModel = SessionExtension.GetSessionUser(HttpContext.Session);

                appUserInformationModel.TokenKey = appUserModel.TokenKey;

                appUserInformationModel.AppUserId = appUserModel.AppUser.AppUserId;

                InfrastructureModel <bool> infrastructureModel = appUserProvider.Update(appUserInformationModel);

                response = new Response <bool>
                {
                    Data    = infrastructureModel.ResultStatus,
                    Message = "success",
                    Status  = infrastructureModel.ResultStatus,
                };
            }
            return(Json(response));
        }
예제 #2
0
        public JsonResult Login(AppUserLoginModel appUserLoginModel)
        {
            Response response = new Response();

            tokenProvider = new TokenProvider();
            try
            {
                appUserProvider = new AppUserProvider();

                AppUserModel appuserModel = appUserProvider.GetLoginUser(appUserLoginModel).ResultModel;

                if (appuserModel != null)
                {
                    SessionExtension.Set <AppUserModel>(HttpContext.Session, "Login", appuserModel);

                    response = new Response()
                    {
                        Message     = "success",
                        Status      = true,
                        RedirectUrl = Url.Action("Index", "Home")
                    };
                }
            }
            catch (Exception ex)
            {
                response = new Response()
                {
                    Message = "Fail",
                    Status  = false,
                };
            }
            return(Json(response));
        }
예제 #3
0
        public JsonResult ChangePassword(AppUserLoginModel appUserLoginModel)
        {
            Response <bool> response = new Response <bool>();

            appUserProvider = new AppUserProvider();

            AppUserModel appUserModel = SessionExtension.GetSessionUser(HttpContext.Session);

            if (appUserModel != null)
            {
                AppUserModel appUserTokenModel = SessionExtension.GetSessionUser(HttpContext.Session);

                appUserLoginModel.TokenKey  = appUserModel.TokenKey;
                appUserLoginModel.AppUserId = appUserModel.AppUser.AppUserId;

                InfrastructureModel <bool> infrastructureModel = appUserProvider.ChangePassword(appUserLoginModel);

                response = new Response <bool>()
                {
                    Data    = infrastructureModel.ResultModel,
                    Message = infrastructureModel.Message,
                    Status  = true,
                    Refresh = true
                };
            }
            return(Json(response));
        }
예제 #4
0
 public LoginPage()
 {
     InitializeComponent();
     appUserProvider   = new AppUserProvider();
     btnLogin.Clicked += BtnLogin_Clicked;
     NavigationPage.SetHasNavigationBar(this, false);
 }
        public async Task <UpdateResult> AddProvider(string id, AppUserProvider provider)
        {
            var query = _clearBuilder
                        .Eq(x => x.Id, id)
                        .UpdateAddToSet(x => x.ConnectedProviders, provider);

            await UpdateByQuery(query);

            return(new UpdateResult.Acknowledged(1, 1, id));
        }
예제 #6
0
        public JsonResult ResetAllInformation()
        {
            Response <bool> response = new Response <bool>();

            appUserProvider = new AppUserProvider();
            AppUserModel appUserModel = SessionExtension.GetSessionUser(HttpContext.Session);

            if (appUserModel != null)
            {
                AppUserModel appUserTokenModel = SessionExtension.GetSessionUser(HttpContext.Session);

                InfrastructureModel <bool> infrastructureModel = appUserProvider.ResetAllInformationAppUser(appUserTokenModel);

                response = new Response <bool>
                {
                    Data    = infrastructureModel.ResultStatus,
                    Message = infrastructureModel.Message,
                    Status  = infrastructureModel.ResultStatus,
                };
            }
            return(Json(response));
        }
예제 #7
0
        public JsonResult GetAppUserInformation(AppUserLoginModel appUserLoginModel)
        {
            Response <AppUserInformationModel> response = new Response <AppUserInformationModel>();

            appUserProvider = new AppUserProvider();
            AppUserModel appUserModel = SessionExtension.GetSessionUser(HttpContext.Session);

            if (appUserModel != null)
            {
                AppUserModel appUserTokenModel = SessionExtension.GetSessionUser(HttpContext.Session);
                InfrastructureModel <AppUserInformationModel> appUserInformationModel = appUserProvider.GetById(new AppUserLoginModel()
                {
                    AppUserId = appUserModel.AppUser.AppUserId, TokenKey = appUserModel.TokenKey
                });
                response = new Response <AppUserInformationModel>()
                {
                    Data    = appUserInformationModel.ResultModel,
                    Message = "succes",
                    Status  = true
                };
            }
            return(Json(response));
        }
        /// <summary>
        /// Invite new user or connect exists
        /// </summary>
        /// <param name="model">Provider create user model</param>
        /// <returns>UserDisplayModel</returns>
        public async Task <UserDisplayModel> InviteUser(ProviderUserCreateModel model)
        {
            var currentUser = await GetCurrentUser();

            if (!await _providerRepository.ExistsWithOwner(model.ProviderId, currentUser.Id))
            {
                throw new AccessDeniedException(currentUser.Id, typeof(AppUser));
            }

            if (model.Roles == null || !model.Roles.Any())
            {
                throw new AccessDeniedException("", typeof(AppUser));
            }

            model.Roles = model.Roles.Select(x => x.ToUpper()).ToList();

            var pShort = await _providerRepository.GetShortById(model.ProviderId);

            var roles = await _providerRepository.GetRolesById(model.ProviderId);

            var rolesToUse = roles.Where(x => model.Roles.Contains(x.Name)).ToList();

            var existsUser = await _appUserRepository.FindByEmailAsync(model.Email.ToLower(), new System.Threading.CancellationToken());

            if (existsUser == null)
            {
                existsUser = new AppUser
                {
                    Email     = model.Email.ToLower(),
                    FirstName = model.FirstName,
                    LastName  = model.LastName,
                    Tels      = new List <MRUserTel>(),
                    Status    = UserStatus.Invited,
                    UserName  = model.Email.ToLower(),
                };

                existsUser.ConnectedProviders = new List <AppUserProvider>
                {
                    new AppUserProvider
                    {
                        ProviderId   = pShort.Id,
                        ProviderName = pShort.Name,
                        Roles        = rolesToUse,
                        Metadata     = new List <AppUserProviderMeta>(),
                        UpdatedTime  = DateTime.UtcNow
                    }
                };

                var insertResult = await _appUserManager.CreateAsync(existsUser);

                if (!insertResult.Succeeded)
                {
                    throw new MRException();
                }

                await _appUserManager.AddToRoleAsync(existsUser, AppUserRoleList.USER);
            }
            else if (!existsUser.ConnectedProviders.Any(x => x.ProviderId == pShort.Id))
            {
                AppUserProvider provider = new AppUserProvider
                {
                    ProviderId   = pShort.Id,
                    Metadata     = new List <AppUserProviderMeta>(),
                    ProviderName = pShort.Name,
                    Roles        = rolesToUse,
                    UpdatedTime  = DateTime.UtcNow
                };

                if ((await _appUserRepository.AddProvider(existsUser.Id, provider)).ModifiedCount != 1)
                {
                    throw new MRException();
                }
            }
            else
            {
                throw new MRException();
            }

            Infrastructure.Model.Template.User.ProviderInviteTemplate templateModel = new Infrastructure.Model.Template.User.ProviderInviteTemplate
            {
                FirstName    = existsUser.FirstName,
                LastName     = existsUser.LastName,
                LoginLink    = "https://google.com",
                ProviderName = pShort.Name
            };

            var email = await _templateParser.Render("Email", "ProviderInvite", templateModel);

            await _emailSendTaskRepository.InsertEmail(existsUser.Email, "Mad Rat Studio invite", email, Infrastructure.Entities.Tasks.EmailTaskBot.MadRatBot);

            return(_mapper.Map <UserDisplayModel>(existsUser));
        }
예제 #9
0
        /// <summary>
        /// Login approve logic
        /// </summary>
        /// <param name="context">Context</param>
        /// <param name="token">User`s short live token</param>
        /// <returns></returns>
        public async Task <ApproveLogin> ProviderApproveLogin(HttpContext context, string token, string fingerprint)
        {
            if (string.IsNullOrWhiteSpace(token))
            {
                throw new MRSystemException();
            }

            var challengeResult = await _challengeShortLiveToken(token, fingerprint);

            if (!challengeResult.IsSuccess)
            {
                throw new MRSystemException(challengeResult.Error.Message);
            }

            var user = await _appUserRepository.Get(challengeResult.UserId);

            if (user == null)
            {
                throw new EntityNotFoundException(challengeResult.UserId, typeof(AppUser));
            }

            if (user.Isblocked)
            {
                throw new MRSystemException("User blocked");
            }

            var targetUProvider = user.ConnectedProviders.FirstOrDefault(x => x.ProviderId == challengeResult.ProviderId);

            if (targetUProvider == null)
            {
                targetUProvider = new AppUserProvider
                {
                    ProviderId   = challengeResult.ProviderId,
                    ProviderName = challengeResult.Provider.Name,
                    Roles        = challengeResult.Provider.Roles?.Where(x => x.IsDefault).ToList() ?? new List <ProviderRole>(),
                    UpdatedTime  = DateTime.UtcNow,
                    Metadata     = new List <AppUserProviderMeta>
                    {
                        _createMeta(context)
                    }
                };

                await _appUserRepository.AddProvider(user.Id, targetUProvider);
            }
            else
            {
                await _appUserRepository.AddProviderMeta(user.Id, targetUProvider.ProviderId, _createMeta(context));
            }

            var result = new ApproveLogin
            {
                AvatarUrl = user.Image?.Url,
                Email     = user.Email,
                FirstName = user.FirstName,
                LastName  = user.LastName,
                Id        = user.Id,
                Roles     = targetUProvider.Roles.Select(x => x.Name).ToList(),
            };

            return(result);
        }