예제 #1
0
        public async Task <LoginData> LoginWithToken(string clientId, string clientSecret, string code, string redirect, string requestDomain, string apiDomain)
        {
            var token = await Client.RequestAccessToken(clientId, clientSecret, code, redirect, requestDomain);

            var client = Client.BasicOAuth(token.AccessToken, apiDomain);
            var info   = await client.ExecuteAsync(client.AuthenticatedUser.GetInfo());

            var username = info.Data.Login;

            //Does this user exist?

            var account = _accounts.FirstOrDefault(x => string.Equals(x.Username, username) && string.Equals(x.Domain, apiDomain));
            var exists  = account != null;

            account = account ?? new GitHubAccount {
                Username = username
            };

            account.OAuth     = token.AccessToken;
            account.AvatarUrl = info.Data.AvatarUrl;
            account.Domain    = apiDomain;
            account.WebDomain = requestDomain;
            client.Username   = username;

            if (exists)
            {
                _accounts.Update(account);
            }
            else
            {
                _accounts.Insert(account);
            }
            return(new LoginData {
                Client = client, Account = account
            });
        }