io.milton.http.Request Maven / Gradle / Ivy
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package io.milton.http;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Map;
public interface Request {
enum Depth {
ZERO,
ONE,
INFINITY
}
enum CacheControlRequest {
NO_CACHE("no-cache"),
NO_STORE("no-store"),
MAX_AGE("max-age"), // =delta-seconds
MAX_STALE("max-stale"), // =delta-seconds
MIN_FRESH("min-fresh"), // =delta-seconds
NO_TRANSFORM("no-transform"),
ONLY_IF_CACHED("only-if-cached"),
CACHE_EXT("cache-extension");
public final String code;
CacheControlRequest(String code) {
this.code = code;
}
}
enum Header {
CACHE_CONTROL("Cache-Control"),
WWW_AUTHENTICATE("WWW-Authenticate"),
IF("If"),
IF_RANGE("If-Range"),
IF_MATCH("If-Match"),
IF_NONE_MATCH("If-None-Match"),
IF_MODIFIED("If-Modified-Since"),
IF_NOT_MODIFIED("If-Unmodified-Since"),
CONTENT_LENGTH("Content-Length"),
CONTENT_TYPE("Content-Type"),
CONTENT_RANGE("Content-Range"),
DEPTH("Depth"),
HOST("Host"),
DESTINATION("Destination"),
REFERER("Referer"),
ACCEPT("Accept"),
ACCEPT_LANGUAGE("Accept-Language"),
RANGE("Range"),
ACCEPT_ENCODING("Accept-Encoding"),
TIMEOUT("Timeout"),
LOCK_TOKEN("Lock-Token"),
EXPECT("Expect"),
OVERWRITE("Overwrite"),
ORIGIN("Origin"),
USER_AGENT("User-Agent"),
/**
* For compatibility with macOS finder from 10.5.3
*/
X_EXPECTED_ENTITY_LENGTH("X-Expected-Entity-Length"),
AUTHORIZATION("Authorization");
public final String code;
Header(String code) {
this.code = code;
}
}
enum Method {
HEAD("HEAD", false),
PROPFIND("PROPFIND", false),
PROPPATCH("PROPPATCH", true),
MKCOL("MKCOL", true),
MKCALENDAR("MKCALENDAR", true),
COPY("COPY", true),
MOVE("MOVE", true),
LOCK("LOCK", true),
UNLOCK("UNLOCK", true),
DELETE("DELETE", true),
GET("GET", false),
OPTIONS("OPTIONS", false),
POST("POST", true),
PUT("PUT", true),
TRACE("TRACE", false),
ACL("ACL", true),
CONNECT("CONNECT", true),
CANCELUPLOAD("CANCELUPLOAD", true),
REPORT("REPORT", false);
public final String code;
public final boolean isWrite;
Method(String code, boolean isWrite) {
this.code = code;
this.isWrite = isWrite;
}
}
Map getHeaders();
/**
* equivalent to Servlet Request getRemoteHost
*
* Returns the fully qualified name of the client or the last proxy that sent the request.
*
* @return
*/
String getFromAddress();
String getLockTokenHeader();
String getRequestHeader(Request.Header header);
Method getMethod();
Auth getAuthorization();
/**
* Maybe called by the milton framework after successful non-http
* authentication
*
* @param auth - the new auth object
*/
void setAuthorization(Auth auth);
String getRefererHeader();
String getTimeoutHeader();
String getIfHeader();
String getIfRangeHeader();
String getIfMatchHeader();
String getIfNoneMatchHeader();
Date getIfModifiedHeader();
int getDepthHeader();
/**
* Return the complete URL, including protocol, host and port (if specified)
* and path
*/
String getAbsoluteUrl();
/**
* Return the path portion of the url. This is everything following the host
* and port. Will always begin with a leading slash
*/
String getAbsolutePath();
String getHostHeader();
String getDestinationHeader();
String getExpectHeader();
InputStream getInputStream() throws IOException;
void parseRequestParameters(Map params, Map files) throws RequestParseException;
String getContentTypeHeader();
Long getContentLengthHeader();
String getAcceptHeader();
String getAcceptEncodingHeader();
/**
* Get the user-agents preferred languages.
*
* Eg: en-ca,en;q=0.8,en-us;q=0.6,de-de;q=0.4,de;q=0.2
*
* @return
*/
String getAcceptLanguage();
/**
* @return a range header, for partial gets
*/
String getRangeHeader();
/**
* Used for partial PUTs
*
* @return
*/
String getContentRangeHeader();
/**
* Used for MOVE and COPY methods. If true it indicates that any existing
* resource should be deleted before the move.
*
* @return - null if no value, true indicates that any existing resource
* should be deleted
*/
Boolean getOverwriteHeader();
String getOriginHeader();
/**
* @return - the user agent header field
*/
String getUserAgentHeader();
/**
* Return a writable map of arbitrary values to be associated with the
* request
*
* @return a writable map of arbitrary values to be associated with the
* request
*/
Map getAttributes();
/**
* Note to implementors: the parameters will be created by the core handler
* classes and added to the attributes map. If you're extending
* AbstractRequest this method will already be implemented for you by
* returning that attribute
*
* If you are not extending AbstractRequest you should implement this as:
*
* return attributes.get( "_params");
*
* @return - map of querystring or POST parameters, keyed by name
*/
Map getParams();
/**
* Note to implementors: the parameters will be created by the core handler
* classes and added to the attributes map. If you're extending
* AbstractRequest this method will already be implemented for you by
* returning that attribute
*
* If you are not extending AbstractRequest you should return implement this
* as: return attributes.get( "_files");
*
* @return - a map of files from an upload request, keyed by file name
*/
Map getFiles();
/**
* This is used to acquire a cookie using the name of that cookie. If the
* cookie exists within the HTTP header then it is returned as a
* Cookie
object. Otherwise this method will return null. Each
* cookie object will contain the name, value and path of the cookie as well
* as the optional domain part.
*
* @param name this is the name of the cookie object to acquire
* @return this returns a cookie object from the header or null
*/
Cookie getCookie(String name);
/**
* This is used to acquire all cookies that were sent in the header. If any
* cookies exists within the HTTP header they are returned as
* Cookie
objects. Otherwise this method will an empty list.
* Each cookie object will contain the name, value and path of the cookie as
* well as the optional domain part.
*
* @return this returns all cookie objects from the HTTP header
*/
List getCookies();
/**
* Returns the IP of the remote client. This attempts to find the originating
* client, ie not the last proxy, by using X-Forwarded-For etc
*
* @return
*/
String getRemoteAddr();
/**
* Use the Accept-Language header to derive a java Locale
*
* @return
*/
Locale getLocale();
}