Mercurial Hosting > luan
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();