public App(IOAuth2Service oAuth2Service)
        {
            InitializeComponent();
            FlowListView.Init();
            MessagingCenter.Subscribe <MessageCenterManager, ChatModel>(this, "sendMessage", (sender, arg) =>
            {
                var value = JsonConvert.SerializeObject(arg);
                Console.WriteLine("boom panes panes" + value);
                socket.Emit("hi", value);
            });
            try
            {
                string ip = sqlites.GetIpAddress().Url;
                ApiConnection.SocketUrl = ip;
            }
            catch (Exception ex)
            {
                ipAddress.Url = ApiConnection.SocketUrl;
                sqlites.setIpAddress(ipAddress);
                string ip = sqlites.GetIpAddress().Url;
                ApiConnection.SocketUrl = ip;
            }
            MainPage = new NavigationPage(new SplashScreen(oAuth2Service));

            /**
             * if (hasLoggedIn())
             * {
             *  MainPage = new NavigationPage(new MainPage());
             * }
             * else
             * {
             *  MainPage = new NavigationPage(new Login());
             * }
             */
        }
예제 #2
0
 public OAuth2Controller(
     UserManager <User> userManager,
     IOAuth2Service oAuth2Service,
     IStsOAuth2CodeRepository stsOAuth2CodeRepository,
     IStsOAuth2RefreshTokenRepository stsOAuth2RefreshTokenRepository)
 {
     _userManager                     = userManager;
     _oAuth2Service                   = oAuth2Service;
     _stsOAuth2CodeRepository         = stsOAuth2CodeRepository;
     _stsOAuth2RefreshTokenRepository = stsOAuth2RefreshTokenRepository;
 }
예제 #3
0
 public SplashScreen(IOAuth2Service oAuth2Service)
 {
     NavigationPage.SetHasNavigationBar(this, false);
     Task.Run(() =>
     {
         Device.BeginInvokeOnMainThread(async() =>
         {
             await initialize();
         });
     });
     InitializeComponent();
 }
예제 #4
0
        public App(IOAuth2Service oAuth2Service)
        {
            Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("MjQzNzAyQDMxMzgyZTMxMmUzMGlDWTJIVjZqZ2swTU1GOFdDaVhrQkhYMktvZjV0TjRtUldJWFN4akpKRlU9");
            InitializeComponent();

            var datastore = new DataStores();

            if (datastore.GetSettingsAsync().Count() > 0)
            {
                CurrentLanguage = (!string.IsNullOrWhiteSpace(datastore.GetSettingsAsync().First().Language)) ? datastore.GetSettingsAsync().First().Language : CultureInfo.CurrentUICulture.TwoLetterISOLanguageName;
            }
            else
            {
                var settings  = new Settings_Model();
                var Objectifs = new Objectif_Model();
                Objectifs.Max_Glycemia    = 120;
                Objectifs.Min_Glycemia    = 70;
                Objectifs.Weight_Objectif = 80;
                Objectifs.Steps_Objectif  = 10000;
                datastore.AddObjectif(Objectifs);
                datastore.AddSettings(settings);
                CurrentLanguage = datastore.GetSettingsAsync().First().Language;
            }

            if (CrossSecureStorage.Current.HasKey("first_use"))
            {
                var tokenController = new TokenController();
                if (tokenController.Token_Expired())
                {
                    MainPage = new NavigationPage(new Login_Page());
                }
                else
                {
                    MainPage = new NavigationPage(new MainPage());
                }
            }
            else
            {
                MainPage = new NavigationPage(new FirstUseLanguage_Page());
            }
        }
예제 #5
0
        public App(IOAuth2Service oAuth2Service)
        {
            InitializeComponent();

            MainPage = new NavigationPage(new SocialLoginPage(oAuth2Service));
        }
        public SocialLoginPageViewModel(IOAuth2Service oAuth2Service)
        {
            _oAuth2Service = oAuth2Service;

            OnLoginCommand = new Command <AuthNetwork>(async(data) => await LoginAsync(data));
        }
예제 #7
0
        public async Task <IActionResult> Home(string provider, string redirectUrl = "")
        {
            if (string.IsNullOrWhiteSpace(provider))
            {
                return(BadRequest());
            }

            if (!await HttpContext.IsProviderSupportedAsync(provider))
            {
                return(BadRequest());
            }

            AuthenticateResult authenticateResult = await _contextAccessor.HttpContext.AuthenticateAsync(provider);

            if (!authenticateResult.Succeeded)
            {
                return(Redirect(redirectUrl));
            }
            var openIdClaim = authenticateResult.Principal.FindFirst(ClaimTypes.NameIdentifier);

            if (openIdClaim == null || string.IsNullOrWhiteSpace(openIdClaim.Value))
            {
                return(Redirect(redirectUrl));
            }

            List <string> supportProviders = new List <string> {
                LinUserIdentity.Gitee, LinUserIdentity.GitHub, LinUserIdentity.QQ,
            };

            if (!supportProviders.Contains(provider))
            {
                _logger.LogError($"未知的privoder:{provider},redirectUrl:{redirectUrl}");
                throw new LinCmsException($"未知的privoder:{provider}!");
            }

            IOAuth2Service oAuth2Service = _componentContext.ResolveNamed <IOAuth2Service>(provider);

            long id = await oAuth2Service.SaveUserAsync(authenticateResult.Principal, openIdClaim.Value);

            List <Claim> authClaims = authenticateResult.Principal.Claims.ToList();

            LinUser user = await _userRepository.Select.IncludeMany(r => r.LinGroups)
                           .WhereCascade(r => r.IsDeleted == false).Where(r => r.Id == id).FirstAsync();

            if (user == null)
            {
                throw new LinCmsException("第三方登录失败!");
            }
            List <Claim> claims = new List <Claim>()
            {
                new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
                new Claim(ClaimTypes.Email, user.Email ?? ""),
                new Claim(ClaimTypes.GivenName, user.Nickname ?? ""),
                new Claim(ClaimTypes.Name, user.Username ?? ""),
            };

            user.LinGroups?.ForEach(r =>
            {
                claims.Add(new Claim(LinCmsClaimTypes.Groups, r.Id.ToString()));
            });

            //claims.AddRange(authClaims);
            string token = _jsonWebTokenService.Encode(claims);

            //TODO 生成刷新token
            //user.AddRefreshToken(token);
            //await _userRepository.UpdateAsync(user);

            return(Redirect($"{redirectUrl}#login-result?token={token}"));
        }
예제 #8
0
        public async Task <IActionResult> SignInBindCallBack(string provider, string redirectUrl = "", string token = "")
        {
            if (string.IsNullOrWhiteSpace(provider))
            {
                return(BadRequest());
            }

            if (!await HttpContext.IsProviderSupportedAsync(provider))
            {
                return(BadRequest());
            }

            if (token.IsNullOrEmpty() || !token.StartsWith("Bearer "))
            {
                return(Redirect($"{redirectUrl}#bind-result?code={ErrorCode.Fail}&message={HttpUtility.UrlEncode("请先登录")}"));
            }
            else
            {
                token = token.Remove(0, 7);
            }

            AuthenticateResult authenticateResult = await _contextAccessor.HttpContext.AuthenticateAsync(provider);

            if (!authenticateResult.Succeeded)
            {
                return(Redirect($"{redirectUrl}#bind-result?code=fail&message={authenticateResult.Failure.Message}"));
            }
            var openIdClaim = authenticateResult.Principal.FindFirst(ClaimTypes.NameIdentifier);

            if (openIdClaim == null || string.IsNullOrWhiteSpace(openIdClaim.Value))
            {
                return(Redirect($"{redirectUrl}#bind-result?code={ErrorCode.Fail}&message={HttpUtility.UrlEncode("未能获取openId")}"));
            }

            JwtPayload jwtPayload     = (JwtPayload)_jsonWebTokenService.Decode(token);
            string     nameIdentifier = jwtPayload.Claims.FirstOrDefault(r => r.Type == ClaimTypes.NameIdentifier)?.Value;

            if (nameIdentifier.IsNullOrWhiteSpace())
            {
                return(Redirect($"{redirectUrl}#bind-result?code={ErrorCode.Fail}&message={HttpUtility.UrlEncode("请先登录")}"));
            }
            long             userId = long.Parse(nameIdentifier);
            UnifyResponseDto unifyResponseDto;

            List <string> supportProviders = new List <string> {
                LinUserIdentity.Gitee, LinUserIdentity.GitHub, LinUserIdentity.QQ
            };

            if (!supportProviders.Contains(provider))
            {
                _logger.LogError($"未知的privoder:{provider},redirectUrl:{redirectUrl}");
                unifyResponseDto = UnifyResponseDto.Error($"未知的privoder:{provider}!");
            }
            else
            {
                IOAuth2Service oAuth2Service = _componentContext.ResolveNamed <IOAuth2Service>(provider);
                unifyResponseDto = await oAuth2Service.BindAsync(authenticateResult.Principal, provider, openIdClaim.Value, userId);
            }

            return(Redirect($"{redirectUrl}#bind-result?code={unifyResponseDto.Code.ToString()}&message={HttpUtility.UrlEncode(unifyResponseDto.Message.ToString())}"));
        }
예제 #9
0
 public Login(IOAuth2Service oAuth2Service = null)
 {
     InitializeComponent();
     this.BindingContext = new SocialMediaAuthentication(oAuth2Service);
 }
예제 #10
0
        public SocialMediaAuthentication(IOAuth2Service oAuth2Service)
        {
            _oAuth2Service = oAuth2Service;

            OnLoginCommand = new Command <AuthNetwork>(async(data) => await LoginAsync(data));
        }
예제 #11
0
 public SocialLoginVM(IOAuth2Service oAuth2Service)
 {
     OnLoginCommand = new Command <SocialNetwork>(async(data) => await LoginAsync(data));
 }
예제 #12
0
 public SocialLoginPage(IOAuth2Service oAuth2Service)
 {
     InitializeComponent();
     this.BindingContext = new SocialLoginVM(oAuth2Service);
 }
예제 #13
0
 public GitHubService(Settings settings, IOAuth2Service oAuth2Service)
 {
     _settings      = settings;
     _oAuth2Service = oAuth2Service;
 }