Package com.gitblit.auth

Source Code of com.gitblit.auth.SalesforceAuthProvider

package com.gitblit.auth;

import com.gitblit.Constants;
import com.gitblit.Constants.AccountType;
import com.gitblit.Keys;
import com.gitblit.auth.AuthenticationProvider.UsernamePasswordAuthenticationProvider;
import com.gitblit.models.UserModel;
import com.sforce.soap.partner.Connector;
import com.sforce.soap.partner.GetUserInfoResult;
import com.sforce.soap.partner.PartnerConnection;
import com.sforce.ws.ConnectionException;
import com.sforce.ws.ConnectorConfig;

public class SalesforceAuthProvider extends UsernamePasswordAuthenticationProvider {

  public SalesforceAuthProvider() {
    super("salesforce");
  }

  @Override
  public AccountType getAccountType() {
    return AccountType.SALESFORCE;
  }

  @Override
  public void setup() {
  }

  @Override
  public UserModel authenticate(String username, char[] password) {
    ConnectorConfig config = new ConnectorConfig();
    config.setUsername(username);
    config.setPassword(new String(password));

    try {
      PartnerConnection connection = Connector.newConnection(config);

      GetUserInfoResult info = connection.getUserInfo();

      String org = settings.getString(Keys.realm.salesforce.orgId, "0")
          .trim();

      if (!org.equals("0")) {
        if (!org.equals(info.getOrganizationId())) {
          logger.warn("Access attempted by user of an invalid org: "
              + info.getUserName() + ", org: "
              + info.getOrganizationName() + "("
              + info.getOrganizationId() + ")");

          return null;
        }
      }

      logger.info("Authenticated user " + info.getUserName()
          + " using org " + info.getOrganizationName() + "("
          + info.getOrganizationId() + ")");

      String simpleUsername = getSimpleUsername(info);

      UserModel user = null;
      synchronized (this) {
        user = userManager.getUserModel(simpleUsername);
        if (user == null) {
          user = new UserModel(simpleUsername);
        }

        setCookie(user, password);
        setUserAttributes(user, info);

        updateUser(user);
      }

      return user;
    } catch (ConnectionException e) {
      logger.error("Failed to authenticate", e);
    }

    return null;
  }

  private void setUserAttributes(UserModel user, GetUserInfoResult info) {
    // Don't want visibility into the real password, make up a dummy
    user.password = Constants.EXTERNAL_ACCOUNT;
    user.accountType = getAccountType();

    // Get full name Attribute
    user.displayName = info.getUserFullName();

    // Get email address Attribute
    user.emailAddress = info.getUserEmail();
  }

  /**
   * Simple user name is the first part of the email address.
   */
  private String getSimpleUsername(GetUserInfoResult info) {
    String email = info.getUserEmail();

    return email.split("@")[0];
  }


  @Override
  public boolean supportsCredentialChanges() {
    return false;
  }

  @Override
  public boolean supportsDisplayNameChanges() {
    return false;
  }

  @Override
  public boolean supportsEmailAddressChanges() {
    return false;
  }

  @Override
  public boolean supportsTeamMembershipChanges() {
    return true;
  }
}
TOP

Related Classes of com.gitblit.auth.SalesforceAuthProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.