private async void StreamThread() { foreach (var item in token) { Authentication.TokenResult appToken = null; if (item.Token.Drive == "Google") { appToken = await WebAuthorization.RedeemAuthorizationCodeAsync(Client.GoogleClientID, UriCollection.GoogleinstalledAppRedirectUri, Client.GoogleClientSecret, item.Token.refresh_token, UriCollection.GoogleTokenUri, "refresh_token", WebAuthorization.TokenOption.REFRESHTOKEN); appToken.refresh_token = item.Token.refresh_token; appToken.Drive = item.Token.Drive; } else if (item.Token.Drive == "OneDrive") { appToken = await WebAuthorization.RedeemAuthorizationCodeAsync(Client.OneDriveClientID, UriCollection.OneDriveinstalledAppRedirectUri, Client.OneDriveClientSecret, item.Token.refresh_token, UriCollection.OneDriveTokenUri, "refresh_token", WebAuthorization.TokenOption.REFRESHTOKEN); appToken.refresh_token = item.Token.refresh_token; appToken.Drive = item.Token.Drive; } else if (item.Token.Drive == "DropBox") { appToken = item.Token; } if (appToken != null) { this.apptoken.Add(appToken); Authentication.UserNameToken unametoken = new Authentication.UserNameToken(); DriveInfo driveinfo = null; if (appToken.Drive == "Google") { var result = await HttpHelper.RequstHttp("GET", "https://www.googleapis.com/drive/v2/about", null, appToken.access_token); Dictionary <string, object> drivetext = HttpHelper.DerealizeJson(result.GetResponseStream()); var map = new ApiDataMapping(); map.Add("name", "DisplayName"); map.Add("quotaBytesTotal", "TotalSize", typeof(long)); map.Add("quotaBytesUsed", "UseSize", typeof(long)); map.Add("quotaBytesUsedAggregate", "EmptySize", typeof(long)); map.Add("quotaBytesUsedInTrash", "DeleteSize", typeof(long)); map.Add("quotaType", "DriveType"); map.Add("rootFolderId", "DriveID"); Dictionary <string, object> di = (Dictionary <string, object>)drivetext["user"]; driveinfo = new DriveInfo(drivetext, map); driveinfo.UserID = di["emailAddress"].ToString(); driveinfo.Status = "normal"; driveinfo.token = appToken; } else if (appToken.Drive == "OneDrive") { var result = await HttpHelper.RequstHttp("GET", "https://api.onedrive.com/v1.0/drive", null, appToken.access_token); Dictionary <string, object> drivetext = HttpHelper.DerealizeJson(result.GetResponseStream()); Dictionary <string, object> owner = (Dictionary <string, object>)drivetext["owner"]; Dictionary <string, object> user = (Dictionary <string, object>)owner["user"]; Dictionary <string, object> quoat = (Dictionary <string, object>)drivetext["quota"]; var map = new ApiDataMapping(); map.Add("id", "DriveID", typeof(string)); map.Add("driveType", "DriveType"); driveinfo = new DriveInfo(drivetext, map); driveinfo.DisplayName = user["displayName"].ToString(); driveinfo.UserID = user["id"].ToString(); driveinfo.TotalSize = long.Parse(quoat["total"].ToString()); driveinfo.EmptySize = long.Parse(quoat["remaining"].ToString()); driveinfo.UseSize = long.Parse(quoat["used"].ToString()); driveinfo.DeleteSize = long.Parse(quoat["deleted"].ToString()); driveinfo.Status = quoat["state"].ToString(); driveinfo.token = appToken; } else if (appToken.Drive == "DropBox") { var result = await HttpHelper.RequstHttp("GET", "https://api.dropbox.com/1/account/info", null, appToken.access_token); Dictionary <string, object> drivetext = HttpHelper.DerealizeJson(result.GetResponseStream()); Dictionary <string, object> quato = (Dictionary <string, object>)drivetext["quota_info"]; var map = new ApiDataMapping(); map.Add("uid", "UserId", typeof(string)); map.Add("display_name", "DisplayName"); driveinfo = new DriveInfo(drivetext, map); driveinfo.TotalSize = long.Parse(quato["quota"].ToString()); driveinfo.UseSize = long.Parse(quato["normal"].ToString()); driveinfo.EmptySize = driveinfo.TotalSize - driveinfo.UseSize; driveinfo.token = appToken; driveinfo.Status = "normal"; } appToken.uid = driveinfo.UserID; unametoken.UserName = item.UserName; unametoken.Token = appToken; drive.Add(driveinfo); await Authentication.SaveToken(new FileDataStore(path), item.UserName, unametoken, CancellationToken.None); } } this.oncomplet(this); this.Stop(); }
/// <summary> /// Oauth 2.0을 사용하여 유저 정보를 가져온다. /// </summary> /// <param name="clientId">Developer console에서 발급받은 userid</param> /// <param name="clientSecret">Developer console에서 발급받은 보안 번호</param> /// <param name="userName">사용자를 구별하기 위한 유저 이름 (닉네임)</param> /// <returns></returns> public async void CloudLogin() { string starturi = null; string enduri = null; string tokenuri = null; string granttype = null; string drive = null; if (option == LoginOption.GoogleDrive) { starturi = UriCollection.GoogleAuthorizationUrl; enduri = UriCollection.GoogleinstalledAppRedirectUri; tokenuri = UriCollection.GoogleTokenUri; userName += "Google"; granttype = "refresh_token"; drive = "Google"; } else if (option == LoginOption.OneDrive) { starturi = UriCollection.OneDriveAuthorizationUri; enduri = UriCollection.OneDriveinstalledAppRedirectUri; tokenuri = UriCollection.OneDriveTokenUri; userName += "OneDrive"; granttype = "refresh_token"; drive = "OneDrive"; } else { starturi = UriCollection.DropBoxAuthorizationUri; tokenuri = UriCollection.DropBoxTokenUri; userName += "DropBox"; granttype = "authorization_code"; drive = "DropBox"; } try { FileDataStore datastore = new FileDataStore(path); UserNameToken oldRefreshToken = await LoadToken(datastore, userName, CancellationToken.None).ConfigureAwait(false); UserNameToken unametoken = new UserNameToken(); TokenResult appToken = null; if (oldRefreshToken != null) { if (oldRefreshToken.Token.refresh_token != null) { appToken = await WebAuthorization.RedeemAuthorizationCodeAsync(clientId, enduri, clientSecret, oldRefreshToken.Token.refresh_token, tokenuri, granttype, WebAuthorization.TokenOption.REFRESHTOKEN); if (option == LoginOption.GoogleDrive) { appToken.refresh_token = oldRefreshToken.Token.refresh_token; } appToken.Drive = drive; } else { appToken = oldRefreshToken.Token; } } // 신규 유저 접근 권한을 받아오거나 혹은 저장되어 있는 (기본 위치 C:\Users\bit-user\AppData\Roaming\)에 토큰을 가지고 유저정보를 가져온다. if (appToken == null) { if (code != null) { appToken = await WebAuthorization.RedeemAuthorizationCodeAsync(clientId, enduri, clientSecret, code, tokenuri, "authorization_code", WebAuthorization.TokenOption.CODE); appToken.Drive = drive; } } if (appToken != null) { if (appToken.Drive == "Google") { var result = await HttpHelper.RequstHttp("GET", "https://www.googleapis.com/drive/v2/about", null, appToken.access_token); Dictionary <string, object> drivetext = HttpHelper.DerealizeJson(result.GetResponseStream()); var map = new ApiDataMapping(); map.Add("name", "DisplayName"); map.Add("quotaBytesTotal", "TotalSize", typeof(long)); map.Add("quotaBytesUsed", "UseSize", typeof(long)); map.Add("quotaBytesUsedAggregate", "EmptySize", typeof(long)); map.Add("quotaBytesUsedInTrash", "DeleteSize", typeof(long)); map.Add("quotaType", "DriveType"); map.Add("rootFolderId", "DriveID"); Dictionary <string, object> di = (Dictionary <string, object>)drivetext["user"]; driveinfo = new DriveInfo(drivetext, map); driveinfo.UserID = di["emailAddress"].ToString(); driveinfo.Status = "normal"; driveinfo.token = appToken; } else if (appToken.Drive == "OneDrive") { var result = await HttpHelper.RequstHttp("GET", "https://api.onedrive.com/v1.0/drive", null, appToken.access_token); Dictionary <string, object> drivetext = HttpHelper.DerealizeJson(result.GetResponseStream()); Dictionary <string, object> owner = (Dictionary <string, object>)drivetext["owner"]; Dictionary <string, object> user = (Dictionary <string, object>)owner["user"]; Dictionary <string, object> quoat = (Dictionary <string, object>)drivetext["quota"]; var map = new ApiDataMapping(); map.Add("id", "DriveID", typeof(string)); map.Add("driveType", "DriveType"); driveinfo = new DriveInfo(drivetext, map); driveinfo.DisplayName = user["displayName"].ToString(); driveinfo.UserID = user["id"].ToString(); driveinfo.TotalSize = long.Parse(quoat["total"].ToString()); driveinfo.EmptySize = long.Parse(quoat["remaining"].ToString()); driveinfo.UseSize = long.Parse(quoat["used"].ToString()); driveinfo.DeleteSize = long.Parse(quoat["deleted"].ToString()); driveinfo.Status = quoat["state"].ToString(); driveinfo.token = appToken; } else if (appToken.Drive == "DropBox") { var result = await HttpHelper.RequstHttp("GET", "https://api.dropbox.com/1/account/info", null, appToken.access_token); Dictionary <string, object> drivetext = HttpHelper.DerealizeJson(result.GetResponseStream()); Dictionary <string, object> quato = (Dictionary <string, object>)drivetext["quota_info"]; var map = new ApiDataMapping(); map.Add("uid", "UserId", typeof(string)); map.Add("display_name", "DisplayName"); driveinfo = new DriveInfo(drivetext, map); driveinfo.TotalSize = long.Parse(quato["quota"].ToString()); driveinfo.UseSize = long.Parse(quato["normal"].ToString()); driveinfo.EmptySize = driveinfo.TotalSize - driveinfo.UseSize; driveinfo.token = appToken; driveinfo.Status = "normal"; } appToken.uid = driveinfo.UserID; unametoken.UserName = this.userName; unametoken.Token = appToken; SaveRefreshToken(unametoken, datastore, userName); token = appToken; } } catch (Exception ex) { } this.OnComplete(this); this.Stop(); }