diff src/luan/webserver/Response.java @ 1146:2dda3c92a473

webserver - implement cookies
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 01 Feb 2018 03:08:21 -0700
parents c123ee15f99b
children 49fb4e83484f
line wrap: on
line diff
--- a/src/luan/webserver/Response.java	Wed Jan 31 01:43:50 2018 -0700
+++ b/src/luan/webserver/Response.java	Thu Feb 01 03:08:21 2018 -0700
@@ -4,12 +4,13 @@
 import java.util.Map;
 import java.util.LinkedHashMap;
 import java.util.Collections;
+import java.util.List;
 
 
 public class Response {
 	public final String protocol = "HTTP/1.1";
 	public volatile Status status = Status.OK;
-	public final Map<String,String> headers = Collections.synchronizedMap(new LinkedHashMap<String,String>());
+	public final Map<String,Object> headers = Collections.synchronizedMap(new LinkedHashMap<String,Object>());
 	{
 		headers.put("Server","ThreeBody");
 	}
@@ -26,6 +27,25 @@
 	}
 
 
+	public void addHeader(String name,String value) {
+		Util.add(headers,name,value);
+	}
+
+	public void setCookie(String name,String value,Map<String,String> attributes) {
+		StringBuilder buf = new StringBuilder();
+		buf.append( Util.urlEncode(name) );
+		buf.append( '=' );
+		buf.append( Util.urlEncode(value) );
+		for( Map.Entry<String,String> entry : attributes.entrySet() ) {
+			buf.append( "; " );
+			buf.append( entry.getKey() );
+			buf.append( '=' );
+			buf.append( entry.getValue() );
+		}
+		addHeader( "Set-Cookie", buf.toString() );
+	}
+
+
 	public String toHeaderString() {
 		StringBuilder sb = new StringBuilder();
 		sb.append( protocol )
@@ -33,10 +53,16 @@
 			.append( ' ' ).append( status.reason )
 			.append( "\r\n" )
 		;
-		for( Map.Entry<String,String> entry : headers.entrySet() ) {
+		for( Map.Entry<String,Object> entry : headers.entrySet() ) {
 			String name = entry.getKey();
-			String value = entry.getValue();
-			sb.append( name ).append( ": " ).append( value ).append( "\r\n" );
+			Object value = entry.getValue();
+			if( value instanceof List ) {
+				for( Object v : (List)value ) {
+					sb.append( name ).append( ": " ).append( v ).append( "\r\n" );
+				}
+			} else {
+				sb.append( name ).append( ": " ).append( value ).append( "\r\n" );
+			}
 		}
 		sb.append( "\r\n" );
 		return sb.toString();