Skip to content

Commit d4042c3

Browse files
committed
Add Cookies to request .
1 parent 697ff0b commit d4042c3

3 files changed

Lines changed: 67 additions & 24 deletions

File tree

server/src/main/java/com/androthink/server/core/RequestHandler.java

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,22 @@ class RequestHandler {
1919
private final BufferedReader requestStream;
2020
private final Request request;
2121

22-
static RequestHandler getInstance(Request request,BufferedReader requestStream){
23-
return new RequestHandler(request,requestStream);
22+
static RequestHandler getInstance(Request request, BufferedReader requestStream) {
23+
return new RequestHandler(request, requestStream);
2424
}
2525

26-
private RequestHandler(Request request,BufferedReader requestStream) {
26+
private RequestHandler(Request request, BufferedReader requestStream) {
2727
this.requestStream = requestStream;
2828
this.request = request;
2929
}
3030

31-
Request extract() throws IOException ,JSONException{
31+
Request extract() throws IOException, JSONException {
3232
String headerLine = requestStream.readLine(); // ===> POST / HTTP/1.1
3333

34-
if(headerLine == null)
34+
if (headerLine == null)
3535
return request;
3636

37-
Scanner scanner = new Scanner(headerLine);
37+
Scanner scanner = new Scanner(headerLine);
3838

3939
this.request.setMethod(scanner.next().toLowerCase()); //===> POST
4040
this.request.setRoutePath(scanner.next().toLowerCase()); // ===> /
@@ -43,24 +43,39 @@ Request extract() throws IOException ,JSONException{
4343
scanner.close();
4444

4545
// Headers ...
46-
Map<String,String> requestHeaders = new HashMap<>();
46+
Map<String, String> requestHeaders = new HashMap<>();
4747

48-
while((headerLine = requestStream.readLine()).length() != 0){
48+
while ((headerLine = requestStream.readLine()).length() != 0) {
4949
scanner = new Scanner(headerLine);
5050

51-
String key = scanner.next().replace(":","");
51+
String key = scanner.next().replace(":", "");
5252
StringBuilder value = new StringBuilder();
5353

54-
while (scanner.hasNext()){ value.append(scanner.next()); }
54+
while (scanner.hasNext()) {
55+
value.append(scanner.next());
56+
}
5557

5658
requestHeaders.put(key.toLowerCase(), value.toString());
5759

5860
scanner.close();
5961
}
6062

63+
String cookies = requestHeaders.get("cookie");
64+
if (cookies != null && !cookies.isEmpty()) {
65+
Map<String, String> requestCookies = new HashMap<>();
66+
String[] data = cookies.split(";");
67+
for (String s : data) {
68+
String[] cook = s.split("=");
69+
if (cook.length == 2)
70+
requestCookies.put(cook[0], cook[1]);
71+
}
72+
request.setRequestCookies(requestCookies);
73+
requestHeaders.remove("cookie");
74+
}
75+
6176
// Review Content Type & if Form-Data ==> get Boundary
6277
String contentTypeHeader = requestHeaders.get(ServerHelper.MAIN_HEADERS.CONTENT_TYPE);
63-
if(contentTypeHeader != null && contentTypeHeader.toLowerCase().contains(ServerHelper.CONTENT_TYPE.FORM_DATA)) {
78+
if (contentTypeHeader != null && contentTypeHeader.toLowerCase().contains(ServerHelper.CONTENT_TYPE.FORM_DATA)) {
6479
// multipart/form-data; boundary=--------------------------809476465016676300543428
6580
String[] data = contentTypeHeader.split(";");
6681
requestHeaders.put(ServerHelper.MAIN_HEADERS.CONTENT_TYPE, data[0]);
@@ -75,14 +90,14 @@ Request extract() throws IOException ,JSONException{
7590
return request;
7691
}
7792

78-
private void extractPayload() throws IOException,JSONException{
93+
private void extractPayload() throws IOException, JSONException {
7994
StringBuilder payload = new StringBuilder();
80-
while(requestStream.ready()){
95+
while (requestStream.ready()) {
8196
payload.append((char) requestStream.read());
8297
}
8398
String contentType = request.getHeaders().get(ServerHelper.MAIN_HEADERS.CONTENT_TYPE);
8499

85-
if(contentType != null){
100+
if (contentType != null) {
86101
Object requestPayload = null;
87102

88103
switch (contentType) {
@@ -94,11 +109,11 @@ private void extractPayload() throws IOException,JSONException{
94109
break;
95110
case ServerHelper.CONTENT_TYPE.FORM_URL_ENCODED_DATA:
96111
String[] formParams = payload.toString().split("&");
97-
if(formParams.length>0) {
112+
if (formParams.length > 0) {
98113
requestPayload = new JSONObject();
99114
for (String formParam : formParams) {
100115
String[] details = formParam.split("=");
101-
if(details.length == 2) {
116+
if (details.length == 2) {
102117
((JSONObject) requestPayload).put(details[0], details[1]);
103118
}
104119
}

server/src/main/java/com/androthink/server/core/RoutesHandler.java

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,24 @@ void Handle(Request request, ResponseHandler responseHandler) throws IOException
4141

4242
if (route != null) {
4343
if (route.isAuth()) {
44-
String authKey = getAuthorizationKey(request.getHeaders());
45-
if (authKey != null) {
46-
request.setApiKey(authKey);
47-
route.getCallBack().onRequested(request, responseHandler);
44+
if (isApiRoute(request.getRoutePath())) {
45+
String authKey = getAuthorizationKey(request.getHeaders());
46+
if (authKey != null) {
47+
request.setApiKey(authKey);
48+
route.getCallBack().onRequested(request, responseHandler);
49+
return;
50+
}
51+
52+
responseHandler.sendJsonResponse(ServerHelper.RESPONSE_CODE.UNAUTHORIZED,
53+
"{\"status\":false,\"error\":\"Error 401 UnAuthorized !\"}");
4854
} else {
49-
if (isApiRoute(request.getRoutePath()))
50-
responseHandler.sendJsonResponse(ServerHelper.RESPONSE_CODE.UNAUTHORIZED,
51-
"{\"status\":false,\"error\":\"Error 401 UnAuthorized !\"}");
52-
else
55+
String authKey = getAuthorizationToken(request.getRequestCookies());
56+
if (authKey != null) {
57+
request.setApiKey(authKey);
58+
route.getCallBack().onRequested(request, responseHandler);
59+
} else
5360
responseHandler.sendHtmlFileResponse(ServerHelper.RESPONSE_CODE.UNAUTHORIZED, "html/login.html");
61+
5462
}
5563
} else
5664
route.getCallBack().onRequested(request, responseHandler);
@@ -139,4 +147,14 @@ private String getAuthorizationKey(@NonNull Map<String, String> headers) {
139147

140148
return null;
141149
}
150+
151+
@Nullable
152+
private String getAuthorizationToken(@NonNull Map<String, String> cookies) {
153+
for (String key : cookies.keySet()) {
154+
if (key.equals("token"))
155+
return cookies.get(key);
156+
}
157+
158+
return null;
159+
}
142160
}

server/src/main/java/com/androthink/server/model/Request.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@ public class Request {
1717

1818
private Object requestPayload;
1919
private Map<String,String> requestHeaders;
20+
private Map<String,String> requestCookies;
2021

2122
public Request(String requestId,RequestCallBack callBack){
2223
this.requestId = requestId;
2324
this.requestCallBack = callBack;
2425
this.requestHeaders = new HashMap<>();
26+
this.requestCookies = new HashMap<>();
2527
}
2628

2729
public String getApiKey() {
@@ -80,6 +82,14 @@ public void setHeaders(Map<String, String> requestHeaders) {
8082
this.requestHeaders = requestHeaders;
8183
}
8284

85+
public void setRequestCookies(Map<String, String> requestCookies) {
86+
this.requestCookies = requestCookies;
87+
}
88+
89+
public Map<String, String> getRequestCookies() {
90+
return requestCookies;
91+
}
92+
8393
public void onError(){
8494
if(this.requestCallBack != null)
8595
this.requestCallBack.onError(this.requestId);

0 commit comments

Comments
 (0)