From ff4d6ba82bacb3a69616948a796b1aa128ac24e5 Mon Sep 17 00:00:00 2001 From: David Gubler Date: Fri, 10 Jan 2025 11:05:32 +0100 Subject: [PATCH] fix memory store --- .../memory/MemoryDynamicPassword.java | 38 +++++++++++++++++++ .../memory/MemoryServicePasswords.java | 35 ++++++----------- app/store/memory/MemoryGroupsStore.java | 3 -- app/store/memory/MemoryUsersStore.java | 7 +++- 4 files changed, 54 insertions(+), 29 deletions(-) create mode 100644 app/entities/memory/MemoryDynamicPassword.java diff --git a/app/entities/memory/MemoryDynamicPassword.java b/app/entities/memory/MemoryDynamicPassword.java new file mode 100644 index 0000000..4a5fa0f --- /dev/null +++ b/app/entities/memory/MemoryDynamicPassword.java @@ -0,0 +1,38 @@ +package entities.memory; + +import entities.DynamicPassword; + +import java.util.Base64; + +public class MemoryDynamicPassword implements DynamicPassword { + private long timestamp; + private String hash; + + public MemoryDynamicPassword() { + // dummy for Morphia + } + + public MemoryDynamicPassword(byte[] hash) { + this.timestamp = System.currentTimeMillis(); + this.hash = Base64.getEncoder().encodeToString(hash); + } + + @Override + public long getTimestamp() { + return timestamp; + } + + @Override + public String getHashBase64() { + return hash; + } + + @Override + public byte[] getHash() { + try { + return Base64.getDecoder().decode(hash); + } catch (Exception e) { + return null; + } + }; +} diff --git a/app/entities/memory/MemoryServicePasswords.java b/app/entities/memory/MemoryServicePasswords.java index cd980fc..26ee3d7 100644 --- a/app/entities/memory/MemoryServicePasswords.java +++ b/app/entities/memory/MemoryServicePasswords.java @@ -1,36 +1,18 @@ package entities.memory; +import entities.DynamicPassword; import entities.ServicePasswords; +import java.util.ArrayList; import java.util.Base64; +import java.util.List; public class MemoryServicePasswords implements ServicePasswords { - private long dynamicPwTimestamp; - private String dynamicPwHash; private String staticPwHash; + private List dynamicPasswords = new ArrayList<>(); - @Override - public long getDynamicPwTimestamp() { - return dynamicPwTimestamp; - } - - @Override - public String getDynamicPwHashBase64() { - return dynamicPwHash; - } - - @Override - public byte[] getDynamicPwHash() { - try { - return Base64.getDecoder().decode(dynamicPwHash); - } catch (Exception e) { - return null; - } - } - - public void setDynamicPwHash(byte[] pwHash) { - this.dynamicPwTimestamp = System.currentTimeMillis(); - this.dynamicPwHash = Base64.getEncoder().encodeToString(pwHash); + public void addDynamicPassword(MemoryDynamicPassword dynamicPassword) { + dynamicPasswords.add(dynamicPassword); } @Override @@ -47,6 +29,11 @@ public byte[] getStaticPwHash() { } } + @Override + public List getDynamicPasswords() { + return dynamicPasswords; + } + public void setStaticPwHash(byte[] pwHash) { this.staticPwHash = Base64.getEncoder().encodeToString(pwHash); } diff --git a/app/store/memory/MemoryGroupsStore.java b/app/store/memory/MemoryGroupsStore.java index 2bf1767..211bcf5 100644 --- a/app/store/memory/MemoryGroupsStore.java +++ b/app/store/memory/MemoryGroupsStore.java @@ -1,11 +1,8 @@ package store.memory; -import dev.morphia.UpdateOptions; -import dev.morphia.query.updates.UpdateOperators; import entities.Group; import entities.GroupsMetadata; import entities.memory.MemoryGroup; -import entities.mongodb.MongoDbGroup; import store.GroupsStore; import util.Config; diff --git a/app/store/memory/MemoryUsersStore.java b/app/store/memory/MemoryUsersStore.java index 0b52444..2faca4d 100644 --- a/app/store/memory/MemoryUsersStore.java +++ b/app/store/memory/MemoryUsersStore.java @@ -8,6 +8,7 @@ import entities.Service; import entities.User; import entities.UserSession; +import entities.memory.MemoryDynamicPassword; import entities.memory.MemoryServicePasswords; import entities.memory.MemoryUser; import entities.memory.MemoryUserSession; @@ -152,13 +153,15 @@ public String generateDynamicPassword(User user, Service service) { String password = IdGenerator.generateSessionId(); byte[] passwordHash = PasswordUtil.createStoragePassword(password, LdapSecurityConstants.HASH_METHOD_SSHA512); + MemoryDynamicPassword dynamicPassword = new MemoryDynamicPassword(passwordHash); + MemoryServicePasswords servicePasswords = (MemoryServicePasswords)memoryUser.getServicePasswords(service.getId()); if (servicePasswords == null) { servicePasswords = new MemoryServicePasswords(); - servicePasswords.setDynamicPwHash(passwordHash); + servicePasswords.addDynamicPassword(dynamicPassword); memoryUser.setServicePasswords(service.getId(), servicePasswords); } else { - servicePasswords.setDynamicPwHash(passwordHash); + servicePasswords.addDynamicPassword(dynamicPassword); } return password;