blob: 25b07dd7aadb1cb509743a03c0cc5c33813443df [file] [log] [blame]
package de.ids_mannheim.korap.oauth2.service;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.fasterxml.jackson.databind.JsonNode;
import de.ids_mannheim.korap.config.KustvaktConfiguration;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.interfaces.EncryptionIface;
import de.ids_mannheim.korap.oauth2.dao.OAuth2ClientDao;
import de.ids_mannheim.korap.oauth2.dto.OAuth2ClientDto;
import de.ids_mannheim.korap.oauth2.entity.OAuth2Client;
import de.ids_mannheim.korap.utils.JsonUtils;
import de.ids_mannheim.korap.web.input.OAuth2ClientJson;
@Service
public class OAuth2InitClientService {
private static Logger log = LogManager
.getLogger(OAuth2InitClientService.class);
public static String OAUTH2_CLIENT_JSON_INPUT_FILE = "initial_super_client.json";
public static String OUTPUT_FILENAME = "super_client_info";
public static String TEST_OUTPUT_FILENAME = "test_super_client_info";
@Autowired
private OAuth2ClientService clientService;
@Autowired
private OAuth2ClientDao clientDao;
@Autowired
private EncryptionIface encryption;
public void createInitialSuperClient (String outputFilename)
throws IOException, KustvaktException {
File dir = new File(KustvaktConfiguration.DATA_FOLDER);
if (!dir.exists()) {
dir.mkdir();
}
String path = KustvaktConfiguration.DATA_FOLDER + "/" + outputFilename;
File f = new File(path);
if (!f.exists()) {
OAuth2ClientJson json = readOAuth2ClientJsonFile();
OAuth2ClientDto clientDto = clientService.registerClient(json,
"system");
String clientId = clientDto.getClient_id();
OAuth2Client client = clientService.retrieveClient(clientId);
client.setSuper(true);
clientDao.updateClient(client);
JsonUtils.writeFile(path, clientDto);
log.info(
"Initial super client has been successfully registered. See "
+ path);
}
else {
JsonNode node = JsonUtils.readFile(path, JsonNode.class);
String existingClientId = node.at("/client_id").asText();
String clientSecret = node.at("/client_secret").asText();
String secretHashcode = encryption.secureHash(clientSecret);
try {
clientService.retrieveClient(existingClientId);
log.info("Super client info file exists. Initial super client "
+ "registration is cancelled.");
}
catch (Exception e) {
log.info("Super client info file exists but the client "
+ "doesn't exist in the database.");
OAuth2ClientJson json = readOAuth2ClientJsonFile();
OAuth2ClientDto clientDto = clientService.registerClient(json,
"system");
String clientId = clientDto.getClient_id();
OAuth2Client client = clientService.retrieveClient(clientId);
client.setSuper(true);
client.setId(existingClientId);
client.setSecret(secretHashcode);
clientDao.updateClient(client);
}
}
}
private OAuth2ClientJson readOAuth2ClientJsonFile ()
throws IOException, KustvaktException {
File f = new File(OAUTH2_CLIENT_JSON_INPUT_FILE);
if (f.exists()) {
return JsonUtils.readFile(OAUTH2_CLIENT_JSON_INPUT_FILE,
OAuth2ClientJson.class);
}
else {
InputStream is = getClass().getClassLoader().getResourceAsStream(
"json/" + OAUTH2_CLIENT_JSON_INPUT_FILE);
return JsonUtils.read(is, OAuth2ClientJson.class);
}
}
public void createInitialTestSuperClient ()
throws IOException, KustvaktException {
createInitialSuperClient(TEST_OUTPUT_FILENAME);
}
}