Support multiple authenticate headers
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / internal / http / RemoteAuthHttpExchange.java
index 68e0b1e3eada1cae69318cc03f2694c86346d6e6..b7e670c7943899cb085a1601c0485ffd99c243ea 100644 (file)
@@ -1,8 +1,10 @@
 package org.argeo.cms.internal.http;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
+import java.util.Objects;
 
 import org.argeo.cms.auth.RemoteAuthRequest;
 import org.argeo.cms.auth.RemoteAuthResponse;
@@ -11,27 +13,34 @@ import org.argeo.cms.auth.RemoteAuthSession;
 import com.sun.net.httpserver.HttpExchange;
 
 public class RemoteAuthHttpExchange implements RemoteAuthRequest, RemoteAuthResponse {
-       private HttpExchange httpExchange;
+       private final HttpExchange httpExchange;
+       private RemoteAuthSession remoteAuthSession;
 
        public RemoteAuthHttpExchange(HttpExchange httpExchange) {
                this.httpExchange = httpExchange;
+               this.remoteAuthSession = (RemoteAuthSession) httpExchange.getAttribute(RemoteAuthSession.class.getName());
+               Objects.requireNonNull(this.remoteAuthSession);
        }
 
        @Override
-       public void setHeader(String keys, String value) {
-               httpExchange.getResponseHeaders().put(keys, Collections.singletonList(value));
+       public void setHeader(String headerName, String value) {
+               httpExchange.getResponseHeaders().put(headerName, Collections.singletonList(value));
+       }
+
+       @Override
+       public void addHeader(String headerName, String value) {
+               List<String> values = httpExchange.getResponseHeaders().getOrDefault(headerName, new ArrayList<>());
+               values.add(value);
        }
 
        @Override
        public RemoteAuthSession getSession() {
-               // TODO Auto-generated method stub
-               return null;
+               return remoteAuthSession;
        }
 
        @Override
        public RemoteAuthSession createSession() {
-               // TODO Auto-generated method stub
-               return null;
+               throw new UnsupportedOperationException("Cannot create remote session");
        }
 
        @Override