added username for uniqueness of connection db entry

This commit is contained in:
2026-04-08 17:38:42 +02:00
parent c59f2598b0
commit 3e4a1f92b1
7 changed files with 17 additions and 5 deletions
@@ -8,12 +8,13 @@ import jakarta.persistence.Id;
import jakarta.persistence.Inheritance; import jakarta.persistence.Inheritance;
import jakarta.persistence.InheritanceType; import jakarta.persistence.InheritanceType;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import jakarta.persistence.UniqueConstraint;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
@Entity @Entity
@Table(name = "connections") @Table(name = "connections", uniqueConstraints = { @UniqueConstraint(columnNames = { "appUrl", "username" }) })
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "service_type") @DiscriminatorColumn(name = "service_type")
@Getter @Getter
@@ -23,6 +24,7 @@ public abstract class ConnectionEntity {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;
private String appUrl; private String appUrl;
private String username;
} }
@@ -9,6 +9,8 @@ public interface ConnectionProvider {
ConnectionResponse authenticate(ConnectionRequest request); ConnectionResponse authenticate(ConnectionRequest request);
ConnectionEntity findUniqueConnectionEntry(ConnectionRequest request);
ConnectionEntity connectionToEntity(ConnectionRequest request, ConnectionResponse response); ConnectionEntity connectionToEntity(ConnectionRequest request, ConnectionResponse response);
void updateToRepository(ConnectionEntity existing, ConnectionResponse response); void updateToRepository(ConnectionEntity existing, ConnectionResponse response);
@@ -6,5 +6,5 @@ import org.springframework.stereotype.Repository;
@Repository @Repository
public interface ConnectionRepository extends JpaRepository<ConnectionEntity, Long> { public interface ConnectionRepository extends JpaRepository<ConnectionEntity, Long> {
ConnectionEntity findByAppUrl(String appUrl); ConnectionEntity findByAppUrlAndUsername(String appUrl, String username);
} }
@@ -33,7 +33,7 @@ public class ConnectionService {
ConnectionResponse response = provider.authenticate(request); ConnectionResponse response = provider.authenticate(request);
ConnectionEntity existing = cRepository.findByAppUrl(request.appUrl()); ConnectionEntity existing = provider.findUniqueConnectionEntry(request);
if (existing != null) { if (existing != null) {
provider.updateToRepository(existing, response); provider.updateToRepository(existing, response);
@@ -54,6 +54,12 @@ public class HomeBoxConnectionProvider implements ConnectionProvider {
return new ConnectionResponse(hbResponse.token(), hbResponse.expiresAt(), attachmentToken); return new ConnectionResponse(hbResponse.token(), hbResponse.expiresAt(), attachmentToken);
} }
@Override
public ConnectionEntity findUniqueConnectionEntry(ConnectionRequest request) {
return cRepository.findByAppUrlAndUsername(request.appUrl(), request.credentials().get("username"));
}
@Override @Override
public ConnectionEntity connectionToEntity(ConnectionRequest request, ConnectionResponse response) { public ConnectionEntity connectionToEntity(ConnectionRequest request, ConnectionResponse response) {
return HomeboxEntity.from(request, response); return HomeboxEntity.from(request, response);
@@ -25,6 +25,7 @@ public class HomeboxEntity extends ConnectionEntity {
HomeboxEntity he = new HomeboxEntity(); HomeboxEntity he = new HomeboxEntity();
he.setAppUrl(request.appUrl()); he.setAppUrl(request.appUrl());
he.setUsername(request.credentials().get("username"));
he.setToken(response.token()); he.setToken(response.token());
he.setAttachmentToken(response.getExtraVar("attachmentToken")); he.setAttachmentToken(response.getExtraVar("attachmentToken"));
he.setExpiresAt(response.expiresAt()); he.setExpiresAt(response.expiresAt());
@@ -179,11 +179,12 @@ class HomeboxIntegrationTest {
DocumentContext responseContext = JsonPath.parse(response.getBody()); DocumentContext responseContext = JsonPath.parse(response.getBody());
ConnectionEntity dbEntry = cRepository.findByAppUrl(request.appUrl()); ConnectionEntity dbEntry = cRepository.findByAppUrlAndUsername(request.appUrl(), request.credentials().get("username"));
assertThat(dbEntry).isNotNull(); assertThat(dbEntry).isNotNull();
assertThat(dbEntry.getAppUrl()).isEqualTo(request.appUrl()); assertThat(dbEntry.getAppUrl()).isEqualTo(request.appUrl());
assertThat(dbEntry.getUsername()).isEqualTo(request.credentials().get("username"));
if (dbEntry instanceof HomeboxEntity hbE) { if (dbEntry instanceof HomeboxEntity hbE) {
assertThat(hbE.getToken()).isEqualTo(responseContext.read("$.token")); assertThat(hbE.getToken()).isEqualTo(responseContext.read("$.token"));