Skip to content

Commit b016096

Browse files
committed
[server] Add Header constants
1 parent 189c367 commit b016096

File tree

3 files changed

+44
-3
lines changed

3 files changed

+44
-3
lines changed

docs/src/modules/server.yml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,34 @@
11
name: server
22
since: 2.0.0
33
scope: desktop
4+
constants:
5+
- name: Header
6+
type: 4
7+
typeName: map
8+
value: '{ACCEPT=Accept, ACCEPT_CHARSET=Accept-Charset, ACCEPT_ENCODING=Accept-Encoding,
9+
ACCEPT_LANGUAGE=Accept-Language, ACCEPT_RANGES=Accept-Ranges, ACCESS_CONTROL_ALLOW_CREDENTIALS=Access-Control-Allow-Credentials,
10+
ACCESS_CONTROL_ALLOW_HEADERS=Access-Control-Allow-Headers, ACCESS_CONTROL_ALLOW_METHODS=Access-Control-Allow-Methods,
11+
ACCESS_CONTROL_ALLOW_ORIGIN=Access-Control-Allow-Origin, ACCESS_CONTROL_EXPOSE_HEADERS=Access-Control-Expose-Headers,
12+
ACCESS_CONTROL_MAX_AGE=Access-Control-Max-Age, ACCESS_CONTROL_REQUEST_HEADERS=Access-Control-Request-Headers,
13+
ACCESS_CONTROL_REQUEST_METHOD=Access-Control-Request-Method, AGE=Age, ALLOW=Allow,
14+
AUTHORIZATION=Authorization, CACHE_CONTROL=Cache-Control, CLEAR_SITE_DATA=Clear-Site-Data,
15+
CONNECTION=Connection, CONTENT_DISPOSITION=Content-Disposition, CONTENT_ENCODING=Content-Encoding,
16+
CONTENT_LANGUAGE=Content-Language, CONTENT_LENGTH=Content-Length, CONTENT_LOCATION=Content-Location,
17+
CONTENT_RANGE=Content-Range, CONTENT_SECURITY_POLICY=Content-Security-Policy,
18+
CONTENT_TYPE=Content-Type, COOKIE=Cookie, CROSS_ORIGIN_EMBEDDER_POLICY=Cross-Origin-Embedder-Policy,
19+
CROSS_ORIGIN_OPENER_POLICY=Cross-Origin-Opener-Policy, CROSS_ORIGIN_RESOURCE_POLICY=Cross-Origin-Resource-Policy,
20+
DATE=Date, ETAG=ETag, EXPECT=Expect, EXPIRES=Expires, FROM=From, HOST=Host,
21+
IF_MATCH=If-Match, IF_MODIFIED_SINCE=If-Modified-Since, IF_NONE_MATCH=If-None-Match,
22+
IF_RANGE=If-Range, IF_UNMODIFIED_SINCE=If-Unmodified-Since, LAST_MODIFIED=Last-Modified,
23+
LINK=Link, LOCATION=Location, MAX_FORWARDS=Max-Forwards, ORIGIN=Origin, PRAGMA=Pragma,
24+
PROXY_AUTHENTICATE=Proxy-Authenticate, PROXY_AUTHORIZATION=Proxy-Authorization,
25+
RANGE=Range, REFERER=Referer, REFERRER_POLICY=Referrer-Policy, RETRY_AFTER=Retry-After,
26+
SEC_WEBSOCKET_KEY=Sec-WebSocket-Key, SERVER=Server, SET_COOKIE=Set-Cookie, STRICT_TRANSPORT_SECURITY=Strict-Transport-Security,
27+
TE=TE, TRAILER=Trailer, TRANSFER_ENCODING=Transfer-Encoding, UPGRADE=Upgrade,
28+
USER_AGENT=User-Agent, VARY=Vary, VIA=Via, WARNING=Warning, WWW_AUTHENTICATE=WWW-Authenticate,
29+
X_ACCEL_BUFFERING=X-Accel-Buffering, X_CONTENT_TYPE_OPTIONS=X-Content-Type-Options,
30+
X_FORWARDED_FOR=X-Forwarded-For, X_FORWARDED_PROTO=X-Forwarded-Proto, X_FRAME_OPTIONS=X-Frame-Options,
31+
X_HTTP_METHOD_OVERRIDE=X-HTTP-Method-Override, X_PERMITTED_CROSS_DOMAIN_POLICIES=X-Permitted-Cross-Domain-Policies}'
432
functions:
533
- name: newServer
634
args: 'config = {}'

modules/server/src/main/java/com/annimon/ownlang/modules/server/server.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.annimon.ownlang.lib.*;
44
import com.annimon.ownlang.modules.Module;
55
import io.javalin.Javalin;
6+
import io.javalin.http.Header;
67
import io.javalin.http.staticfiles.Location;
78
import java.util.Map;
89
import static java.util.Map.entry;
@@ -11,7 +12,7 @@ public final class server implements Module {
1112

1213
@Override
1314
public Map<String, Value> constants() {
14-
return Map.of();
15+
return Map.of("Header", ValueUtils.collectStringConstants(Header.class));
1516
}
1617

1718
@Override

ownlang-core/src/main/java/com/annimon/ownlang/lib/ValueUtils.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,17 +123,29 @@ public static Function consumeFunction(Value value, String errorMessage) {
123123
return ((FunctionValue) value).getValue();
124124
}
125125

126-
@SuppressWarnings("unchecked")
127126
public static <T extends Number> MapValue collectNumberConstants(Class<?> clazz, Class<T> type) {
127+
return collectConstants(clazz, type, NumberValue::of);
128+
}
129+
130+
public static <T extends String> MapValue collectStringConstants(Class<?> clazz) {
131+
return collectConstants(clazz, String.class, StringValue::new);
132+
}
133+
134+
@SuppressWarnings("unchecked")
135+
private static <T, V extends Value> MapValue collectConstants(Class<?> clazz, Class<T> type, FieldConverter<? super T, ? extends V> converter) {
128136
MapValue result = new MapValue(20);
129137
for (Field field : clazz.getDeclaredFields()) {
130138
if (!Modifier.isStatic(field.getModifiers())) continue;
131139
if (!field.getType().equals(type)) continue;
132140
try {
133-
result.set(field.getName(), NumberValue.of((T) field.get(type)));
141+
result.set(field.getName(), converter.convert((T) field.get(type)));
134142
} catch (IllegalAccessException ignore) {
135143
}
136144
}
137145
return result;
138146
}
147+
148+
private interface FieldConverter<T, V> {
149+
V convert(T input) throws IllegalAccessException;
150+
}
139151
}

0 commit comments

Comments
 (0)