Skip to content

Commit

Permalink
[Feature] New Web UI
Browse files Browse the repository at this point in the history
  • Loading branch information
ytwp committed Feb 26, 2024
1 parent e2aaa0e commit 55cea9e
Show file tree
Hide file tree
Showing 109 changed files with 8,545 additions and 49,628 deletions.
12 changes: 7 additions & 5 deletions docs/security.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ authentication:
authorizationEndpoint:
jwkEndpoint:
redirectUrl:
redirectWebUrl:
userIdField:
scopes:
- s1
Expand Down Expand Up @@ -89,15 +90,16 @@ authentication:

The authentication happens with the pre-defined users from the configuration
file. To define the preset user use the following section.
Please note that 'privileges' can only be a combination of 'ADMIN', 'USER', and 'API', with '_' used for segmentation.

```
presetUsers:
user1:
password: <password>
privileges: "lb_admin, lb_user"
privileges: ADMIN_USER
user2:
password: <password>
privileges: "lb_api"
privileges: API
```

Also provide a random key pair in RSA format.
Expand Down Expand Up @@ -146,9 +148,9 @@ LDAP Authorization is also supported by adding user attribute configs in file.
```
# Roles should be in regex format
authorization:
admin: 'lb_admin'
user: 'lb_user'
api: 'lb_api'
admin: (.*)ADMIN(.*)
user: (.*)USER(.*)
api: (.*)API(.*)
ldapConfigPath: '<ldap_config_path>'
```

Expand Down
75 changes: 70 additions & 5 deletions gateway-ha/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
<properties>
<environments>development</environments>
<app.main.class>io.trino.gateway.ha.HaGatewayLauncher</app.main.class>
<frontend.project.name>webapp</frontend.project.name>

<!-- dependency versions -->
<dep.activejdbc.version>2.3</dep.activejdbc.version>
Expand Down Expand Up @@ -208,11 +209,6 @@
</exclusions>
</dependency>

<dependency>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-views</artifactId>
</dependency>

<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-core</artifactId>
Expand All @@ -239,6 +235,11 @@
<artifactId>jakarta.ws.rs-api</artifactId>
</dependency>

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
Expand Down Expand Up @@ -552,6 +553,69 @@
</configuration>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy static</id>
<goals>
<goal>copy-resources</goal>
</goals>
<phase>generate-resources</phase>
<configuration>
<outputDirectory>src/main/resources/static</outputDirectory>
<overwrite>true</overwrite>
<resources>
<resource>
<directory>${project.basedir}/../${frontend.project.name}/dist</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>

<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>1.12.1</version>
<configuration>
<workingDirectory>${project.basedir}/../${frontend.project.name}</workingDirectory>
</configuration>
<executions>
<execution>
<id>install node and pnpm</id>
<goals>
<goal>install-node-and-pnpm</goal>
</goals>
<configuration>
<nodeVersion>v18.9.1</nodeVersion>
<pnpmVersion>8.6.12</pnpmVersion>
</configuration>
</execution>
<execution>
<id>install</id>
<goals>
<goal>pnpm</goal>
</goals>
<phase>generate-resources</phase>
<configuration>
<arguments>install --ignore-scripts</arguments>
</configuration>
</execution>
<execution>
<id>build</id>
<goals>
<goal>pnpm</goal>
</goals>
<configuration>
<arguments>run build</arguments>
</configuration>
</execution>
</executions>
</plugin>

<plugin>
<groupId>org.javalite</groupId>
<artifactId>db-migrator-maven-plugin</artifactId>
Expand All @@ -570,4 +634,5 @@
</plugin>
</plugins>
</build>

</project>
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@

import io.dropwizard.assets.AssetsBundle;
import io.dropwizard.core.setup.Bootstrap;
import io.dropwizard.views.common.ViewBundle;
import io.trino.gateway.baseapp.BaseApp;
import io.trino.gateway.ha.config.HaGatewayConfiguration;

Expand All @@ -31,8 +30,8 @@ public HaGatewayLauncher(String... basePackages)
public void initialize(Bootstrap<HaGatewayConfiguration> bootstrap)
{
super.initialize(bootstrap);
bootstrap.addBundle(new ViewBundle<>());
bootstrap.addBundle(new AssetsBundle("/assets", "/assets", null, "assets"));
bootstrap.addBundle(new AssetsBundle("/static/assets", "/assets", null, "assets"));
bootstrap.addBundle(new AssetsBundle("/static", "/logo.svg", "logo.svg", "logo.svg"));
}

public static void main(String[] args)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ public class HaGatewayConfiguration
private RoutingRulesConfiguration routingRules = new RoutingRulesConfiguration();
private AuthenticationConfiguration authentication;
private AuthorizationConfiguration authorization;
private Map<String, UserConfiguration> presetUsers = new HashMap();
private Map<String, UserConfiguration> presetUsers = new HashMap<>();
private Map<String, String> pagePermissions = new HashMap<>();
private BackendStateConfiguration backendState;
private ClusterStatsConfiguration clusterStatsConfiguration;
private List<String> extraWhitelistPaths = new ArrayList<>();
Expand Down Expand Up @@ -117,6 +118,16 @@ public void setPresetUsers(Map<String, UserConfiguration> presetUsers)
this.presetUsers = presetUsers;
}

public Map<String, String> getPagePermissions()
{
return this.pagePermissions;
}

public void setPagePermissions(Map<String, String> pagePermissions)
{
this.pagePermissions = pagePermissions;
}

public BackendStateConfiguration getBackendState()
{
return this.backendState;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ public class OAuthConfiguration
private String redirectUrl;
private String userIdField;
private List<String> audiences;
private String redirectWebUrl;

public OAuthConfiguration(String issuer, String clientId, String clientSecret, String tokenEndpoint, String authorizationEndpoint, String jwkEndpoint, List<String> scopes, String redirectUrl, String userIdField, List<String> audiences)
{
Expand Down Expand Up @@ -143,4 +144,14 @@ public void setAudiences(List<String> audiences)
{
this.audiences = audiences;
}

public String getRedirectWebUrl()
{
return this.redirectWebUrl;
}

public void setRedirectWebUrl(String redirectWebUrl)
{
this.redirectWebUrl = redirectWebUrl;
}
}
176 changes: 176 additions & 0 deletions gateway-ha/src/main/java/io/trino/gateway/ha/domain/R.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
/*
* Licensed 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.trino.gateway.ha.domain;

import jakarta.ws.rs.core.Response;

import java.io.Serial;
import java.io.Serializable;

/**
* Response
*/
public class R<T>
implements Serializable
{
@Serial
private static final long serialVersionUID = 1L;

/**
* success
*/
public static final int SUCCESS = 200;

/**
* fail
*/
public static final int FAIL = 500;

/**
* warn
*/
public static final int WARN = 601;

private int code;

private String msg;

private T data;

public static <T> R<T> ok()
{
return restResult(null, SUCCESS, "Successful.");
}

public static <T> R<T> ok(T data)
{
return restResult(data, SUCCESS, "Successful.");
}

public static <T> R<T> ok(String msg)
{
return restResult(null, SUCCESS, msg);
}

public static <T> R<T> ok(String msg, T data)
{
return restResult(data, SUCCESS, msg);
}

public static <T> R<T> fail()
{
return restResult(null, FAIL, "Failed.");
}

public static <T> R<T> fail(String msg)
{
return restResult(null, FAIL, msg);
}

public static <T> R<T> fail(T data)
{
return restResult(data, FAIL, "Failed.");
}

public static <T> R<T> fail(String msg, T data)
{
return restResult(data, FAIL, msg);
}

public static <T> R<T> fail(int code, String msg)
{
return restResult(null, code, msg);
}

public static <T> R<T> fail(Response.Status status)
{
return restResult(null, status.getStatusCode(), status.getReasonPhrase());
}

/**
* return warn message
*
* @param msg return message
* @return R
*/
public static <T> R<T> warn(String msg)
{
return restResult(null, WARN, msg);
}

/**
* return warn message
*
* @param msg return message
* @param data return data
* @return R
*/
public static <T> R<T> warn(String msg, T data)
{
return restResult(data, WARN, msg);
}

private static <T> R<T> restResult(T data, int code, String msg)
{
R<T> r = new R<>();
r.setCode(code);
r.setData(data);
r.setMsg(msg);
return r;
}

public static <T> Boolean isError(R<T> ret)
{
return !isSuccess(ret);
}

public static <T> Boolean isSuccess(R<T> ret)
{
return R.SUCCESS == ret.getCode();
}

public R()
{
}

public int getCode()
{
return code;
}

public void setCode(int code)
{
this.code = code;
}

public String getMsg()
{
return msg;
}

public void setMsg(String msg)
{
this.msg = msg;
}

public T getData()
{
return data;
}

public void setData(T data)
{
this.data = data;
}
}
Loading

0 comments on commit 55cea9e

Please sign in to comment.