// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: MIT-0
package aws.proserve.bcs.ce.service;
import aws.proserve.bcs.ce.CloudEndureAccount;
import aws.proserve.bcs.ce.dto.ImmutableLoginInput;
import aws.proserve.bcs.dr.ce.CloudEndureConstants;
import aws.proserve.bcs.dr.secret.SecretManager;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
import javax.inject.Named;
@Named
public class SessionService {
private final SecretManager secretManager;
private final Session session;
private final RestTemplate rest;
SessionService(
SecretManager secretManager,
Session session,
RestTemplate rest) {
this.secretManager = secretManager;
this.session = session;
this.rest = rest;
}
public String getToken() {
return secretManager.getSecret(CloudEndureConstants.PARAM_TOKEN);
}
public void setToken(String token) {
secretManager.saveSecret(CloudEndureConstants.PARAM_TOKEN, token);
}
/**
* @apiNote a cookie which looks like below
* XSRF-TOKEN="e1Z1f0amNQu8Um11eefZOQ==\012"; Secure; Path=/
*/
public CloudEndureAccount login() throws IllegalStateException {
final ResponseEntity response =
rest.postForEntity("/login",
ImmutableLoginInput.builder().userApiToken(getToken()).build(),
CloudEndureAccount.class);
session.setSecret(response.getHeaders().getFirst(HttpHeaders.SET_COOKIE));
return response.getBody();
}
}