Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions uni-resolver-local/example-config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"drivers": [
{
"pattern": "^(did:proof:z[A-Za-z0-9]{20,})$",
"driverClass": "uniresolver.driver.did.proof.DidProofDriver",
"testIdentifiers": [
"did:proof:z6MkfrQC9BjKJzKVh6eNkJQZmUZ6a4Qz8EJGwE7VzKdKjNQ"
],
"traits": {
"deactivatable": false,
"enumerable": false
}
},
{
"pattern": "^(did:example:.+)$",
"url": "http://example-driver:8080/",
"propertiesEndpoint": "true",
"testIdentifiers": [
"did:example:123456789"
]
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ public static void configureLocalUniResolver(String filePath, LocalUniResolver l
for (Map<String, Object> jsonDriver : jsonDrivers) {

String pattern = jsonDriver.containsKey("pattern") ? (String) jsonDriver.get("pattern") : null;
String driverClass = jsonDriver.containsKey("driverClass") ? (String) jsonDriver.get("driverClass") : null;
String url = jsonDriver.containsKey("url") ? (String) jsonDriver.get("url") : null;
String propertiesEndpoint = jsonDriver.containsKey("propertiesEndpoint") ? (String) jsonDriver.get("propertiesEndpoint") : null;
String supportsOptions = jsonDriver.containsKey("supportsOptions") ? (String) jsonDriver.get("supportsOptions") : null;
Expand All @@ -42,8 +43,15 @@ public static void configureLocalUniResolver(String filePath, LocalUniResolver l
List<String> testIdentifiers = jsonDriver.containsKey("testIdentifiers") ? (List<String>) jsonDriver.get("testIdentifiers") : null;
Map<String, Object> traits = jsonDriver.containsKey("traits") ? (Map<String, Object>) jsonDriver.get("traits") : null;

if (pattern == null) throw new IllegalArgumentException("Missing 'pattern' entry in driver configuration.");
if (url == null) throw new IllegalArgumentException("Missing 'url' entry in driver configuration.");
if (pattern == null && driverClass == null) throw new IllegalArgumentException("Missing 'pattern' entry in driver configuration.");
if (driverClass == null && url == null) throw new IllegalArgumentException("Missing 'url' entry in driver configuration.");

if (driverClass != null) {
Driver driver = instantiateDriverClass(driverClass);
drivers.add(driver);
if (log.isInfoEnabled()) log.info("Added local driver class '" + driverClass + "'");
continue;
}

// construct HTTP driver

Expand Down Expand Up @@ -77,4 +85,13 @@ public static void configureLocalUniResolver(String filePath, LocalUniResolver l

localUniResolver.setDrivers(drivers);
}

private static Driver instantiateDriverClass(String driverClass) {
try {
Class<? extends Driver> clazz = Class.forName(driverClass).asSubclass(Driver.class);
return clazz.getDeclaredConstructor().newInstance();
} catch (Exception e) {
throw new IllegalArgumentException("Unable to instantiate driver class '" + driverClass + "'", e);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ public void setDrivers(List<DriverConfig> drivers) {
public static class DriverConfig {

private String pattern;
private String driverClass;
private String url;
private String propertiesEndpoint;
private String supportsOptions;
Expand All @@ -40,6 +41,14 @@ public void setPattern(String value) {
this.pattern = value;
}

public String getDriverClass() {
return driverClass;
}

public void setDriverClass(String driverClass) {
this.driverClass = driverClass;
}

public String getUrl() {
return url;
}
Expand Down Expand Up @@ -108,6 +117,7 @@ public void setTraits(Map<String,Object> traits) {
public String toString() {
return "DriverConfig{" +
"pattern='" + pattern + '\'' +
", driverClass='" + driverClass + '\'' +
", url='" + url + '\'' +
", propertiesEndpoint='" + propertiesEndpoint + '\'' +
", supportsOptions='" + supportsOptions + '\'' +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ public void configureLocalUniresolver(DriverConfigs driverConfigs, LocalUniResol
for (DriverConfigs.DriverConfig driverConfig : driverConfigs.getDrivers()) {

String pattern = driverConfig.getPattern();
String driverClass = driverConfig.getDriverClass();
String url = driverConfig.getUrl();
String propertiesEndpoint = driverConfig.getPropertiesEndpoint();
String supportsOptions = driverConfig.getSupportsOptions();
Expand All @@ -114,7 +115,16 @@ public void configureLocalUniresolver(DriverConfigs driverConfigs, LocalUniResol
List<String> testIdentifiers = driverConfig.getTestIdentifiers();
Map<String, Object> traits = driverConfig.getTraits();

if (pattern == null) throw new IllegalArgumentException("Missing 'pattern' entry in driver configuration.");
if (pattern == null && driverClass == null) throw new IllegalArgumentException("Missing 'pattern' entry in driver configuration.");

// Handle local driver class instantiation
if (driverClass != null) {
Driver driver = this.instantiateDriverClass(driverClass);
drivers.add(driver);
if (log.isInfoEnabled()) log.info("Added local driver class '" + driverClass + "'");
continue;
}

if (url == null) throw new IllegalArgumentException("Missing 'url' entry in driver configuration.");

// construct HTTP driver
Expand Down Expand Up @@ -147,6 +157,19 @@ public void configureLocalUniresolver(DriverConfigs driverConfigs, LocalUniResol
uniResolver.setDrivers(drivers);
}

private Driver instantiateDriverClass(String driverClass) {
try {
Class<?> clazz = Class.forName(driverClass);
Object instance = clazz.getDeclaredConstructor().newInstance();
if (!(instance instanceof Driver)) {
throw new IllegalArgumentException("Driver class '" + driverClass + "' does not implement the Driver interface");
}
return (Driver) instance;
} catch (Exception e) {
throw new IllegalArgumentException("Unable to instantiate driver class '" + driverClass + "'", e);
}
}

@PostConstruct
private void initDrivers() {
if (this.driverConfigs.getDrivers() != null) configureLocalUniresolver(this.driverConfigs, this.localUniResolver);
Expand Down
7 changes: 7 additions & 0 deletions uni-resolver-web/src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -451,3 +451,10 @@ uniresolver:
testIdentifiers:
- did:webplus:ledgerdomain.github.io:did-webplus-spec:uFiANVlMledNFUBJNiZPuvfgzxvJlGGDBIpDFpM4DXW6Bow
- did:webplus:ledgerdomain.github.io:did-webplus-spec:uFiDBw4xANa8sR_Fd8-pv-X9A5XIJNS3tC_bRNB3HUYiKug
- pattern: "^(did:proof:z[A-Za-z0-9]{20,})$"
driverClass: uniresolver.driver.did.proof.DidProofDriver
testIdentifiers:
- did:proof:z6MkfrQC9BjKJzKVh6eNkJQZmUZ6a4Qz8EJGwE7VzKdKjNQ
traits:
deactivatable: false
enumerable: false