Skip to content

Commit

Permalink
Fix up user-related services and clean out code a bit
Browse files Browse the repository at this point in the history
  • Loading branch information
ryanrdoherty committed Feb 21, 2024
1 parent 23c59fc commit 95bc896
Show file tree
Hide file tree
Showing 18 changed files with 320 additions and 507 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ site_vars file: {{ site_vars }}
{% if modelconfig_useWeights is defined -%}
assetsUrl="{{ modelconfig_useWeights }}"
{% endif -%}
{% if modelconfig_secretKeyFile is defined -%}
secretKeyFile="{{ modelconfig_secretKeyFile }}"
{% endif -%}
{% if modelconfig_blockedThreshold is defined -%}
monitorBlockedThreads="{{ modelconfig_monitorBlockedThreads }}"
{% endif -%}
Expand Down
9 changes: 1 addition & 8 deletions Model/src/main/java/org/gusdb/wdk/events/NewUserEvent.java
Original file line number Diff line number Diff line change
@@ -1,19 +1,16 @@
package org.gusdb.wdk.events;

import org.gusdb.fgputil.events.Event;
import org.gusdb.fgputil.web.SessionProxy;
import org.gusdb.wdk.model.user.User;

public class NewUserEvent extends Event {

private final User _newUser;
private final User _oldUser;
private final SessionProxy _session;

public NewUserEvent(User newUser, User oldUser, SessionProxy session) {
public NewUserEvent(User newUser, User oldUser) {
_newUser = newUser;
_oldUser = oldUser;
_session = session;
}

public User getNewUser() {
Expand All @@ -23,8 +20,4 @@ public User getNewUser() {
public User getOldUser() {
return _oldUser;
}

public SessionProxy getSession() {
return _session;
}
}
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
package org.gusdb.wdk.events;

import org.gusdb.fgputil.accountdb.UserProfile;
import org.gusdb.fgputil.events.Event;
import org.gusdb.wdk.model.WdkModel;
import org.gusdb.wdk.model.user.User;

public class UserProfileUpdateEvent extends Event {

private final UserProfile _oldProfile;
private final UserProfile _newProfile;
private final User _oldUser;
private final User _newUser;
private final WdkModel _wdkModel;

public UserProfileUpdateEvent(UserProfile oldProfile, UserProfile newProfile, WdkModel wdkModel) {
_oldProfile = oldProfile;
_newProfile = newProfile;
public UserProfileUpdateEvent(User oldUser, User newUser, WdkModel wdkModel) {
_oldUser = oldUser;
_newUser = newUser;
_wdkModel = wdkModel;
}

public UserProfile getOldProfile() {
return _oldProfile;
public User getOldUser() {
return _oldUser;
}

public UserProfile getNewProfile() {
return _newProfile;
public User getNewUser() {
return _newUser;
}

public WdkModel getWdkModel() {
Expand Down
42 changes: 42 additions & 0 deletions Model/src/main/java/org/gusdb/wdk/model/config/ModelConfig.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
package org.gusdb.wdk.model.config;

import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Path;
import java.util.List;
import java.util.Optional;

import org.apache.log4j.Logger;
import org.gusdb.fgputil.EncryptionUtil;
import org.gusdb.fgputil.FormatUtil;
import org.gusdb.fgputil.IoUtil;
import org.gusdb.fgputil.Named.NamedObject;
import org.gusdb.oauth2.client.KeyStoreTrustManager.KeyStoreConfig;
import org.gusdb.oauth2.client.OAuthConfig;
Expand All @@ -17,6 +22,8 @@
*/
public class ModelConfig implements OAuthConfig, KeyStoreConfig {

private static final Logger LOG = Logger.getLogger(ModelConfig.class);

public static final String WSF_LOCAL = "local";

public enum AuthenticationMethod implements NamedObject {
Expand Down Expand Up @@ -80,6 +87,17 @@ public String getName() {
*/
private final boolean _useWeights;

/**
* location of secret key file
*/
private final Optional<Path> _secretKeyFile;

/**
* cached secret key; value is assigned at construction or as soon as the
* secretKeyFile is present and readable when the secret key is requested
*/
private String _secretKey;

/**
* default regex used by all the stringParams
*/
Expand Down Expand Up @@ -147,6 +165,7 @@ public ModelConfig(String modelName, String projectId, Path gusHome, boolean cac

// file locations
_wdkTempDir = wdkTempDir;
_secretKeyFile = secretKeyFile;

// network locations
_webServiceUrl = webServiceUrl;
Expand Down Expand Up @@ -183,6 +202,9 @@ public ModelConfig(String modelName, String projectId, Path gusHome, boolean cac
// SSL key store information
_keyStoreFile = keyStoreFile;
_keyStorePassPhrase = keyStorePassPhrase;

// get secret key at object creation time if available
getSecretKey();
}

/**
Expand Down Expand Up @@ -271,6 +293,26 @@ public ModelConfigAppDB getAppDB() {
return _appDB;
}

/**
* Returns a cached secret key, generated by encrypting the value in the
* configured secret key file. If the configured filename is null or the contents
* of the file cannot be read for any reason, null is returned.
*
* @return secret key
*/
public String getSecretKey() {
if (_secretKey == null && _secretKeyFile.isPresent()) {
try (FileReader in = new FileReader(_secretKeyFile.get().toFile())) {
_secretKey = EncryptionUtil.md5(IoUtil.readAllChars(in).strip());
}
catch (IOException e) {
// log error but otherwise ignore so null is returned; problem may be remedied in the future
LOG.warn("Unable to read secret key value from file: " + _secretKeyFile, e);
}
}
return _secretKey;
}

/**
* @return configured authentication method
*/
Expand Down
10 changes: 10 additions & 0 deletions Model/src/main/java/org/gusdb/wdk/model/user/BasicUser.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.gusdb.wdk.model.user;

import org.gusdb.oauth2.client.veupathdb.UserProperty;
import org.gusdb.wdk.model.WdkModel;
import org.json.JSONObject;

Expand All @@ -22,6 +23,15 @@ public BasicUser(WdkModel wdkModel, JSONObject json) {
_wdkModel = wdkModel;
}

public BasicUser(User user) {
super(user.getUserId(), user.isGuest(), user.getSignature(), user.getStableId());
_wdkModel = user.getWdkModel();
setEmail(user.getEmail());
for (UserProperty prop : USER_PROPERTIES.values()) {
prop.setValue(this, prop.getValue(user));
}
}

@Override
public WdkModel getWdkModel() {
return _wdkModel;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ public static void main(String[] args) throws WdkModelException {
!userEmail.isPresent() ?
model.getStepFactory().getAllStrategies(validationLevel, malformedStrats, stratsWithBuildErrors).values() :
model.getStepFactory().getStrategies(
Optional.ofNullable(model.getUserFactory()
.getUserByEmail(userEmail.get()))
model.getUserFactory()
.getUserByEmail(userEmail.get())
.orElseThrow(() -> new WdkModelException(
"Could not find user with email: " + userEmail
))
Expand Down
7 changes: 0 additions & 7 deletions Model/src/main/java/org/gusdb/wdk/model/user/User.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,9 @@
package org.gusdb.wdk.model.user;

import java.util.Collection;

import org.gusdb.oauth2.client.veupathdb.UserProperty;
import org.gusdb.wdk.model.WdkModel;

public interface User extends org.gusdb.oauth2.client.veupathdb.User {

static Collection<UserProperty> getPropertyDefs() {
return BasicUser.USER_PROPERTIES.values();
}

WdkModel getWdkModel();

}
Loading

0 comments on commit 95bc896

Please sign in to comment.