comparison src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorResourceImpl.java @ 91:cf44d9e1a4a7

let CORS be handled by Restlet 2.3 CorsFilter.
author casties
date Sun, 08 Feb 2015 18:09:00 +0100
parents 475ab3d32630
children acd44dfec9c8
comparison
equal deleted inserted replaced
90:475ab3d32630 91:cf44d9e1a4a7
42 42
43 import org.apache.commons.codec.binary.Base64; 43 import org.apache.commons.codec.binary.Base64;
44 import org.json.JSONArray; 44 import org.json.JSONArray;
45 import org.json.JSONException; 45 import org.json.JSONException;
46 import org.json.JSONObject; 46 import org.json.JSONObject;
47 import org.restlet.data.Header;
47 import org.restlet.data.Status; 48 import org.restlet.data.Status;
48 import org.restlet.data.Header;
49 import org.restlet.representation.Representation; 49 import org.restlet.representation.Representation;
50 import org.restlet.resource.Options;
51 import org.restlet.resource.ServerResource; 50 import org.restlet.resource.ServerResource;
52 import org.restlet.util.Series; 51 import org.restlet.util.Series;
53 52
54 import com.google.gson.JsonArray; 53 import com.google.gson.JsonArray;
55 import com.google.gson.JsonElement; 54 import com.google.gson.JsonElement;
74 73
75 protected static Logger logger = Logger.getLogger(AnnotatorResourceImpl.class.getCanonicalName()); 74 protected static Logger logger = Logger.getLogger(AnnotatorResourceImpl.class.getCanonicalName());
76 75
77 private AnnotationStore store; 76 private AnnotationStore store;
78 77
79 protected String getAllowedMethodsForHeader() {
80 return "OPTIONS,GET,POST";
81 }
82
83 protected AnnotationStore getAnnotationStore() { 78 protected AnnotationStore getAnnotationStore() {
84 if (store == null) { 79 if (store == null) {
85 store = ((BaseRestlet) getApplication()).getAnnotationStore(); 80 store = ((BaseRestlet) getApplication()).getAnnotationStore();
86 } 81 }
87 return store; 82 return store;
103 try { 98 try {
104 return new String(Base64.decodeBase64(id), "UTF-8"); 99 return new String(Base64.decodeBase64(id), "UTF-8");
105 } catch (UnsupportedEncodingException e) { 100 } catch (UnsupportedEncodingException e) {
106 return null; 101 return null;
107 } 102 }
108 }
109
110 /**
111 * Handle options request to allow CORS for AJAX.
112 *
113 * @param entity
114 */
115 @Options
116 public void doOptions(Representation entity) {
117 logger.fine("AnnotatorResourceImpl doOptions!");
118 setCorsHeaders();
119 }
120
121 /**
122 * set headers to allow CORS for AJAX.
123 */
124 protected void setCorsHeaders() {
125 Series<Header> responseHeaders = (Series<Header>) getResponse().getHeaders();
126 if (responseHeaders == null) {
127 responseHeaders = new Series<Header>(Header.class);
128 getResponse().getAttributes().put("org.restlet.http.headers", responseHeaders);
129 }
130 responseHeaders.add("Access-Control-Allow-Methods", getAllowedMethodsForHeader());
131 // echo back Origin and Request-Headers
132 @SuppressWarnings("unchecked")
133 Series<Header> requestHeaders = (Series<Header>) getRequest().getAttributes().get("org.restlet.http.headers");
134 String origin = requestHeaders.getFirstValue("Origin", true);
135 if (origin == null) {
136 responseHeaders.add("Access-Control-Allow-Origin", "*");
137 } else {
138 responseHeaders.add("Access-Control-Allow-Origin", origin);
139 }
140 String allowHeaders = requestHeaders.getFirstValue("Access-Control-Request-Headers", true);
141 if (allowHeaders != null) {
142 responseHeaders.add("Access-Control-Allow-Headers", allowHeaders);
143 }
144 responseHeaders.add("Access-Control-Allow-Credentials", "true");
145 responseHeaders.add("Access-Control-Max-Age", "60");
146 } 103 }
147 104
148 /** 105 /**
149 * returns if authentication information from headers is valid. 106 * returns if authentication information from headers is valid.
150 * 107 *