Merge branch 'stable-3.4'

* stable-3.4:
  Create HTTP session only for login requests

Change-Id: I6143bccd46a0a683d5da241db3eb3d1e1f945830
diff --git a/BUILD b/BUILD
index 3454255..a13b9ed 100644
--- a/BUILD
+++ b/BUILD
@@ -9,6 +9,7 @@
     resources = glob(["src/main/resources/**"]),
     deps = [
         "@commons-collections//jar",
+        "@commons-lang//jar",
         "@cryptacular//jar",
         "@joda-time//jar",
         "@opensaml-core//jar",
diff --git a/external_plugin_deps.bzl b/external_plugin_deps.bzl
index 59f0529..16b7dad 100644
--- a/external_plugin_deps.bzl
+++ b/external_plugin_deps.bzl
@@ -15,6 +15,12 @@
     )
 
     maven_jar(
+        name = "commons-lang",
+        artifact = "commons-lang:commons-lang:2.6",
+        sha1 = "0ce1edb914c94ebc388f086c6827e8bdeec71ac2",
+    )
+
+    maven_jar(
         name = "cryptacular",
         artifact = "org.cryptacular:cryptacular:1.2.1",
         sha1 = "c470bac7309ac04b0b9529bd7dcb1e0b75954f11",
diff --git a/src/main/java/com/googlesource/gerrit/plugins/saml/SamlMembership.java b/src/main/java/com/googlesource/gerrit/plugins/saml/SamlMembership.java
index 06940dc..7b91f1e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/saml/SamlMembership.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/saml/SamlMembership.java
@@ -24,9 +24,9 @@
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.ServerInitiated;
 import com.google.gerrit.server.account.*;
+import com.google.gerrit.server.group.db.GroupDelta;
 import com.google.gerrit.server.group.db.GroupsUpdate;
 import com.google.gerrit.server.group.db.InternalGroupCreation;
-import com.google.gerrit.server.group.db.InternalGroupUpdate;
 import com.google.gerrit.server.notedb.Sequences;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
@@ -56,6 +56,7 @@
   private final IdentifiedUser.GenericFactory userFactory;
   private final Provider<GroupsUpdate> groupsUpdateProvider;
   private final Sequences sequences;
+  private final AuthRequest.Factory authRequestFactory;
 
   @Inject
   SamlMembership(
@@ -65,7 +66,8 @@
       GroupCache groupCache,
       IdentifiedUser.GenericFactory userFactory,
       @ServerInitiated Provider<GroupsUpdate> groupsUpdateProvider,
-      Sequences sequences) {
+      Sequences sequences,
+      AuthRequest.Factory authRequestFactory) {
     this.memberAttr = samlConfig.getMemberOfAttr();
     this.serverIdent = serverIdent;
     this.accountManager = accountManager;
@@ -73,6 +75,7 @@
     this.userFactory = userFactory;
     this.groupsUpdateProvider = groupsUpdateProvider;
     this.sequences = sequences;
+    this.authRequestFactory = authRequestFactory;
   }
 
   /**
@@ -84,7 +87,8 @@
   public void sync(AuthenticatedUser user, SAML2Profile profile) throws IOException {
     Set<AccountGroup.UUID> samlMembership =
         Optional.ofNullable((List<?>) profile.getAttribute(memberAttr, List.class))
-            .orElse(Collections.emptyList()).stream()
+            .orElse(Collections.emptyList())
+            .stream()
             .map(m -> getOrCreateGroup(m.toString()))
             .filter(Optional::isPresent)
             .map(Optional::get)
@@ -130,9 +134,8 @@
   }
 
   private void updateMembers(
-      AccountGroup.UUID group, InternalGroupUpdate.MemberModification memberModification) {
-    InternalGroupUpdate update =
-        InternalGroupUpdate.builder().setMemberModification(memberModification).build();
+      AccountGroup.UUID group, GroupDelta.MemberModification memberModification) {
+    GroupDelta update = GroupDelta.builder().setMemberModification(memberModification).build();
     try {
       groupsUpdateProvider.get().updateGroup(group, update);
     } catch (Exception e) {
@@ -156,8 +159,8 @@
               .setNameKey(name)
               .setId(groupId)
               .build();
-      InternalGroupUpdate.Builder groupUpdateBuilder =
-          InternalGroupUpdate.builder()
+      GroupDelta.Builder groupUpdateBuilder =
+          GroupDelta.builder()
               .setVisibleToAll(false)
               .setDescription(samlGroup + " (imported by the SAML plugin)");
       return groupsUpdateProvider.get().createGroup(groupCreation, groupUpdateBuilder.build());
@@ -174,7 +177,7 @@
   }
 
   private Account.Id getOrCreateAccountId(AuthenticatedUser user) throws IOException {
-    AuthRequest authRequest = AuthRequest.forUser(user.getUsername());
+    AuthRequest authRequest = authRequestFactory.createForUser(user.getUsername());
     authRequest.setUserName(user.getUsername());
     authRequest.setEmailAddress(user.getEmail());
     authRequest.setDisplayName(user.getDisplayName());