示例#1
0
  @Override
  protected Boolean doInBackground(Void... arg) {
    boolean isSuccess = false;
    if (auth == null) {
      return isSuccess;
    }

    oauthConfig = auth.getoAuthConfig();
    if (oauthConfig == null) {
      return isSuccess;
    }

    String username = auth.getAccessToken();
    String password = auth.getAccessSecret();
    ServiceProvider sp = auth.getServiceProvider();
    try {
      if (NetUtil.isNETWAP()
          && (URLUtil.isHttpsUrl(oauthConfig.getRequestTokenUrl())
              || URLUtil.isHttpsUrl(oauthConfig.getAccessTokenUrl()))) {
        throw new SheJiaoMaoException(SheJiaoMaoException.NET_HTTPS_UNDER_CMWAP);
      }

      Authorization resultAuth = null;
      switch (sp) {
        case NetEase:
          if (username.indexOf("@") < 0) {
            username += "@163.com"; // 如果用户没输入完整的邮件地址,则自动追加 @163.com
          }
          // 直落
        case Sina:
        case Sohu:
        case Fanfou:
        case Twitter:
          auth.setAccessToken(username);
          auth.setAccessSecret(password);
          if (oauthConfig.getAuthVersion() == Authorization.AUTH_VERSION_OAUTH_2) {
            OAuth2AuthorizeHelper authHelper = new OAuth2AuthorizeHelper();
            resultAuth = authHelper.retrieveAccessToken(auth);
          } else {
            OAuthAuthorizeHelper authHelper = new OAuthAuthorizeHelper();
            resultAuth = authHelper.retrieveAccessToken(auth);
          }

          break;
        default:
          break;
      }

      if (resultAuth == null) {
        throw new SheJiaoMaoException(SheJiaoMaoException.AUTH_TOKEN_IS_NULL);
      }

      Logger.debug(resultAuth.toString());

      BaseUser user = null;
      if (sp.isSns()) {
        Sns sns = SnsFactory.getInstance(resultAuth);
        String userId = sns.getUserId();
        user = sns.showUser(userId);
      } else {
        Weibo mBlog = WeiboFactory.getInstance(resultAuth);
        user = mBlog.verifyCredentials();
      }

      final LocalAccountDao accountDao = new LocalAccountDao(context);
      if (accountDao.isExists(sp, user.getUserId())) {
        throw new SheJiaoMaoException(SheJiaoMaoException.ACCOUNT_IS_EXIST);
      }

      if (accountDao.findAllValid() == null) {
        isMakeDefault = true;
      }

      account = new LocalAccount();
      account.setAuthorization(auth);
      account.setUser(user);
      account.setState(Account.STATE_ACTIVE);
      account.setAppKey(oauthConfig.getConsumerKey());
      account.setAppSecret(oauthConfig.getConsumerSecret());
      account.setCreatedAt(new Date());
      accountDao.add(account);

      if (isMakeDefault) {
        accountDao.makeDefault(account);
      }

      GlobalVars.addAccount(account);

      isSuccess = true;
    } catch (LibException e) {
      resultMsg = ResourceBook.getResultCodeValue(e.getErrorCode(), context);
      Logger.error(resultMsg, e);
      context.resetAuthToken();
    } catch (SheJiaoMaoException e) {
      resultMsg = ResourceBook.getResultCodeValue(e.getStatusCode(), context);
      Logger.error(resultMsg, e);
      context.resetAuthToken();
    }

    return isSuccess;
  }