Added base providers for users, permission and roles
This commit is contained in:
Generated
+6
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="db-tree-configuration">
|
||||||
|
<option name="data" value="---------------------------------------- 1:0:e0f49905-9df6-459a-a57c-731edb2c1607 2:0:74720f71-b717-4c46-a783-e93fc40a8785 3:0:c2ae7de6-543e-4eed-8b31-a13cb00693a8 " />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
@@ -1,6 +1,10 @@
|
|||||||
package dev.coph.flightscore.backend;
|
package dev.coph.flightscore.backend;
|
||||||
|
|
||||||
import dev.coph.flightscore.backend.config.Config;
|
import dev.coph.flightscore.backend.config.Config;
|
||||||
|
import dev.coph.flightscore.backend.provider.ProviderManager;
|
||||||
|
import dev.coph.flightscore.backend.user.UserProvider;
|
||||||
|
import dev.coph.flightscore.backend.user.permission.PermissionProvider;
|
||||||
|
import dev.coph.flightscore.backend.user.role.RoleProvider;
|
||||||
import dev.coph.simplelogger.Logger;
|
import dev.coph.simplelogger.Logger;
|
||||||
import dev.coph.simplerequest.server.WebServer;
|
import dev.coph.simplerequest.server.WebServer;
|
||||||
import dev.coph.simplesql.adapter.DatabaseAdapter;
|
import dev.coph.simplesql.adapter.DatabaseAdapter;
|
||||||
@@ -18,6 +22,12 @@ public class Backend {
|
|||||||
private final DatabaseAdapter databaseAdapter;
|
private final DatabaseAdapter databaseAdapter;
|
||||||
private final WebServer webServer;
|
private final WebServer webServer;
|
||||||
|
|
||||||
|
private final ProviderManager providerManager;
|
||||||
|
|
||||||
|
private PermissionProvider permissionProvider;
|
||||||
|
private RoleProvider roleProvider;
|
||||||
|
private UserProvider userProvider;
|
||||||
|
|
||||||
|
|
||||||
public Backend() {
|
public Backend() {
|
||||||
logger.info("Loading configuration...");
|
logger.info("Loading configuration...");
|
||||||
@@ -37,16 +47,42 @@ public class Backend {
|
|||||||
logger.info("Preparing web server...");
|
logger.info("Preparing web server...");
|
||||||
this.webServer = new WebServer(configuration.server_port());
|
this.webServer = new WebServer(configuration.server_port());
|
||||||
logger.success("Web server ready!");
|
logger.success("Web server ready!");
|
||||||
|
|
||||||
|
logger.info("Preparing providers...");
|
||||||
|
providerManager = new ProviderManager(this);
|
||||||
|
|
||||||
|
logger.info("Creating and Registering PermissionProvider...");
|
||||||
|
permissionProvider = new PermissionProvider(this);
|
||||||
|
providerManager.registerProvider(permissionProvider);
|
||||||
|
logger.success("PermissionProvider created and registered!");
|
||||||
|
|
||||||
|
logger.info("Creating and Registering RoleProvider...");
|
||||||
|
roleProvider = new RoleProvider(this);
|
||||||
|
providerManager.registerProvider(roleProvider);
|
||||||
|
logger.success("RoleProvider created and registered!");
|
||||||
|
|
||||||
|
logger.info("Creating and Registering UserProvider...");
|
||||||
|
userProvider = new UserProvider(this);
|
||||||
|
providerManager.registerProvider(userProvider);
|
||||||
|
logger.success("UserProvider created and registered!");
|
||||||
|
|
||||||
|
|
||||||
|
logger.success("Providers ready!");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
|
logger.info("Starting database...");
|
||||||
|
databaseAdapter.connect();
|
||||||
|
logger.success("Database started!");
|
||||||
|
|
||||||
logger.info("Loading routes...");
|
logger.info("Loading routes...");
|
||||||
|
|
||||||
logger.success("Routes loaded!");
|
logger.success("Routes loaded!");
|
||||||
|
|
||||||
logger.info("Starting database...");
|
logger.info("Creating database tables...");
|
||||||
databaseAdapter.connect();
|
providerManager.createAllDatabaseTables();
|
||||||
logger.success("Database started!");
|
logger.success("Database tables created!");
|
||||||
|
|
||||||
|
|
||||||
logger.info("Starting web server...");
|
logger.info("Starting web server...");
|
||||||
webServer.start();
|
webServer.start();
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package dev.coph.flightscore.backend.provider;
|
||||||
|
|
||||||
|
import dev.coph.simplesql.query.Query;
|
||||||
|
|
||||||
|
public interface Provider {
|
||||||
|
int priority();
|
||||||
|
String key();
|
||||||
|
public void createDatabaseTables(Query query);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package dev.coph.flightscore.backend.provider;
|
||||||
|
|
||||||
|
import dev.coph.flightscore.backend.Backend;
|
||||||
|
import dev.coph.simplesql.query.Query;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
public class ProviderManager {
|
||||||
|
private final Backend backend;
|
||||||
|
private final HashMap<String, Provider> providers = new HashMap<>();
|
||||||
|
|
||||||
|
public ProviderManager(Backend backend) {
|
||||||
|
this.backend = backend;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createAllDatabaseTables(){
|
||||||
|
Query query = new Query(backend.databaseAdapter());
|
||||||
|
providers.values().stream().sorted((a, b) -> Integer.compare(b.priority(), a.priority())).forEach(provider -> provider.createDatabaseTables(query));
|
||||||
|
query.execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerProvider(Provider provider){
|
||||||
|
providers.put(provider.key(), provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
public <T extends Provider> T provider(String key){
|
||||||
|
return (T) providers.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -2,19 +2,67 @@ package dev.coph.flightscore.backend.user;
|
|||||||
|
|
||||||
import dev.coph.flightscore.backend.Backend;
|
import dev.coph.flightscore.backend.Backend;
|
||||||
import dev.coph.flightscore.backend.action.result.LoginActionResult;
|
import dev.coph.flightscore.backend.action.result.LoginActionResult;
|
||||||
import lombok.RequiredArgsConstructor;
|
import dev.coph.flightscore.backend.provider.Provider;
|
||||||
|
import dev.coph.simplelogger.Logger;
|
||||||
|
import dev.coph.simplesql.database.Column;
|
||||||
|
import dev.coph.simplesql.database.attributes.ColumnType;
|
||||||
|
import dev.coph.simplesql.database.attributes.CreateMethod;
|
||||||
|
import dev.coph.simplesql.database.attributes.DataType;
|
||||||
|
import dev.coph.simplesql.query.Query;
|
||||||
|
import org.checkerframework.checker.units.qual.C;
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
import java.util.List;
|
||||||
public class UserProvider {
|
|
||||||
|
public class UserProvider implements Provider {
|
||||||
|
private Logger logger = Logger.of("UserProvider");
|
||||||
private final Backend backend;
|
private final Backend backend;
|
||||||
|
|
||||||
|
public UserProvider(Backend backend) {
|
||||||
|
this.backend = backend;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int priority() {
|
||||||
|
return 50;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String key() {
|
||||||
|
return "user-provider";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void createDatabaseTables(Query query) {
|
||||||
|
var tableCreate = Query.tableCreate()
|
||||||
|
.createMethod(CreateMethod.IF_NOT_EXISTS)
|
||||||
|
.table("users")
|
||||||
|
.column("id", DataType.BINARY, 26, true)
|
||||||
|
.column("fistname", DataType.VARCHAR, 255)
|
||||||
|
.column("lastname", DataType.VARCHAR, 255)
|
||||||
|
.column("email", DataType.VARCHAR, 255, true)
|
||||||
|
.column("phoneNumber", DataType.VARCHAR, 255)
|
||||||
|
.column("password", DataType.VARCHAR, 255, true)
|
||||||
|
.column("role", DataType.BINARY, 26)
|
||||||
|
.primaryKey(List.of("id"))
|
||||||
|
.index(List.of("email"))
|
||||||
|
.index(List.of("email", "password"))
|
||||||
|
.foreignKey(List.of("role"), "roles", List.of("id"));;
|
||||||
|
query.query(tableCreate);
|
||||||
|
tableCreate = Query.tableCreate()
|
||||||
|
.createMethod(CreateMethod.IF_NOT_EXISTS)
|
||||||
|
.table("refresh_tokens")
|
||||||
|
.column("user_id", DataType.BINARY, 26, true)
|
||||||
|
.column("token_hash", DataType.VARCHAR, 255, true)
|
||||||
|
.column("expires_at", DataType.TIMESTAMP, true)
|
||||||
|
.column(new Column("revoked", DataType.BOOLEAN, true).defaultValue(false))
|
||||||
|
.primaryKey(List.of("token_hash"))
|
||||||
|
.index(List.of("user_id"))
|
||||||
|
.foreignKey(List.of("user_id"), "users", List.of("id"));;
|
||||||
|
query.query(tableCreate);
|
||||||
|
}
|
||||||
|
|
||||||
public LoginActionResult login(String email, String password) {
|
public LoginActionResult login(String email, String password) {
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
package dev.coph.flightscore.backend.user.permission;
|
||||||
|
|
||||||
|
import dev.coph.flightscore.backend.Backend;
|
||||||
|
import dev.coph.flightscore.backend.provider.Provider;
|
||||||
|
import dev.coph.simplesql.database.attributes.CreateMethod;
|
||||||
|
import dev.coph.simplesql.database.attributes.DataType;
|
||||||
|
import dev.coph.simplesql.query.Query;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class PermissionProvider implements Provider {
|
||||||
|
private final Backend backend;
|
||||||
|
|
||||||
|
public PermissionProvider(Backend backend) {
|
||||||
|
this.backend = backend;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int priority() {
|
||||||
|
return 150;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String key() {
|
||||||
|
return "permission-provider";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void createDatabaseTables(Query query) {
|
||||||
|
var tableCreate = Query.tableCreate()
|
||||||
|
.createMethod(CreateMethod.IF_NOT_EXISTS)
|
||||||
|
.table("permissions")
|
||||||
|
.column("id", DataType.BINARY, 26, true)
|
||||||
|
.column("name", DataType.VARCHAR, 255)
|
||||||
|
.primaryKey(List.of("id"));
|
||||||
|
;
|
||||||
|
query.query(tableCreate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package dev.coph.flightscore.backend.user.role;
|
||||||
|
|
||||||
|
import dev.coph.flightscore.backend.Backend;
|
||||||
|
import dev.coph.flightscore.backend.provider.Provider;
|
||||||
|
import dev.coph.simplesql.database.attributes.CreateMethod;
|
||||||
|
import dev.coph.simplesql.database.attributes.DataType;
|
||||||
|
import dev.coph.simplesql.query.Query;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class RoleProvider implements Provider {
|
||||||
|
private final Backend backend;
|
||||||
|
|
||||||
|
public RoleProvider(Backend backend) {
|
||||||
|
this.backend = backend;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int priority() {
|
||||||
|
return 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String key() {
|
||||||
|
return "role-provider";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void createDatabaseTables(Query query) {
|
||||||
|
var tableCreate = Query.tableCreate()
|
||||||
|
.createMethod(CreateMethod.IF_NOT_EXISTS)
|
||||||
|
.table("roles")
|
||||||
|
.column("id", DataType.BINARY, 26, true)
|
||||||
|
.column("name", DataType.VARCHAR, 255)
|
||||||
|
.primaryKey(List.of("id"));
|
||||||
|
query.query(tableCreate);
|
||||||
|
tableCreate = Query.tableCreate()
|
||||||
|
.createMethod(CreateMethod.IF_NOT_EXISTS)
|
||||||
|
.table("role_permissions")
|
||||||
|
.column("roleId", DataType.BINARY, 26, true)
|
||||||
|
.column("permissionId", DataType.BINARY, 26, true)
|
||||||
|
.primaryKey(List.of("roleId", "permissionId"))
|
||||||
|
.foreignKey(List.of("roleId"), "roles", List.of("id"))
|
||||||
|
.foreignKey(List.of("permissionId"), "permissions", List.of("id"));
|
||||||
|
query.query(tableCreate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user