protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                var error = Request["error"];
                if (!string.IsNullOrEmpty(error))
                {
                    if (error == "access_denied")
                    {
                        error = "Canceled at provider";
                    }
                    throw new Exception(error);
                }

                var code = Request["code"];
                if (string.IsNullOrEmpty(code))
                {
                    OAuth20TokenHelper.RequestCode <DocuSignLoginProvider>(HttpContext.Current,
                                                                           DocuSignLoginProvider.Instance.Scopes,
                                                                           new Dictionary <string, string>
                    {
                        { "prompt", "login" }
                    });
                }
                else
                {
                    Master.SubmitCode(code);
                }
            }
            catch (ThreadAbortException)
            {
            }
            catch (Exception ex)
            {
                Master.SubmitError(ex.Message);
            }
        }
示例#2
0
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                var error = Request["error"];
                if (!string.IsNullOrEmpty(error))
                {
                    if (error == "access_denied")
                    {
                        error = "Canceled at provider";
                    }
                    throw new Exception(error);
                }

                var code = Request["code"];
                if (string.IsNullOrEmpty(code))
                {
                    OAuth20TokenHelper.RequestCode <DropboxLoginProvider>(HttpContext.Current,
                                                                          additionalArgs: new Dictionary <string, string>
                    {
                        { "force_reauthentication", "true" },
                        { "token_access_type", "offline" }
                    });
                }
                else
                {
                    Master.SubmitCode(code);
                }
            }
            catch (ThreadAbortException)
            {
            }
            catch (Exception ex)
            {
                Master.SubmitError(ex.Message);
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                var error = Request["error"];
                if (!string.IsNullOrEmpty(error))
                {
                    if (error == "access_denied")
                    {
                        error = "Canceled at provider";
                    }
                    throw new Exception(error);
                }

                var code = Request["code"];
                if (string.IsNullOrEmpty(code))
                {
                    OAuth20TokenHelper.RequestCode(HttpContext.Current,
                                                   OneDriveLoginProvider.OneDriveOauthCodeUrl,
                                                   OneDriveLoginProvider.OneDriveOAuth20ClientId,
                                                   OneDriveLoginProvider.OneDriveOAuth20RedirectUrl,
                                                   OneDriveLoginProvider.OneDriveProfileScope);
                }
                else
                {
                    Master.SubmitToken(code, Source);
                }
            }
            catch (ThreadAbortException)
            {
            }
            catch (Exception ex)
            {
                Master.SubmitError(ex.Message, Source);
            }
        }
示例#4
0
        public AccountInfo UpdateAccountOAuth(int mailboxId, string code, byte type)
        {
            if (string.IsNullOrEmpty(code))
            {
                throw new ArgumentException(@"Empty OAuth code", "code");
            }

            var oAuthToken = OAuth20TokenHelper.GetAccessToken <GoogleLoginProvider>(code);

            if (oAuthToken == null)
            {
                throw new Exception(@"Empty OAuth token");
            }

            if (string.IsNullOrEmpty(oAuthToken.AccessToken))
            {
                throw new Exception(@"Empty OAuth AccessToken");
            }

            if (string.IsNullOrEmpty(oAuthToken.RefreshToken))
            {
                throw new Exception(@"Empty OAuth RefreshToken");
            }

            if (oAuthToken.IsExpired)
            {
                throw new Exception(@"OAuth token is expired");
            }

            var loginProfile = GoogleLoginProvider.Instance.GetLoginProfile(oAuthToken.AccessToken);
            var email        = loginProfile.EMail;

            if (string.IsNullOrEmpty(email))
            {
                throw new Exception(@"Empty email");
            }

            Mailbox mbox;

            using (var daoFactory = new DaoFactory())
            {
                var daoMailbox = daoFactory.CreateMailboxDao();

                mbox = daoMailbox.GetMailBox(
                    new СoncreteUserMailboxExp(
                        mailboxId,
                        Tenant, User));

                if (null == mbox)
                {
                    throw new ArgumentException("Mailbox with specified email doesn't exist.");
                }

                if (mbox.IsTeamlabMailbox || string.IsNullOrEmpty(mbox.OAuthToken))
                {
                    throw new ArgumentException("Mailbox with specified email can't be updated");
                }

                if (!mbox.Address.Equals(email, StringComparison.InvariantCultureIgnoreCase))
                {
                    throw new ArgumentException("Mailbox with specified email can't be updated");
                }

                mbox.OAuthToken = oAuthToken.ToJson();

                var result = daoMailbox.SaveMailBox(mbox);

                mbox.Id = result;
            }

            CacheEngine.Clear(User);

            if (Defines.IsSignalRAvailable)
            {
                var engine = new EngineFactory(Tenant, User);
                engine.AccountEngine.SetAccountsActivity();
            }

            var accountInfo = new AccountInfo(mbox.Id, mbox.Address, mbox.Name, mbox.Enabled, mbox.QuotaError,
                                              MailBoxData.AuthProblemType.NoProblems, new MailSignatureData(mbox.Id, Tenant, "", false),
                                              new MailAutoreplyData(mbox.Id, Tenant, false, false, false, DateTime.MinValue,
                                                                    DateTime.MinValue, string.Empty, string.Empty), true, mbox.EmailInFolder, false, false);

            return(accountInfo);
        }
示例#5
0
        private static AuthData GetEncodedAccesToken(AuthData authData, ProviderTypes provider)
        {
            switch (provider)
            {
            case ProviderTypes.GoogleDrive:

                var code = authData.Token;

                var token = OAuth20TokenHelper.GetAccessToken(GoogleLoginProvider.GoogleOauthTokenUrl,
                                                              GoogleLoginProvider.GoogleOAuth20ClientId,
                                                              GoogleLoginProvider.GoogleOAuth20ClientSecret,
                                                              GoogleLoginProvider.GoogleOAuth20RedirectUrl,
                                                              code);

                if (token == null)
                {
                    throw new UnauthorizedAccessException(string.Format(FilesCommonResource.ErrorMassage_SecurityException_Auth, provider));
                }

                return(new AuthData(token: token.ToJson()));

            case ProviderTypes.Box:

                code = authData.Token;

                token = OAuth20TokenHelper.GetAccessToken(BoxLoginProvider.BoxOauthTokenUrl,
                                                          BoxLoginProvider.BoxOAuth20ClientId,
                                                          BoxLoginProvider.BoxOAuth20ClientSecret,
                                                          BoxLoginProvider.BoxOAuth20RedirectUrl,
                                                          code);

                if (token == null)
                {
                    throw new UnauthorizedAccessException(string.Format(FilesCommonResource.ErrorMassage_SecurityException_Auth, provider));
                }

                return(new AuthData(token: token.ToJson()));

            case ProviderTypes.DropboxV2:

                code = authData.Token;

                token = OAuth20TokenHelper.GetAccessToken(DropboxLoginProvider.DropboxOauthTokenUrl,
                                                          DropboxLoginProvider.DropboxOAuth20ClientId,
                                                          DropboxLoginProvider.DropboxOAuth20ClientSecret,
                                                          DropboxLoginProvider.DropboxOAuth20RedirectUrl,
                                                          code);

                if (token == null)
                {
                    throw new UnauthorizedAccessException(string.Format(FilesCommonResource.ErrorMassage_SecurityException_Auth, provider));
                }

                return(new AuthData(token: token.ToJson()));

            case ProviderTypes.DropBox:

                var dropBoxRequestToken = DropBoxRequestToken.Parse(authData.Token);

                var config      = CloudStorage.GetCloudConfigurationEasy(nSupportedCloudConfigurations.DropBox);
                var accessToken = DropBoxStorageProviderTools.ExchangeDropBoxRequestTokenIntoAccessToken(config as DropBoxConfiguration,
                                                                                                         ImportConfiguration.DropboxAppKey,
                                                                                                         ImportConfiguration.DropboxAppSecret,
                                                                                                         dropBoxRequestToken);

                var base64Token = new CloudStorage().SerializeSecurityTokenToBase64Ex(accessToken, config.GetType(), new Dictionary <string, string>());

                return(new AuthData(token: base64Token));

            case ProviderTypes.SkyDrive:

                code = authData.Token;

                token = OAuth20TokenHelper.GetAccessToken(OneDriveLoginProvider.OneDriveOauthTokenUrl,
                                                          OneDriveLoginProvider.OneDriveOAuth20ClientId,
                                                          OneDriveLoginProvider.OneDriveOAuth20ClientSecret,
                                                          OneDriveLoginProvider.OneDriveOAuth20RedirectUrl,
                                                          code);

                if (token == null)
                {
                    throw new UnauthorizedAccessException(string.Format(FilesCommonResource.ErrorMassage_SecurityException_Auth, provider));
                }

                accessToken = AppLimit.CloudComputing.SharpBox.Common.Net.oAuth20.OAuth20Token.FromJson(token.ToJson());

                if (accessToken == null)
                {
                    throw new UnauthorizedAccessException(string.Format(FilesCommonResource.ErrorMassage_SecurityException_Auth, provider));
                }

                config = CloudStorage.GetCloudConfigurationEasy(nSupportedCloudConfigurations.SkyDrive);
                var storage = new CloudStorage();
                base64Token = storage.SerializeSecurityTokenToBase64Ex(accessToken, config.GetType(), new Dictionary <string, string>());

                return(new AuthData(token: base64Token));

            case ProviderTypes.SharePoint:
            case ProviderTypes.WebDav:
                break;

            default:
                authData.Url = null;
                break;
            }

            return(authData);
        }
示例#6
0
        public MailAccountData UpdateAccountOAuth(string code, byte type, int mailboxId)
        {
            if (string.IsNullOrEmpty(code))
            {
                throw new ArgumentException(@"Empty oauth code", "code");
            }

            var oAuthToken = OAuth20TokenHelper.GetAccessToken(GoogleLoginProvider.GoogleOauthTokenUrl,
                                                               GoogleLoginProvider.GoogleOAuth20ClientId,
                                                               GoogleLoginProvider.GoogleOAuth20ClientSecret,
                                                               GoogleLoginProvider.GoogleOAuth20RedirectUrl,
                                                               code);

            if (oAuthToken == null)
            {
                throw new Exception(@"Empty oauth token");
            }

            var loginProfile = new GoogleLoginProvider().GetLoginProfile(oAuthToken.AccessToken);
            var email        = loginProfile.EMail;

            if (string.IsNullOrEmpty(email))
            {
                throw new Exception(@"Empty email");
            }

            try
            {
                var mbox = MailBoxManager.GetMailBox(mailboxId);

                if (null == mbox)
                {
                    throw new ArgumentException("Mailbox with specified email doesn't exist.");
                }

                if (mbox.IsTeamlab || !mbox.IsOAuth)
                {
                    throw new ArgumentException("Mailbox with specified email can't be updated");
                }

                if (!mbox.EMail.Address.Equals(email, StringComparison.InvariantCultureIgnoreCase))
                {
                    throw new ArgumentException("Mailbox with specified email can't be updated");
                }

                mbox.OAuthToken           = oAuthToken.ToJson();
                mbox.AccessTokenRefreshed = true;

                MailBoxManager.SaveMailBox(mbox, (AuthorizationServiceType)type);
                MailBoxManager.CachedAccounts.Clear(Username);

                if (IsSignalRAvailable)
                {
                    MailBoxManager.UpdateUserActivity(TenantId, Username);
                }

                var accountInfo = new AccountInfo(mbox.MailBoxId, mbox.EMailView, mbox.Name, mbox.Enabled, mbox.QuotaError,
                                                  MailBox.AuthProblemType.NoProblems, new MailSignature(mbox.MailBoxId, TenantId, "", false),
                                                  new MailAutoreply(mbox.MailBoxId, TenantId, false, false, false, DateTime.MinValue,
                                                                    DateTime.MinValue, String.Empty, String.Empty), false, mbox.EMailInFolder, false, false);

                return(accountInfo.ToAddressData().FirstOrDefault());
            }
            catch (Exception imapException)
            {
                throw new Exception(GetFormattedTextError(imapException, MailServerType.ImapOAuth, imapException is ImapConnectionTimeoutException));
            }
        }
 public ThirdPartyController(OAuth20TokenHelper oAuth20TokenHelper)
 {
     OAuth20TokenHelper = oAuth20TokenHelper;
 }
示例#8
0
 public OAuth20Token GetToken(string codeOAuth)
 {
     return(OAuth20TokenHelper.GetAccessToken <T>(codeOAuth));
 }