feature/implement-external-login-api #30

Merged
kasun merged 32 commits from feature/implement-external-login-api into main 2026-04-09 21:21:58 +02:00
7 changed files with 17 additions and 5 deletions
Showing only changes of commit 3e4a1f92b1 - Show all commits
@@ -8,12 +8,13 @@ import jakarta.persistence.Id;
import jakarta.persistence.Inheritance;
import jakarta.persistence.InheritanceType;
import jakarta.persistence.Table;
import jakarta.persistence.UniqueConstraint;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Entity
@Table(name = "connections")
@Table(name = "connections", uniqueConstraints = { @UniqueConstraint(columnNames = { "appUrl", "username" }) })
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "service_type")
@Getter
@@ -23,6 +24,7 @@ public abstract class ConnectionEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String appUrl;
private String username;
}
@@ -9,6 +9,8 @@ public interface ConnectionProvider {
ConnectionResponse authenticate(ConnectionRequest request);
ConnectionEntity findUniqueConnectionEntry(ConnectionRequest request);
ConnectionEntity connectionToEntity(ConnectionRequest request, ConnectionResponse response);
void updateToRepository(ConnectionEntity existing, ConnectionResponse response);
@@ -6,5 +6,5 @@ import org.springframework.stereotype.Repository;
@Repository
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);
ConnectionEntity existing = cRepository.findByAppUrl(request.appUrl());
ConnectionEntity existing = provider.findUniqueConnectionEntry(request);
if (existing != null) {
provider.updateToRepository(existing, response);
@@ -54,6 +54,12 @@ public class HomeBoxConnectionProvider implements ConnectionProvider {
return new ConnectionResponse(hbResponse.token(), hbResponse.expiresAt(), attachmentToken);
}
@Override
public ConnectionEntity findUniqueConnectionEntry(ConnectionRequest request) {
return cRepository.findByAppUrlAndUsername(request.appUrl(), request.credentials().get("username"));
}
@Override
public ConnectionEntity connectionToEntity(ConnectionRequest request, ConnectionResponse response) {
return HomeboxEntity.from(request, response);
@@ -25,6 +25,7 @@ public class HomeboxEntity extends ConnectionEntity {
HomeboxEntity he = new HomeboxEntity();
he.setAppUrl(request.appUrl());
he.setUsername(request.credentials().get("username"));
he.setToken(response.token());
he.setAttachmentToken(response.getExtraVar("attachmentToken"));
he.setExpiresAt(response.expiresAt());
@@ -179,11 +179,12 @@ class HomeboxIntegrationTest {
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.getAppUrl()).isEqualTo(request.appUrl());
assertThat(dbEntry.getUsername()).isEqualTo(request.credentials().get("username"));
if (dbEntry instanceof HomeboxEntity hbE) {
assertThat(hbE.getToken()).isEqualTo(responseContext.read("$.token"));