public void CanGetEncryptedTokenTest()
        {
            IMateDAO <Mate> MateDAO  = new MateDAO(_connection);
            Mate            testMate = new Mate();

            testMate.FirstName   = "Miguel";
            testMate.LastName    = "Dev";
            testMate.UserName    = "******";
            testMate.Password    = "******";
            testMate.Email       = "*****@*****.**";
            testMate.Description = "Lorem Ipsum is simply dummy text of the printing and typesetting industry.";
            testMate.Address     = "Figueiró";
            testMate.Categories  = new[] { Categories.CLEANING, Categories.PLUMBING };
            testMate.Rank        = Ranks.SUPER_MATE;
            testMate.Range       = 20;

            Mate returned = MateDAO.Create(testMate);

            string          refreshToken    = RefreshTokenHelper.generateRefreshToken();
            RefreshTokenDAO refreshTokenDAO = new RefreshTokenDAO(_connection);

            refreshTokenDAO.saveEncryptedRefreshToken(refreshToken, returned.Email);

            EncryptedRefreshTokenModel returnedToken = refreshTokenDAO.GetEncryptedRefreshTokenModel(returned.Email);

            Assert.Equal(returned.Email, returnedToken.Email);
            Assert.True(PasswordOperations.VerifyHash(refreshToken, returnedToken.Hash, returnedToken.Salt));

            _fixture.Dispose();
        }
        public JsonResult Refresh([FromBody] AppTokenModel refreshModel)
        {
            var token        = refreshModel.AccessToken;
            var refreshToken = refreshModel.RefreshToken;

            var principal         = JwtHelper.GetPrincipalFromExpiredToken(token);
            var username          = principal.Identity.Name;
            var savedRefreshToken = _refreshTokenRepository.Get(username); //retrieve the refresh token from a data store

            if (savedRefreshToken != refreshToken)
            {
                throw new SecurityTokenException("Invalid refresh token");
            }

            var newJwtToken     = JwtHelper.GenerateToken(principal.Claims);
            var newRefreshToken = RefreshTokenHelper.GenerateRefreshToken();

            _refreshTokenRepository.Delete(username, refreshToken);
            _refreshTokenRepository.Save(username, newRefreshToken);

            return(Json(new AppTokenModel
            {
                AccessToken = newJwtToken,
                RefreshToken = newRefreshToken
            }));
        }
        public void Refresh_token_expire_before_31_days()
        {
            const int mockUserId   = 31;
            var       refreshToken = RefreshTokenHelper.Generate(mockUserId);

            Assert.False(refreshToken.ExpirationDate < DateTime.Today.AddDays(30));
        }
        public IActionResult Refresh([FromBody] RefreshTokenModel refreshToken)
        {
            try
            {
                var principal = GetPrincipalFromExpiredToken(refreshToken.Token);

                var username          = principal.Identity.Name;
                var savedRefreshToken = "";
                savedRefreshToken = _userService.GetUserRefreshToken(username); //retrieve the refresh token from a data store
                if (savedRefreshToken != refreshToken.RefreshToken)
                {
                    return(Ok(new { Status = PublicResultStatusCodes.NotAuthorized }));
                }

                var newJwtToken     = _jwtTokenGenerator.GenerateAccessTokenWithClaimsPrincipal(username, principal.Claims);
                var newRefreshToken = RefreshTokenHelper.GenerateRefreshToken();
                _userService.SaveUserRefreshToken(username, newRefreshToken);


                return(Ok(new
                {
                    Status = PublicResultStatusCodes.Done,
                    Data = new List <object> {
                        new{ RefreshToken = newRefreshToken,
                             Token = newJwtToken.AccessToken,
                             ValidTokenTimeInMinutes = _token.ValidTimeInMinutes,
                             ValidDateTimeToken = DateTime.Now.AddMinutes(_token.ValidTimeInMinutes) }
                    }
                }));
            }
            catch (SecurityTokenException ex)
            {
                return(Ok(new { Status = PublicResultStatusCodes.NotAuthorized }));
            }
        }
        public void ReturnExceptionWhenEmailDontExistSaveEncryptTokenTest()
        {
            IMateDAO <Mate> MateDAO  = new MateDAO(_connection);
            Mate            testMate = new Mate();

            testMate.FirstName   = "Miguel";
            testMate.LastName    = "Dev";
            testMate.UserName    = "******";
            testMate.Password    = "******";
            testMate.Email       = "*****@*****.**";
            testMate.Description = "Lorem Ipsum is simply dummy text of the printing and typesetting industry.";
            testMate.Address     = "Figueiró";
            testMate.Categories  = new[] { Categories.CLEANING, Categories.PLUMBING };
            testMate.Rank        = Ranks.SUPER_MATE;
            testMate.Range       = 20;

            Mate returned = MateDAO.Create(testMate);

            string          refreshToken    = RefreshTokenHelper.generateRefreshToken();
            RefreshTokenDAO refreshTokenDAO = new RefreshTokenDAO(_connection);

            Assert.Throws <Exception>(() => refreshTokenDAO.saveEncryptedRefreshToken(refreshToken, "*****@*****.**"));

            _fixture.Dispose();
        }
        public JsonResult Token([FromBody] Form form)
        {
            var username = form.UserName;
            var password = form.Password;

            var identity = GetIdentity(username, password);

            if (identity == null)
            {
                Response.StatusCode = (int)HttpStatusCode.BadRequest;
                return(Json("Invalid username or password."));
            }

            var encodedJwt   = JwtHelper.GenerateToken(identity.Claims);
            var refreshToken = RefreshTokenHelper.GenerateRefreshToken();

            _refreshTokenRepository.Delete(username);
            _refreshTokenRepository.Save(username, refreshToken);

            var response = new AppTokenModel
            {
                AccessToken  = encodedJwt,
                RefreshToken = refreshToken,
                Username     = identity.Name
            };

            return(Json(response));
        }
        public void Refresh_token_expire_after_31_days()
        {
            const int mockUserId   = 22;
            var       refreshToken = RefreshTokenHelper.Generate(mockUserId);

            Assert.True(refreshToken.ExpirationDate < DateTime.Now.AddDays(31));
        }
        public static async Task <TokensAuthenticationModel> UpdateRefreshToken(
            this TokensAuthenticationModel tokensAuthenticationModel,
            string userName,
            RefreshTokenHelper refreshTokenHelper)
        {
            tokensAuthenticationModel.RefreshToken = await refreshTokenHelper.Update(tokensAuthenticationModel, userName);

            return(tokensAuthenticationModel);
        }
        async Task ReloadData()
        {
            #region 讀取 相關定義資料
            using (IProgressDialog fooIProgressDialog = UserDialogs.Instance.Loading($"請稍後,更新資料中...",
                                                                                     null, null, true, MaskType.Black))
            {
                await AppStatusHelper.ReadAndUpdateAppStatus(systemStatusService, appStatus);

                #region 檢查 Access Token 是否還可以使用
                bool refreshTokenResult = await RefreshTokenHelper
                                          .CheckAndRefreshToken(dialogService, refreshTokenService,
                                                                systemStatusService, appStatus);

                if (refreshTokenResult == false)
                {
                    return;
                }
                #endregion

                #region 取得 專案清單
                fooIProgressDialog.Title = "請稍後,取得 專案清單";
                var apiResultssss = await projectService.GetAsync();

                if (apiResultssss.Status == true)
                {
                    await projectService.WriteToFileAsync();
                }
                else
                {
                    await DialogHelper.ShowAPIResultIsFailureMessage(dialogService, apiResultssss);

                    return;
                }
                #endregion

                #region 取得 工作日誌明細
                fooIProgressDialog.Title = "請稍後,取得 工作日誌明細";
                apiResultssss            = await workingLogDetailService.GetAsync(MasterItem.Id);

                if (apiResultssss.Status == true)
                {
                    await workingLogDetailService.WriteToFileAsync();
                    await RefreshData();
                }
                else
                {
                    await DialogHelper.ShowAPIResultIsFailureMessage(dialogService, apiResultssss);

                    return;
                }
                #endregion
            }
            #endregion
        }
        public static async Task <TokensAuthenticationModel> AddRefreshTokenFields(
            this TokensAuthenticationModel tokensAuthenticationModel,
            string userName,
            RefreshTokenHelper refreshTokenHelper)
        {
            var loginProvider = Guid.NewGuid().ToString();

            tokensAuthenticationModel.LoginProvider = loginProvider;
            tokensAuthenticationModel.RefreshToken  = await refreshTokenHelper.Add(userName, loginProvider);

            return(tokensAuthenticationModel);
        }
Exemple #11
0
        public IActionResult Authenticate([FromBody] User userParam)
        {
            var user = _userService.Authenticate(userParam.EmailId, userParam.Password); //authentication

            if (user != null)
            {
                RefreshTokenHelper refToken = new RefreshTokenHelper();
                user.Token = jwtHelper.Generate_Access_Token(user);               //access token creation
                var refreshToken = refToken.Generate_Refresh_Token();             //Refresh token creation

                context.StoreRefreshToken(refreshToken, user.UserId, user.Token); //refresh token store in DB
            }

            return(Ok(user));
        }
        public async Task <AuthenticationTokens> GenerateTokens(int userId)
        {
            var tokenHandler = new JwtSecurityTokenHandler();
            var accessToken  = tokenHandler.CreateToken(SetUpToken(userId));
            var refreshToken = RefreshTokenHelper.Generate(userId);

            await _authenticationRepository.CreateToken(refreshToken);

            var authenticationTokens = new AuthenticationTokens
            {
                AccessToken  = tokenHandler.WriteToken(accessToken),
                RefreshToken = refreshToken.Token
            };

            return(authenticationTokens);
        }
Exemple #13
0
        private void HashNewUserPassword(ref User user, string username)
        {
            if (!string.IsNullOrEmpty(username))
            {
                var currentUser = _repository.GetUserByUsername(username);
                user.IDEntryUser = currentUser.IDEntryUser;
                user.EntryUser   = currentUser.Account;
            }
            user.EntryDate    = DateTime.Now;
            user.IsActive     = true;
            user.RefreshToken = RefreshTokenHelper.GenerateRefreshToken();
            user.Password     = string.IsNullOrWhiteSpace(user.Password) ? user.Password : "";
            var hashHelper = new HashHelper(user.Password);

            user.Password                 = hashHelper.Hash;
            user.SaltedPassword           = hashHelper.Salt;
            user.LatestPasswordChangeDate = DateTime.Now;
        }
        private async System.Threading.Tasks.Task LoadDataAsync(bool isDownload = true)
        {
            if (isDownload)
            {
                using (IProgressDialog fooIProgressDialog = UserDialogs.Instance.Loading($"請稍後,更新資料中...", null, null, true, MaskType.Black))
                {
                    bool fooRefreshTokenResult = await RefreshTokenHelper.CheckAndRefreshToken(dialogService, refreshTokenManager, systemStatusManager, appStatus);

                    if (fooRefreshTokenResult == false)
                    {
                        return;
                    }
                    var fooResult = await leaveFormsManager.GetAsync();
                }
            }
            //await leaveFormsManager.ReadFromFileAsync();
            LeaveFormItemsSource.Clear();
            foreach (var item in leaveFormsManager.Items)
            {
                LeaveFormModel leaveFormModel = new LeaveFormModel()
                {
                    Id   = item.Id,
                    user = new UserDTO()
                    {
                        Id = item.user.Id
                    },
                    BeginTime     = item.BeginTime,
                    EndTime       = item.EndTime,
                    TotalHours    = item.TotalHours,
                    leaveFormType = new LeaveFormTypeModel()
                    {
                        Id = item.leaveFormType.Id
                    },
                    Description = item.Description,
                };
                var fooItem = leaveFormTypesManager.Items.FirstOrDefault(x => x.Id == item.leaveFormType.Id);
                leaveFormModel.leaveFormType.Name = fooItem.Name;

                LeaveFormItemsSource.Add(leaveFormModel);
            }
        }
 public SuggestionPageViewModel(INavigationService navigationService, IPageDialogService dialogService,
                                RefreshTokenManager refreshTokenManager, SystemStatusManager systemStatusManager,
                                AppStatus appStatus, SuggestionsManager suggestionsManager)
 {
     this.navigationService   = navigationService;
     this.dialogService       = dialogService;
     this.refreshTokenManager = refreshTokenManager;
     this.systemStatusManager = systemStatusManager;
     this.appStatus           = appStatus;
     this.suggestionsManager  = suggestionsManager;
     OKCommand = new DelegateCommand(async() =>
     {
         using (IProgressDialog fooIProgressDialog = UserDialogs.Instance.Loading($"請稍後,更新資料中...", null, null, true, MaskType.Black))
         {
             bool fooRefreshTokenResult = await RefreshTokenHelper.CheckAndRefreshToken(dialogService, refreshTokenManager, systemStatusManager, appStatus);
             if (fooRefreshTokenResult == false)
             {
                 return;
             }
             var fooResult = await suggestionsManager.PostAsync(new SuggestionRequestDTO()
             {
                 Subject    = SuggestionModel.Subject,
                 Message    = SuggestionModel.Message,
                 SubmitTime = DateTime.Now,
                 User       = new UserDTO()
                 {
                     Id = appStatus.SystemStatus.UserID
                 },
             });
             if (fooResult.Status == true)
             {
                 await dialogService.DisplayAlertAsync("通知", "已經成功提交", "確定");
             }
             else
             {
                 await dialogService.DisplayAlertAsync("錯誤", $"已經發生例外異常:{fooResult.Message}", "確定");
             }
         }
     });
 }
Exemple #16
0
        public TravelExpenseDetailRecordPageViewModel(INavigationService navigationService, IPageDialogService dialogService,
                                                      TravelExpenseDetailService travelExpenseDetailService,
                                                      RefreshTokenService refreshTokenService,
                                                      SystemStatusService systemStatusService, AppStatus appStatus)
        {
            this.navigationService          = navigationService;
            this.dialogService              = dialogService;
            this.travelExpenseDetailService = travelExpenseDetailService;
            this.refreshTokenService        = refreshTokenService;
            this.systemStatusService        = systemStatusService;
            this.appStatus = appStatus;

            #region 新增 儲存 按鈕命令
            SaveCommand = new DelegateCommand(async() =>
            {
                #region 進行資料完整性檢查
                var checkResult = SelectedItem.Validation();
                if (!string.IsNullOrEmpty(checkResult))
                {
                    await dialogService.DisplayAlertAsync("錯誤", $"請檢查並且修正錯誤{Environment.NewLine}{Environment.NewLine}" +
                                                          $"{checkResult}", "確定");
                    return;
                }
                #endregion

                #region 進行記錄儲存
                APIResult apiResult = new APIResult();
                using (IProgressDialog fooIProgressDialog = UserDialogs.Instance.Loading($"請稍後,儲存資料中...",
                                                                                         null, null, true, MaskType.Black))
                {
                    await AppStatusHelper.ReadAndUpdateAppStatus(systemStatusService, appStatus);
                    #region 檢查 Access Token 是否還可以使用
                    bool refreshTokenResult = await RefreshTokenHelper
                                              .CheckAndRefreshToken(dialogService, refreshTokenService,
                                                                    systemStatusService, appStatus);
                    if (refreshTokenResult == false)
                    {
                        return;
                    }
                    #endregion

                    if (CrudAction == MagicStringHelper.CrudAddAction)
                    {
                        #region 新增 差旅費用明細紀錄
                        fooIProgressDialog.Title = "請稍後,新增 差旅費用明細紀錄";
                        SelectedItem.Id          = 0;
                        apiResult = await travelExpenseDetailService.PostAsync(SelectedItem);
                        if (apiResult.Status == true)
                        {
                            ToastHelper.ShowToast($"差旅費用明細紀錄 已經新增");

                            NavigationParameters paras = new NavigationParameters();
                            paras.Add(MagicStringHelper.CrudActionName, MagicStringHelper.CrudRefreshAction);
                            await navigationService.GoBackAsync(paras);
                        }
                        else
                        {
                            await dialogService.DisplayAlertAsync("錯誤", $"差旅費用明細紀錄 儲存失敗:{apiResult.Message}", "確定");
                        }
                        #endregion
                    }
                    else
                    {
                        #region 儲存 差旅費用明細紀錄
                        fooIProgressDialog.Title = "請稍後,儲存 差旅費用明細紀錄";
                        apiResult = await travelExpenseDetailService.PutAsync(SelectedItem);
                        if (apiResult.Status == true)
                        {
                            ToastHelper.ShowToast($"差旅費用明細紀錄 已經儲存");

                            NavigationParameters paras = new NavigationParameters();
                            paras.Add(MagicStringHelper.CrudActionName, MagicStringHelper.CrudRefreshAction);
                            await navigationService.GoBackAsync(paras);
                        }
                        else
                        {
                            await dialogService.DisplayAlertAsync("錯誤", $"差旅費用明細紀錄 儲存失敗:{apiResult.Message}", "確定");
                        }
                        #endregion
                    }

                    #region 取得 差旅費用明細紀錄
                    fooIProgressDialog.Title = "請稍後,取得 差旅費用明細紀錄";
                    apiResult = await travelExpenseDetailService.GetAsync(MasterItem.Id);
                    if (apiResult.Status == true)
                    {
                        await travelExpenseDetailService.WriteToFileAsync();
                    }
                    else
                    {
                        await dialogService.DisplayAlertAsync("錯誤", $"取得 差旅費用明細紀錄 失敗:{apiResult.Message}", "確定");
                    }
                    #endregion
                }
                #endregion
            });
            #endregion

            #region 刪除 按鈕命令
            DeleteCommand = new DelegateCommand(async() =>
            {
                #region 進行記錄刪除
                var confirm = await dialogService.DisplayAlertAsync(
                    "警告", "是否要刪除這筆紀錄?", "確定", "取消");
                if (confirm == false)
                {
                    return;
                }

                APIResult apiResult = new APIResult();
                using (IProgressDialog fooIProgressDialog = UserDialogs.Instance.Loading($"請稍後,刪除資料中...",
                                                                                         null, null, true, MaskType.Black))
                {
                    await AppStatusHelper.ReadAndUpdateAppStatus(systemStatusService, appStatus);
                    #region 檢查 Access Token 是否還可以使用
                    bool refreshTokenResult = await RefreshTokenHelper
                                              .CheckAndRefreshToken(dialogService, refreshTokenService,
                                                                    systemStatusService, appStatus);
                    if (refreshTokenResult == false)
                    {
                        return;
                    }
                    #endregion

                    #region 刪除 差旅費用明細紀錄
                    fooIProgressDialog.Title = "請稍後,刪除 差旅費用明細紀錄";
                    apiResult = await travelExpenseDetailService.DeleteAsync(SelectedItem);
                    if (apiResult.Status == true)
                    {
                        ToastHelper.ShowToast($"差旅費用明細紀錄 已經刪除");

                        NavigationParameters paras = new NavigationParameters();
                        paras.Add(MagicStringHelper.CrudActionName, MagicStringHelper.CrudRefreshAction);
                        await navigationService.GoBackAsync(paras);
                    }
                    else
                    {
                        await dialogService.DisplayAlertAsync("錯誤", $"差旅費用明細紀錄 刪除失敗:{apiResult.Message}", "確定");
                    }
                    #endregion

                    #region 取得 差旅費用明細紀錄
                    fooIProgressDialog.Title = "請稍後,取得 差旅費用明細紀錄";
                    apiResult = await travelExpenseDetailService.GetAsync(MasterItem.Id);
                    if (apiResult.Status == true)
                    {
                        await travelExpenseDetailService.WriteToFileAsync();
                    }
                    else
                    {
                        await dialogService.DisplayAlertAsync("錯誤", $"取得 差旅費用明細紀錄 失敗:{apiResult.Message}", "確定");
                    }
                    #endregion
                }
                #endregion
            });
            #endregion
        }
        public TravelExpensePageViewModel(INavigationService navigationService, IPageDialogService dialogService,
                                          TravelExpenseService travelExpenseService,
                                          MyUserService myUserService, TravelExpenseDetailService travelExpenseDetailService,
                                          RefreshTokenService refreshTokenService,
                                          SystemStatusService systemStatusService, AppStatus appStatus)
        {
            this.navigationService          = navigationService;
            this.dialogService              = dialogService;
            this.travelExpenseService       = travelExpenseService;
            this.myUserService              = myUserService;
            this.travelExpenseDetailService = travelExpenseDetailService;
            this.refreshTokenService        = refreshTokenService;
            this.systemStatusService        = systemStatusService;
            this.appStatus = appStatus;

            #region 新增紀錄
            AddCommand = new DelegateCommand(async() =>
            {
                NavigationParameters paras = new NavigationParameters();
                var fooObject       = new TravelExpenseDto();
                fooObject.ApplyDate = DateTime.Now.Date;

                #region 設定該使用者為預設紀錄申請者
                var myUser = myUserService.Items
                             .FirstOrDefault(x => x.Id == appStatus.SystemStatus.UserID);
                if (myUser != null)
                {
                    fooObject.MyUserId   = myUser.Id;
                    fooObject.MyUserName = myUser.Name;
                }
                #endregion

                paras.Add(MagicStringHelper.CurrentSelectdItemParameterName, fooObject);
                paras.Add(MagicStringHelper.CrudActionName, MagicStringHelper.CrudAddAction);
                await navigationService.NavigateAsync("TravelExpenseRecordPage", paras);
            });
            #endregion

            #region 點選某筆紀錄觸發命令
            ItemTappedCommand = new DelegateCommand(async() =>
            {
                NavigationParameters paras = new NavigationParameters();
                var fooObject = SelectedItem.Clone();
                paras.Add(MagicStringHelper.CurrentSelectdItemParameterName, fooObject);
                paras.Add(MagicStringHelper.CrudActionName, MagicStringHelper.CrudEditAction);
                await navigationService.NavigateAsync("TravelExpenseRecordPage", paras);
            });
            #endregion

            #region 更新遠端紀錄命令
            RefreshCommand = new DelegateCommand(async() =>
            {
                IsRefresh = true;
                await ReloadData();
                IsRefresh = false;
            });
            #endregion

            #region 顯示明細頁面
            ShowDetailCommand = new DelegateCommand <TravelExpenseDto>(async x =>
            {
                #region 讀取該筆明細清單
                using (IProgressDialog fooIProgressDialog = UserDialogs.Instance.Loading($"請稍後,更新資料中...",
                                                                                         null, null, true, MaskType.Black))
                {
                    await AppStatusHelper.ReadAndUpdateAppStatus(systemStatusService, appStatus);
                    #region 檢查 Access Token 是否還可以使用
                    bool refreshTokenResult = await RefreshTokenHelper
                                              .CheckAndRefreshToken(dialogService, refreshTokenService,
                                                                    systemStatusService, appStatus);
                    if (refreshTokenResult == false)
                    {
                        return;
                    }
                    #endregion

                    #region 取得 差旅費用明細紀錄
                    fooIProgressDialog.Title = "請稍後,取得 差旅費用明細紀錄";
                    var apiResultssss        = await travelExpenseDetailService.GetAsync(x.Id);
                    if (apiResultssss.Status == true)
                    {
                        await travelExpenseDetailService.WriteToFileAsync();

                        NavigationParameters paras = new NavigationParameters();
                        paras.Add(MagicStringHelper.MasterRecordActionName, x);
                        await navigationService.NavigateAsync("TravelExpenseDetailPage", paras);
                    }
                    else
                    {
                        await DialogHelper.ShowAPIResultIsFailureMessage(dialogService, apiResultssss);
                        return;
                    }
                    #endregion
                }
                #endregion
            });
            #endregion
        }
 public LeaveFormDetailPageViewModel(INavigationService navigationService, IPageDialogService dialogService,
                                     RefreshTokenManager refreshTokenManager,
                                     SystemStatusManager systemStatusManager, AppStatus appStatus,
                                     LeaveFormsManager leaveFormsManager, LeaveFormTypesManager leaveFormTypesManager)
 {
     this.navigationService     = navigationService;
     this.dialogService         = dialogService;
     this.leaveFormsManager     = leaveFormsManager;
     this.leaveFormTypesManager = leaveFormTypesManager;
     SaveCommand = new DelegateCommand(async() =>
     {
         if (IsAddMode == true)
         {
             using (IProgressDialog fooIProgressDialog = UserDialogs.Instance.Loading($"請稍後,更新資料中...", null, null, true, MaskType.Black))
             {
                 bool fooRefreshTokenResult = await RefreshTokenHelper.CheckAndRefreshToken(dialogService, refreshTokenManager, systemStatusManager, appStatus);
                 if (fooRefreshTokenResult == false)
                 {
                     return;
                 }
                 var fooResult = await leaveFormsManager.PostAsync(new LeaveFormRequestDTO()
                 {
                     id            = 0,
                     BeginTime     = LeaveFormItemModel.BeginDate + LeaveFormItemModel.BeginTime,
                     EndTime       = LeaveFormItemModel.EndDate + LeaveFormItemModel.EndTime,
                     Description   = LeaveFormItemModel.Description,
                     TotalHours    = LeaveFormItemModel.TotalHours,
                     leaveFormType = new LeaveFormTypeDTO()
                     {
                         Id = LeaveFormTypeSelectedItem.Id
                     }
                 });
             }
         }
         else
         {
             using (IProgressDialog fooIProgressDialog = UserDialogs.Instance.Loading($"請稍後,更新資料中...", null, null, true, MaskType.Black))
             {
                 bool fooRefreshTokenResult = await RefreshTokenHelper.CheckAndRefreshToken(dialogService, refreshTokenManager, systemStatusManager, appStatus);
                 if (fooRefreshTokenResult == false)
                 {
                     return;
                 }
                 var fooResult = await leaveFormsManager.PutAsync(LeaveFormSelectedItem.Id, new LeaveFormRequestDTO()
                 {
                     id            = LeaveFormSelectedItem.Id,
                     BeginTime     = LeaveFormItemModel.BeginDate + LeaveFormItemModel.BeginTime,
                     EndTime       = LeaveFormItemModel.EndDate + LeaveFormItemModel.EndTime,
                     Description   = LeaveFormItemModel.Description,
                     TotalHours    = LeaveFormItemModel.TotalHours,
                     leaveFormType = new LeaveFormTypeDTO()
                     {
                         Id = LeaveFormTypeSelectedItem.Id
                     }
                 });
             }
         }
         var queryString      = "NeedRefresh=true";
         var navigationParams = new NavigationParameters(queryString);
         await navigationService.GoBackAsync(navigationParams);
     });
     DeleteCommand = new DelegateCommand(async() =>
     {
         using (IProgressDialog fooIProgressDialog = UserDialogs.Instance.Loading($"請稍後,更新資料中...", null, null, true, MaskType.Black))
         {
             bool fooRefreshTokenResult = await RefreshTokenHelper.CheckAndRefreshToken(dialogService, refreshTokenManager, systemStatusManager, appStatus);
             if (fooRefreshTokenResult == false)
             {
                 return;
             }
             var fooResult = await leaveFormsManager.DeleteAsync(LeaveFormSelectedItem.Id);
         }
         var queryString      = "NeedRefresh=true";
         var navigationParams = new NavigationParameters(queryString);
         await navigationService.GoBackAsync(navigationParams);
     });
 }
 public AuthenticationController(TokenHelper tokenHelper, RefreshTokenHelper refreshTokenHelper)
 {
     _tokenHelper        = tokenHelper;
     _refreshTokenHelper = refreshTokenHelper;
 }
        public HomePageViewModel(INavigationService navigationService, IPageDialogService dialogService,
                                 OnlyAdministratorService OnlyAdministratorService, OnlyUserService OnlyUserService,
                                 RefreshTokenService refreshTokenService,
                                 SystemStatusService systemStatusService, AppStatus appStatus)
        {
            this.navigationService   = navigationService;
            this.dialogService       = dialogService;
            onlyAdministratorService = OnlyAdministratorService;
            onlyUserService          = OnlyUserService;
            this.refreshTokenService = refreshTokenService;
            this.systemStatusService = systemStatusService;
            this.appStatus           = appStatus;

            #region OnlyAdministratorCommand
            OnlyAdministratorCommand = new DelegateCommand(async() =>
            {
                using (IProgressDialog fooIProgressDialog = UserDialogs.Instance.Loading($"請稍後,執行中...", null, null, true, MaskType.Black))
                {
                    bool fooRefreshTokenResult = await RefreshTokenHelper
                                                 .CheckAndRefreshToken(dialogService, refreshTokenService,
                                                                       systemStatusService, appStatus);
                    if (fooRefreshTokenResult == false)
                    {
                        return;
                    }
                    var fooResult = await OnlyAdministratorService.GetAsync();
                    if (fooResult.Status == false)
                    {
                        Message = fooResult.Message;
                    }
                    else
                    {
                        Message = fooResult.Payload.ToString();
                    }
                }
            });
            #endregion
            #region OnlyUserCommand
            OnlyUserCommand = new DelegateCommand(async() =>
            {
                using (IProgressDialog fooIProgressDialog = UserDialogs.Instance.Loading($"請稍後,執行中...", null, null, true, MaskType.Black))
                {
                    bool fooRefreshTokenResult = await RefreshTokenHelper
                                                 .CheckAndRefreshToken(dialogService, refreshTokenService,
                                                                       systemStatusService, appStatus);
                    if (fooRefreshTokenResult == false)
                    {
                        return;
                    }
                    var fooResult = await OnlyUserService.GetAsync();
                    if (fooResult.Status == false)
                    {
                        Message = fooResult.Message;
                    }
                    else
                    {
                        Message = fooResult.Payload.ToString();
                    }
                }
            });
            #endregion
            #region 故意拋出例外
            ThrowExceptionrCommand = new DelegateCommand(async() =>
            {
                throw new Exception("魔鬼藏在細節中");
            });
            #endregion
        }