feature/implement-external-login-api #30
@@ -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
|
||||||
@@ -25,4 +26,5 @@ public abstract class ConnectionEntity {
|
|||||||
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"));
|
||||||
|
|||||||
Reference in New Issue
Block a user