mirror of
https://github.com/aNNiMON/Own-Programming-Language-Tutorial.git
synced 2024-09-20 00:34:20 +03:00
[server] Add Header constants
This commit is contained in:
parent
189c3674cc
commit
b016096161
@ -1,6 +1,34 @@
|
||||
name: server
|
||||
since: 2.0.0
|
||||
scope: desktop
|
||||
constants:
|
||||
- name: Header
|
||||
type: 4
|
||||
typeName: map
|
||||
value: '{ACCEPT=Accept, ACCEPT_CHARSET=Accept-Charset, ACCEPT_ENCODING=Accept-Encoding,
|
||||
ACCEPT_LANGUAGE=Accept-Language, ACCEPT_RANGES=Accept-Ranges, ACCESS_CONTROL_ALLOW_CREDENTIALS=Access-Control-Allow-Credentials,
|
||||
ACCESS_CONTROL_ALLOW_HEADERS=Access-Control-Allow-Headers, ACCESS_CONTROL_ALLOW_METHODS=Access-Control-Allow-Methods,
|
||||
ACCESS_CONTROL_ALLOW_ORIGIN=Access-Control-Allow-Origin, ACCESS_CONTROL_EXPOSE_HEADERS=Access-Control-Expose-Headers,
|
||||
ACCESS_CONTROL_MAX_AGE=Access-Control-Max-Age, ACCESS_CONTROL_REQUEST_HEADERS=Access-Control-Request-Headers,
|
||||
ACCESS_CONTROL_REQUEST_METHOD=Access-Control-Request-Method, AGE=Age, ALLOW=Allow,
|
||||
AUTHORIZATION=Authorization, CACHE_CONTROL=Cache-Control, CLEAR_SITE_DATA=Clear-Site-Data,
|
||||
CONNECTION=Connection, CONTENT_DISPOSITION=Content-Disposition, CONTENT_ENCODING=Content-Encoding,
|
||||
CONTENT_LANGUAGE=Content-Language, CONTENT_LENGTH=Content-Length, CONTENT_LOCATION=Content-Location,
|
||||
CONTENT_RANGE=Content-Range, CONTENT_SECURITY_POLICY=Content-Security-Policy,
|
||||
CONTENT_TYPE=Content-Type, COOKIE=Cookie, CROSS_ORIGIN_EMBEDDER_POLICY=Cross-Origin-Embedder-Policy,
|
||||
CROSS_ORIGIN_OPENER_POLICY=Cross-Origin-Opener-Policy, CROSS_ORIGIN_RESOURCE_POLICY=Cross-Origin-Resource-Policy,
|
||||
DATE=Date, ETAG=ETag, EXPECT=Expect, EXPIRES=Expires, FROM=From, HOST=Host,
|
||||
IF_MATCH=If-Match, IF_MODIFIED_SINCE=If-Modified-Since, IF_NONE_MATCH=If-None-Match,
|
||||
IF_RANGE=If-Range, IF_UNMODIFIED_SINCE=If-Unmodified-Since, LAST_MODIFIED=Last-Modified,
|
||||
LINK=Link, LOCATION=Location, MAX_FORWARDS=Max-Forwards, ORIGIN=Origin, PRAGMA=Pragma,
|
||||
PROXY_AUTHENTICATE=Proxy-Authenticate, PROXY_AUTHORIZATION=Proxy-Authorization,
|
||||
RANGE=Range, REFERER=Referer, REFERRER_POLICY=Referrer-Policy, RETRY_AFTER=Retry-After,
|
||||
SEC_WEBSOCKET_KEY=Sec-WebSocket-Key, SERVER=Server, SET_COOKIE=Set-Cookie, STRICT_TRANSPORT_SECURITY=Strict-Transport-Security,
|
||||
TE=TE, TRAILER=Trailer, TRANSFER_ENCODING=Transfer-Encoding, UPGRADE=Upgrade,
|
||||
USER_AGENT=User-Agent, VARY=Vary, VIA=Via, WARNING=Warning, WWW_AUTHENTICATE=WWW-Authenticate,
|
||||
X_ACCEL_BUFFERING=X-Accel-Buffering, X_CONTENT_TYPE_OPTIONS=X-Content-Type-Options,
|
||||
X_FORWARDED_FOR=X-Forwarded-For, X_FORWARDED_PROTO=X-Forwarded-Proto, X_FRAME_OPTIONS=X-Frame-Options,
|
||||
X_HTTP_METHOD_OVERRIDE=X-HTTP-Method-Override, X_PERMITTED_CROSS_DOMAIN_POLICIES=X-Permitted-Cross-Domain-Policies}'
|
||||
functions:
|
||||
- name: newServer
|
||||
args: 'config = {}'
|
||||
|
@ -3,6 +3,7 @@ package com.annimon.ownlang.modules.server;
|
||||
import com.annimon.ownlang.lib.*;
|
||||
import com.annimon.ownlang.modules.Module;
|
||||
import io.javalin.Javalin;
|
||||
import io.javalin.http.Header;
|
||||
import io.javalin.http.staticfiles.Location;
|
||||
import java.util.Map;
|
||||
import static java.util.Map.entry;
|
||||
@ -11,7 +12,7 @@ public final class server implements Module {
|
||||
|
||||
@Override
|
||||
public Map<String, Value> constants() {
|
||||
return Map.of();
|
||||
return Map.of("Header", ValueUtils.collectStringConstants(Header.class));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -123,17 +123,29 @@ public final class ValueUtils {
|
||||
return ((FunctionValue) value).getValue();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T extends Number> MapValue collectNumberConstants(Class<?> clazz, Class<T> type) {
|
||||
return collectConstants(clazz, type, NumberValue::of);
|
||||
}
|
||||
|
||||
public static <T extends String> MapValue collectStringConstants(Class<?> clazz) {
|
||||
return collectConstants(clazz, String.class, StringValue::new);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static <T, V extends Value> MapValue collectConstants(Class<?> clazz, Class<T> type, FieldConverter<? super T, ? extends V> converter) {
|
||||
MapValue result = new MapValue(20);
|
||||
for (Field field : clazz.getDeclaredFields()) {
|
||||
if (!Modifier.isStatic(field.getModifiers())) continue;
|
||||
if (!field.getType().equals(type)) continue;
|
||||
try {
|
||||
result.set(field.getName(), NumberValue.of((T) field.get(type)));
|
||||
result.set(field.getName(), converter.convert((T) field.get(type)));
|
||||
} catch (IllegalAccessException ignore) {
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private interface FieldConverter<T, V> {
|
||||
V convert(T input) throws IllegalAccessException;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user