package com.flexpoker.login.repository; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.UUID; import org.springframework.context.annotation.Profile; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Repository; @Profile("default") @Repository public class InMemoryLoginRepository implements LoginRepository { private final Map<String, UserDetails> loginUserMap; private final Map<String, UUID> loginIdMap; private final Map<UUID, String> aggregateIdUsernameMap; public InMemoryLoginRepository() { loginUserMap = new HashMap<>(); loginIdMap = new HashMap<>(); aggregateIdUsernameMap = new HashMap<>(); addDefaultUsers(); } @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { UserDetails persistedUserDetails = loginUserMap.get(username); return new User( persistedUserDetails.getUsername(), persistedUserDetails.getPassword(), persistedUserDetails.getAuthorities()); } @Override public void saveUsernameAndPassword(String username, String encryptedPassword) { loginUserMap.put(username, new User(username, encryptedPassword, Collections.singleton(new SimpleGrantedAuthority("ROLE_USER")))); } @Override public UUID fetchAggregateIdByUsername(String username) { return loginIdMap.get(username); } @Override public void saveAggregateIdAndUsername(UUID aggregateId, String username) { loginIdMap.put(username, aggregateId); aggregateIdUsernameMap.put(aggregateId, username); } @Override public String fetchUsernameByAggregateId(UUID aggregateId) { return aggregateIdUsernameMap.get(aggregateId); } private void addDefaultUsers() { saveUsernameAndPassword("player1", new BCryptPasswordEncoder().encode("player1")); saveUsernameAndPassword("player2", new BCryptPasswordEncoder().encode("player2")); saveUsernameAndPassword("player3", new BCryptPasswordEncoder().encode("player3")); saveUsernameAndPassword("player4", new BCryptPasswordEncoder().encode("player4")); saveAggregateIdAndUsername(UUID.randomUUID(), "player1"); saveAggregateIdAndUsername(UUID.randomUUID(), "player2"); saveAggregateIdAndUsername(UUID.randomUUID(), "player3"); saveAggregateIdAndUsername(UUID.randomUUID(), "player4"); } }