You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

SalesforceAuthProvider.java 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. package com.gitblit.auth;
  2. import com.gitblit.Constants;
  3. import com.gitblit.Constants.AccountType;
  4. import com.gitblit.Keys;
  5. import com.gitblit.auth.AuthenticationProvider.UsernamePasswordAuthenticationProvider;
  6. import com.gitblit.models.UserModel;
  7. import com.gitblit.utils.ArrayUtils;
  8. import com.gitblit.utils.StringUtils;
  9. import com.sforce.soap.partner.Connector;
  10. import com.sforce.soap.partner.GetUserInfoResult;
  11. import com.sforce.soap.partner.PartnerConnection;
  12. import com.sforce.ws.ConnectionException;
  13. import com.sforce.ws.ConnectorConfig;
  14. public class SalesforceAuthProvider extends UsernamePasswordAuthenticationProvider {
  15. public SalesforceAuthProvider() {
  16. super("salesforce");
  17. }
  18. @Override
  19. public AccountType getAccountType() {
  20. return AccountType.SALESFORCE;
  21. }
  22. @Override
  23. public void setup() {
  24. }
  25. @Override
  26. public UserModel authenticate(String username, char[] password) {
  27. ConnectorConfig config = new ConnectorConfig();
  28. config.setUsername(username);
  29. config.setPassword(new String(password));
  30. try {
  31. PartnerConnection connection = Connector.newConnection(config);
  32. GetUserInfoResult info = connection.getUserInfo();
  33. String org = settings.getString(Keys.realm.salesforce.orgId, "0")
  34. .trim();
  35. if (!org.equals("0")) {
  36. if (!org.equals(info.getOrganizationId())) {
  37. logger.warn("Access attempted by user of an invalid org: "
  38. + info.getUserName() + ", org: "
  39. + info.getOrganizationName() + "("
  40. + info.getOrganizationId() + ")");
  41. return null;
  42. }
  43. }
  44. logger.info("Authenticated user " + info.getUserName()
  45. + " using org " + info.getOrganizationName() + "("
  46. + info.getOrganizationId() + ")");
  47. String simpleUsername = getSimpleUsername(info);
  48. UserModel user = null;
  49. synchronized (this) {
  50. user = userManager.getUserModel(simpleUsername);
  51. if (user == null)
  52. user = new UserModel(simpleUsername);
  53. if (StringUtils.isEmpty(user.cookie)
  54. && !ArrayUtils.isEmpty(password)) {
  55. user.cookie = StringUtils.getSHA1(user.username
  56. + new String(password));
  57. }
  58. setUserAttributes(user, info);
  59. updateUser(user);
  60. }
  61. return user;
  62. } catch (ConnectionException e) {
  63. logger.error("Failed to authenticate", e);
  64. }
  65. return null;
  66. }
  67. private void setUserAttributes(UserModel user, GetUserInfoResult info) {
  68. // Don't want visibility into the real password, make up a dummy
  69. user.password = Constants.EXTERNAL_ACCOUNT;
  70. user.accountType = getAccountType();
  71. // Get full name Attribute
  72. user.displayName = info.getUserFullName();
  73. // Get email address Attribute
  74. user.emailAddress = info.getUserEmail();
  75. }
  76. /**
  77. * Simple user name is the first part of the email address.
  78. */
  79. private String getSimpleUsername(GetUserInfoResult info) {
  80. String email = info.getUserEmail();
  81. return email.split("@")[0];
  82. }
  83. @Override
  84. public boolean supportsCredentialChanges() {
  85. return false;
  86. }
  87. @Override
  88. public boolean supportsDisplayNameChanges() {
  89. return false;
  90. }
  91. @Override
  92. public boolean supportsEmailAddressChanges() {
  93. return false;
  94. }
  95. @Override
  96. public boolean supportsTeamMembershipChanges() {
  97. return true;
  98. }
  99. }