Added Obsidian Module

Obsidian HTTPD module replacement
This commit is contained in:
Paul Reilly
2023-06-30 15:03:07 -05:00
parent 2b12f4eebb
commit eba1df51ee
24 changed files with 399 additions and 5 deletions

View File

@@ -0,0 +1,9 @@
package me.totalfreedom.obsidian.core;
public interface Disposable
{
void dispose();
boolean isDisposed();
}

View File

@@ -0,0 +1,5 @@
package me.totalfreedom.obsidian.core;
public interface Observable<T> {
void subscribe(Observer<T> observer);
}

View File

@@ -0,0 +1,11 @@
package me.totalfreedom.obsidian.core;
public interface Observer<T>
{
void onNext(T item);
void onError(Throwable throwable);
void onComplete();
}

View File

@@ -0,0 +1,15 @@
package me.totalfreedom.obsidian.core;
import java.util.concurrent.TimeUnit;
public interface Scheduler
{
Disposable schedule(Runnable task);
Disposable schedule(Runnable task, long delay, TimeUnit unit);
Disposable schedulePeriodically(Runnable task, long initialDelay, long period, TimeUnit unit);
void dispose();
}

View File

@@ -0,0 +1,8 @@
package me.totalfreedom.obsidian.http;
import reactor.core.publisher.Mono;
public interface WebClient {
Mono<WebResponse> sendRequest(WebRequest request);
}

View File

@@ -0,0 +1,8 @@
package me.totalfreedom.obsidian.http;
import reactor.core.publisher.Mono;
public interface WebHandler {
Mono<WebResponse> handleRequest(WebRequest request);
}

View File

@@ -0,0 +1,20 @@
package me.totalfreedom.obsidian.http;
import java.util.List;
import java.util.Set;
public interface WebHeaders
{
List<String> getHeader(String name);
void addHeader(String name, String value);
void setHeader(String name, String value);
void removeHeader(String name);
boolean containsHeader(String name);
Set<String> getHeaderNames();
}

View File

@@ -0,0 +1,12 @@
package me.totalfreedom.obsidian.http;
public enum WebMethod {
GET,
POST,
PUT,
DELETE,
PATCH,
HEAD,
OPTIONS
}

View File

@@ -0,0 +1,15 @@
package me.totalfreedom.obsidian.http;
import java.awt.image.DataBuffer;
import java.nio.ByteBuffer;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
public interface WebRequest {
WebMethod getMethod();
String getUri();
WebHeaders getHeaders();
Mono<ByteBuffer> getBody();
Flux<DataBuffer> getBodyFlux();
}

View File

@@ -0,0 +1,17 @@
package me.totalfreedom.obsidian.http;
import java.awt.image.DataBuffer;
import java.nio.ByteBuffer;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
public interface WebResponse {
WebStatus getStatus();
WebHeaders getHeaders();
void setStatus(WebStatus status);
void setHeader(String name, String value);
Mono<Void> write(ByteBuffer data);
Mono<Void> write(DataBuffer dataBuffer);
Mono<Void> write(Flux<DataBuffer> dataFlux);
}

View File

@@ -0,0 +1,9 @@
package me.totalfreedom.obsidian.http;
public interface WebServer {
void start();
void stop();
void registerHandler(String uri, WebHandler handler);
void unregisterHandler(String uri);
}

View File

@@ -0,0 +1,26 @@
package me.totalfreedom.obsidian.http;
public enum WebStatus
{
OK(200),
CREATED(201),
NO_CONTENT(204),
BAD_REQUEST(400),
UNAUTHORIZED(401),
FORBIDDEN(403),
NOT_FOUND(404),
INTERNAL_SERVER_ERROR(500);
private final int code;
WebStatus(final int code)
{
this.code = code;
}
public int getCode()
{
return code;
}
}

View File

@@ -0,0 +1,15 @@
package me.totalfreedom.obsidian.security;
public interface OAuth2Credentials
{
String getClientId();
String getClientSecret();
String getUsername();
String getPassword();
String getScope();
}

View File

@@ -0,0 +1,12 @@
package me.totalfreedom.obsidian.security;
import reactor.core.publisher.Mono;
public interface OAuth2Service
{
Mono<OAuth2Token> authenticate(OAuth2Credentials credentials);
Mono<Boolean> validateToken(OAuth2Token token);
Mono<OAuth2Token> refreshAccessToken(OAuth2Token token);
}

View File

@@ -0,0 +1,22 @@
package me.totalfreedom.obsidian.security;
import java.time.Instant;
public interface OAuth2Token
{
String getAccessToken();
void setAccessToken(String accessToken);
String getRefreshToken();
void setRefreshToken(String refreshToken);
String getTokenType();
void setTokenType(String tokenType);
Instant getExpiresAt();
void setExpiresAt(Instant expiresAt);
}

View File

@@ -0,0 +1,13 @@
package me.totalfreedom.obsidian.sql;
import reactor.core.publisher.Mono;
public interface SQLConnection
{
Mono<SQLResult> executeQuery(SQLQuery query);
Mono<Integer> executeUpdate(SQLQuery query);
void close();
}

View File

@@ -0,0 +1,10 @@
package me.totalfreedom.obsidian.sql;
import java.util.List;
public interface SQLQuery {
String getQuery();
List<Object> getParameters();
void setParameter(int index, Object value);
}

View File

@@ -0,0 +1,8 @@
package me.totalfreedom.obsidian.sql;
public interface SQLResult
{
boolean next();
<T> T getColumn(int index, Class<T> type);
}