Merge branch 'main' into sqlite
This commit is contained in:
43
Readme.md
43
Readme.md
@@ -1,20 +1,51 @@
|
|||||||
# LightOIDC
|
# LightOIDC
|
||||||
|
|
||||||
This aims to be a [specification] compliant OpenID connect provider with minimal footprint.
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Deutsch</th>
|
||||||
|
<th>English</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
|
||||||
This goal is achieved by reducing external library dependiencies to an absolute minimum.
|
LightOIDC ist ein [Spezifikations][specification]-treuer OpenID-Connect-Provider mit minimalem Fußabdruck.
|
||||||
|
Dieses Ziel wird durch Minimierung der externen Abhängigkeiten auf ein absolutes Minimum erreicht.
|
||||||
Currently, this project only depends on the following libraries:
|
Im Moment baut das Projekt nur auf die folgenden Laufzeit-Bibliotheken auf:
|
||||||
|
|
||||||
* [org.json:json](https://github.com/douglascrockford/JSON-java)
|
* [org.json:json](https://github.com/douglascrockford/JSON-java)
|
||||||
* [org.bitbucket.b_c:jose4j](https://bitbucket.org/b_c/jose4j)
|
* [org.bitbucket.b_c:jose4j](https://bitbucket.org/b_c/jose4j)
|
||||||
|
* [com.sun.mail:jakarta.mail](https://projects.eclipse.org/projects/ee4j.mail)
|
||||||
|
* [com.sun.activation:jakarta.activation](https://projects.eclipse.org/projects/ee4j.jaf)
|
||||||
|
|
||||||
At the time of writing, these libraries have no further transitive dependencies, this mitigating any bloat from the project.
|
Im Moment haben diese Bibliotheken keine weiteren (transitiven) Anhängigkeiten, so dass das Projekt nicht durch eine Kaskade von Libraries aufgeblasen wird.
|
||||||
|
Das Ermöglicht es, dass die compilierte JAR-Datei weniger als 1,5 MB groß ist!
|
||||||
|
|
||||||
|
## bauen
|
||||||
|
|
||||||
|
Dies ist ein Gradle-Project. Um es zu compilieren brauchen Sie ein aktuelles Java-Development-Kit.
|
||||||
|
Das Projekt kann durch Aufruf von `./gradlew build` in einem Terminal innerhalb des Wurzelverzeichnisses gebaut werden.
|
||||||
|
|
||||||
|
</td><td>
|
||||||
|
|
||||||
|
This aims to be a [specification] compliant OpenID connect provider with minimal footprint.
|
||||||
|
This goal is achieved by reducing external library dependiencies to an absolute minimum.
|
||||||
|
Currently, this project only depends on the following runtime libraries:
|
||||||
|
|
||||||
|
* [org.json:json](https://github.com/douglascrockford/JSON-java)
|
||||||
|
* [org.bitbucket.b_c:jose4j](https://bitbucket.org/b_c/jose4j)
|
||||||
|
* [com.sun.mail:jakarta.mail](https://projects.eclipse.org/projects/ee4j.mail)
|
||||||
|
* [com.sun.activation:jakarta.activation](https://projects.eclipse.org/projects/ee4j.jaf)
|
||||||
|
|
||||||
|
At the time of writing, these libraries have no further transitive dependencies, thus mitigating any bloat from the project.
|
||||||
|
As a result, the compiled jar has a size of less than 1.5 MB!
|
||||||
|
|
||||||
## build
|
## build
|
||||||
|
|
||||||
This is a gradle project. To compile it, you should have a recent version of a Java Development Kit installed.
|
This is a gradle project. To compile it, you should have a recent version of a Java Development Kit installed.
|
||||||
|
|
||||||
Build the project by launching `./gradlew build` in a terminal while being in the root folder of the project.
|
Build the project by launching `./gradlew build` in a terminal while being in the root folder of the project.
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
[specification]: https://openid.net/specs/openid-connect-core-1_0.html
|
[specification]: https://openid.net/specs/openid-connect-core-1_0.html
|
||||||
@@ -11,10 +11,10 @@ repositories {
|
|||||||
dependencies {
|
dependencies {
|
||||||
testImplementation platform('org.junit:junit-bom:5.10.0')
|
testImplementation platform('org.junit:junit-bom:5.10.0')
|
||||||
testImplementation 'org.junit.jupiter:junit-jupiter'
|
testImplementation 'org.junit.jupiter:junit-jupiter'
|
||||||
|
implementation project(':de.srsoftware.utils')
|
||||||
implementation 'org.json:json:20240303'
|
implementation 'org.json:json:20240303'
|
||||||
implementation 'org.bitbucket.b_c:jose4j:0.9.6'
|
implementation 'org.bitbucket.b_c:jose4j:0.9.6'
|
||||||
implementation 'com.sun.mail:jakarta.mail:2.0.1'
|
implementation 'com.sun.mail:jakarta.mail:2.0.1'
|
||||||
implementation project(':de.srsoftware.utils')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
test {
|
test {
|
||||||
|
|||||||
@@ -17,11 +17,11 @@ dependencies {
|
|||||||
implementation project(':de.srsoftware.logging')
|
implementation project(':de.srsoftware.logging')
|
||||||
implementation project(':de.srsoftware.oidc.api')
|
implementation project(':de.srsoftware.oidc.api')
|
||||||
implementation project(':de.srsoftware.oidc.backend')
|
implementation project(':de.srsoftware.oidc.backend')
|
||||||
implementation project(':de.srsoftware.oidc.web')
|
|
||||||
implementation project(':de.srsoftware.utils')
|
|
||||||
implementation project(':de.srsoftware.oidc.datastore.encrypted')
|
implementation project(':de.srsoftware.oidc.datastore.encrypted')
|
||||||
implementation project(':de.srsoftware.oidc.datastore.file')
|
implementation project(':de.srsoftware.oidc.datastore.file')
|
||||||
implementation project(':de.srsoftware.oidc.datastore.sqlite')
|
implementation project(':de.srsoftware.oidc.datastore.sqlite')
|
||||||
|
implementation project(':de.srsoftware.oidc.web')
|
||||||
|
implementation project(':de.srsoftware.utils')
|
||||||
implementation 'org.json:json:20240303'
|
implementation 'org.json:json:20240303'
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -97,15 +97,15 @@ public class Application {
|
|||||||
|
|
||||||
Optional<String> encryptionKey = config.get(ENCRYPTION_KEY);
|
Optional<String> encryptionKey = config.get(ENCRYPTION_KEY);
|
||||||
|
|
||||||
if (encryptionKey.isPresent()){
|
if (encryptionKey.isPresent()) {
|
||||||
var salt = config.getOrDefault(SALT,uuid());
|
var salt = config.getOrDefault(SALT, uuid());
|
||||||
clientService = new EncryptedClientService(encryptionKey.get(),salt,clientService);
|
clientService = new EncryptedClientService(encryptionKey.get(), salt, clientService);
|
||||||
}
|
}
|
||||||
return clientService;
|
return clientService;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static AuthorizationService setupAuthService(Configuration config, Path defaultFile, FileStoreProvider fileStoreProvider) throws SQLException {
|
private static AuthorizationService setupAuthService(Configuration config, Path defaultFile, FileStoreProvider fileStoreProvider) throws SQLException {
|
||||||
var authServiceLocation = new File(config.getOrDefault("auth_store",defaultFile));
|
var authServiceLocation = new File(config.getOrDefault("auth_store", defaultFile));
|
||||||
return switch (extension(authServiceLocation)){
|
return switch (extension(authServiceLocation)){
|
||||||
case "db", "sqlite", "sqlite3" -> new SqliteAuthService(connectionProvider.get(authServiceLocation));
|
case "db", "sqlite", "sqlite3" -> new SqliteAuthService(connectionProvider.get(authServiceLocation));
|
||||||
default -> fileStoreProvider.get(authServiceLocation);
|
default -> fileStoreProvider.get(authServiceLocation);
|
||||||
@@ -113,7 +113,7 @@ public class Application {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static SessionService setupSessionService(Configuration config, Path defaultFile, FileStoreProvider fileStoreProvider) throws SQLException {
|
private static SessionService setupSessionService(Configuration config, Path defaultFile, FileStoreProvider fileStoreProvider) throws SQLException {
|
||||||
var sessionStore = new File(config.getOrDefault("session_storage",defaultFile));
|
var sessionStore = new File(config.getOrDefault("session_storage", defaultFile));
|
||||||
return switch (extension(sessionStore)){
|
return switch (extension(sessionStore)){
|
||||||
case "db", "sqlite", "sqlite3" -> new SqliteSessionService(connectionProvider.get(sessionStore));
|
case "db", "sqlite", "sqlite3" -> new SqliteSessionService(connectionProvider.get(sessionStore));
|
||||||
default -> fileStoreProvider.get(sessionStore);
|
default -> fileStoreProvider.get(sessionStore);
|
||||||
@@ -121,7 +121,7 @@ public class Application {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static MailConfig setupMailConfig(Configuration config, Path defaultFile, FileStoreProvider fileStoreProvider) throws SQLException {
|
private static MailConfig setupMailConfig(Configuration config, Path defaultFile, FileStoreProvider fileStoreProvider) throws SQLException {
|
||||||
var mailConfigLocation = new File(config.getOrDefault("mail_config_storage",defaultFile));
|
var mailConfigLocation = new File(config.getOrDefault("mail_config_storage", defaultFile));
|
||||||
var mailConfig = switch (extension(mailConfigLocation)){
|
var mailConfig = switch (extension(mailConfigLocation)){
|
||||||
case "db", "sqlite", "sqlite3" -> new SqliteMailConfig(connectionProvider.get(mailConfigLocation));
|
case "db", "sqlite", "sqlite3" -> new SqliteMailConfig(connectionProvider.get(mailConfigLocation));
|
||||||
default -> fileStoreProvider.get(mailConfigLocation);
|
default -> fileStoreProvider.get(mailConfigLocation);
|
||||||
@@ -129,15 +129,15 @@ public class Application {
|
|||||||
|
|
||||||
Optional<String> encryptionKey = config.get(ENCRYPTION_KEY);
|
Optional<String> encryptionKey = config.get(ENCRYPTION_KEY);
|
||||||
|
|
||||||
if (encryptionKey.isPresent()){
|
if (encryptionKey.isPresent()) {
|
||||||
var salt = config.getOrDefault(SALT,uuid());
|
var salt = config.getOrDefault(SALT, uuid());
|
||||||
mailConfig = new EncryptedMailConfig(mailConfig,encryptionKey.get(),salt);
|
mailConfig = new EncryptedMailConfig(mailConfig, encryptionKey.get(), salt);
|
||||||
}
|
}
|
||||||
return mailConfig;
|
return mailConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static UserService setupUserService(Configuration config, Path defaultFile, FileStoreProvider fileStoreProvider, UuidHasher passHasher) throws SQLException {
|
private static UserService setupUserService(Configuration config, Path defaultFile, FileStoreProvider fileStoreProvider, UuidHasher passHasher) throws SQLException {
|
||||||
var userStorageLocation = new File(config.getOrDefault("user_storage",defaultFile));
|
var userStorageLocation = new File(config.getOrDefault("user_storage", defaultFile));
|
||||||
var userService = switch (extension(userStorageLocation).toLowerCase()){
|
var userService = switch (extension(userStorageLocation).toLowerCase()){
|
||||||
case "db", "sqlite", "sqlite3" -> new SqliteUserService(connectionProvider.get(userStorageLocation),passHasher);
|
case "db", "sqlite", "sqlite3" -> new SqliteUserService(connectionProvider.get(userStorageLocation),passHasher);
|
||||||
default -> fileStoreProvider.get(userStorageLocation);
|
default -> fileStoreProvider.get(userStorageLocation);
|
||||||
@@ -145,9 +145,9 @@ public class Application {
|
|||||||
|
|
||||||
Optional<String> encryptionKey = config.get(ENCRYPTION_KEY);
|
Optional<String> encryptionKey = config.get(ENCRYPTION_KEY);
|
||||||
|
|
||||||
if (encryptionKey.isPresent()){
|
if (encryptionKey.isPresent()) {
|
||||||
var salt = config.getOrDefault(SALT,uuid());
|
var salt = config.getOrDefault(SALT, uuid());
|
||||||
userService = new EncryptedUserService(userService,encryptionKey.get(),salt,passHasher);
|
userService = new EncryptedUserService(userService, encryptionKey.get(), salt, passHasher);
|
||||||
}
|
}
|
||||||
return userService;
|
return userService;
|
||||||
}
|
}
|
||||||
@@ -164,9 +164,9 @@ public class Application {
|
|||||||
|
|
||||||
Optional<String> encryptionKey = config.get(ENCRYPTION_KEY);
|
Optional<String> encryptionKey = config.get(ENCRYPTION_KEY);
|
||||||
|
|
||||||
if (encryptionKey.isPresent()){
|
if (encryptionKey.isPresent()) {
|
||||||
var salt = config.getOrDefault(SALT,uuid());
|
var salt = config.getOrDefault(SALT, uuid());
|
||||||
keyStore = new EncryptedKeyStore(encryptionKey.get(),salt,keyStore);
|
keyStore = new EncryptedKeyStore(encryptionKey.get(), salt, keyStore);
|
||||||
}
|
}
|
||||||
return keyStore;
|
return keyStore;
|
||||||
}
|
}
|
||||||
@@ -196,5 +196,5 @@ public class Application {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,12 +12,12 @@ repositories {
|
|||||||
dependencies {
|
dependencies {
|
||||||
testImplementation platform('org.junit:junit-bom:5.10.0')
|
testImplementation platform('org.junit:junit-bom:5.10.0')
|
||||||
testImplementation 'org.junit.jupiter:junit-jupiter'
|
testImplementation 'org.junit.jupiter:junit-jupiter'
|
||||||
|
testImplementation project(path: ':de.srsoftware.oidc.api', configuration: "testBundle")
|
||||||
implementation project(':de.srsoftware.oidc.api')
|
implementation project(':de.srsoftware.oidc.api')
|
||||||
implementation 'com.sun.mail:jakarta.mail:2.0.1'
|
implementation 'com.sun.mail:jakarta.mail:2.0.1'
|
||||||
implementation project(':de.srsoftware.utils')
|
implementation project(':de.srsoftware.utils')
|
||||||
testImplementation project(path: ':de.srsoftware.oidc.api', configuration: "testBundle")
|
implementation 'com.sun.mail:jakarta.mail:2.0.1'
|
||||||
implementation 'org.bitbucket.b_c:jose4j:0.9.6'
|
implementation 'org.bitbucket.b_c:jose4j:0.9.6'
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
test {
|
test {
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ include 'de.srsoftware.logging'
|
|||||||
include 'de.srsoftware.oidc.api'
|
include 'de.srsoftware.oidc.api'
|
||||||
include 'de.srsoftware.oidc.app'
|
include 'de.srsoftware.oidc.app'
|
||||||
include 'de.srsoftware.oidc.backend'
|
include 'de.srsoftware.oidc.backend'
|
||||||
|
include 'de.srsoftware.oidc.datastore.sqlite'
|
||||||
|
include 'de.srsoftware.oidc.datastore.encrypted'
|
||||||
include 'de.srsoftware.oidc.datastore.file'
|
include 'de.srsoftware.oidc.datastore.file'
|
||||||
include 'de.srsoftware.oidc.web'
|
include 'de.srsoftware.oidc.web'
|
||||||
include 'de.srsoftware.utils'
|
include 'de.srsoftware.utils'
|
||||||
include 'de.srsoftware.oidc.datastore.sqlite'
|
|
||||||
include 'de.srsoftware.oidc.datastore.encrypted'
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user