use of org.wso2.siddhi.query.api.execution.query.input.store.Store in project carbon-apimgt by wso2.
the class ApiStoreSdkGenerationManager method generateSdkForApi.
/*
* This method generates the client side SDK for the API with API ID (apiID) and SDK language (language)
*
* @param apiId ID for the specific API
* @param language preferred language to generate the SDK
* @throws ApiStoreSdkGenerationException if failed to generate the SDK
* */
public String generateSdkForApi(String apiId, String language, String userName) throws ApiStoreSdkGenerationException, APIManagementException {
APIStore apiStore = APIManagerFactory.getInstance().getAPIConsumer(userName);
API api = apiStore.getAPIbyUUID(apiId);
if (api == null) {
String errorMessage = "Cannot find API for specified API ID";
throw new APIManagementException(errorMessage, ExceptionCodes.API_NOT_FOUND);
}
String apiName = api.getName();
String apiVersion = api.getVersion();
String swaggerDefinitionForApi = null;
try {
swaggerDefinitionForApi = apiStore.getApiSwaggerDefinition(apiId);
} catch (APIManagementException e) {
handleSdkGenException("Error retrieving swagger definition for API " + apiId + " from database.", e);
}
Swagger swaggerDoc = new SwaggerParser().parse(swaggerDefinitionForApi);
if (swaggerDoc == null) {
handleSdkGenException("Error while parsing retrieved swagger definition");
}
// Format the swagger definition as a string before writing to the file.
String formattedSwaggerDefinitionForSdk = Json.pretty(swaggerDoc);
Path tempSdkGenDir = null;
File swaggerDefJsonFile = null;
try {
// Create a temporary directory to store the API files
tempSdkGenDir = Files.createTempDirectory(apiName + "_" + language + "_" + apiVersion);
// Create a temporary file to store the swagger definition
swaggerDefJsonFile = Files.createTempFile(tempSdkGenDir, apiId + "_" + language, APIMgtConstants.APIFileUtilConstants.JSON_EXTENSION).toFile();
} catch (IOException e) {
handleSdkGenException("Error creating temporary directory or json file for swagger definition!", e);
}
String tempZipFilePath = "";
if (swaggerDefJsonFile.exists()) {
try (Writer swaggerFileWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(swaggerDefJsonFile.getAbsoluteFile()), "UTF-8"))) {
swaggerFileWriter.write(formattedSwaggerDefinitionForSdk);
log.debug("Writing the swagger definition was sucessful to file {}", swaggerDefJsonFile.getAbsolutePath());
} catch (IOException e) {
handleSdkGenException("Error writing swagger definition to file in " + tempSdkGenDir, e);
}
// Generate the SDK for the specified language
generateSdkForSwaggerDef(language, swaggerDefJsonFile.getAbsolutePath(), tempSdkGenDir.toString());
log.debug("Generating SDK for the swagger definition {} was successful.", swaggerDefJsonFile.getAbsolutePath());
String archiveName = apiName + "_" + language + "_" + apiVersion;
tempZipFilePath = tempSdkGenDir + File.separator + archiveName + ".zip";
APIFileUtils.archiveDirectory(tempSdkGenDir.toString(), tempSdkGenDir.toString(), archiveName);
log.debug("Generating the archive was successful for directory {}.", tempSdkGenDir.toString());
} else {
handleSdkGenException("Swagger definition file not found!");
}
try {
// Set deleteOnExit property to generated SDK directory, all sub directories and files.
recursiveDeleteOnExit(tempSdkGenDir);
} catch (IOException e) {
handleSdkGenException("Error while deleting temporary directory " + tempSdkGenDir, e);
}
return tempZipFilePath;
}
use of org.wso2.siddhi.query.api.execution.query.input.store.Store in project carbon-apimgt by wso2.
the class JWTWithRSASignatureImpl method getPrivateKey.
/**
* {@inheritDoc}
*/
@Override
public PrivateKey getPrivateKey(String keyStoreFilePath, String keyStorePassword, String alias, String aliasPassword) throws APIManagementException {
if (keyStoreFilePath == null) {
throw new IllegalArgumentException("Path to key store file must not be null");
}
if (keyStorePassword == null) {
throw new IllegalArgumentException("The key store password must not be null");
}
if (alias == null) {
throw new IllegalArgumentException("The Alias must not be null");
}
if (aliasPassword == null) {
throw new IllegalArgumentException("The Alias password not be null");
}
Key key;
try (InputStream inputStream = new FileInputStream(keyStoreFilePath)) {
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(inputStream, keyStorePassword.toCharArray());
key = keyStore.getKey(alias, aliasPassword.toCharArray());
} catch (UnrecoverableKeyException | NoSuchAlgorithmException | KeyStoreException | CertificateException | IOException e) {
throw new APIManagementException("Error getting requested key: Private key not found ", e);
}
if (!(key instanceof PrivateKey)) {
throw new APIManagementException("Error getting requested key: Private key not found ");
}
return (PrivateKey) key;
}
use of org.wso2.siddhi.query.api.execution.query.input.store.Store in project carbon-apimgt by wso2.
the class JWTWithRSASignatureImpl method getPublicKey.
/**
* {@inheritDoc}
*/
@Override
public PublicKey getPublicKey(String keyStoreFilePath, String keyStorePassword, String alias) throws APIManagementException {
if (keyStoreFilePath == null) {
throw new IllegalArgumentException("Path to key store file must not be null");
}
if (keyStorePassword == null) {
throw new IllegalArgumentException("The key store password must not be null");
}
if (alias == null) {
throw new IllegalArgumentException("The Alias must not be null");
}
Certificate cert;
try (FileInputStream inputStream = new FileInputStream(keyStoreFilePath)) {
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(inputStream, keyStorePassword.toCharArray());
cert = keyStore.getCertificate(alias);
} catch (NoSuchAlgorithmException | CertificateException | KeyStoreException | IOException e) {
throw new APIManagementException("Error getting requested key: Public key not found ", e);
}
return cert.getPublicKey();
}
use of org.wso2.siddhi.query.api.execution.query.input.store.Store in project carbon-apimgt by wso2.
the class DefaultIdentityProviderImplTestCase method testGetRoleName.
@Test
public void testGetRoleName() throws Exception {
SCIMServiceStub scimServiceStub = Mockito.mock(SCIMServiceStub.class);
UserNameMapper userNameMapper = Mockito.mock(UserNameMapperImpl.class);
DefaultIdentityProviderImpl idpImpl = new DefaultIdentityProviderImpl(scimServiceStub, userNameMapper);
String validRoleId = "ac093278-9343-466c-8a71-af47921a575b";
String expectedRoleName = "engineer";
// happy path
String successfulResponseBody = "{\"displayName\":\"" + expectedRoleName + "\",\"meta\":{\"created\":" + "\"2017-06-26T16:30:42\",\"location\":\"https://localhost:9443/wso2/scim/Groups/" + validRoleId + "\"" + ",\"lastModified\":\"2017-06-26T16:30:42\"},\"schemas\":[\"urn:scim:schemas:core:1.0\"],\"id\":\"" + validRoleId + "\"}";
Response successfulResponse = Response.builder().status(APIMgtConstants.HTTPStatusCodes.SC_200_OK).headers(new HashMap<>()).body(successfulResponseBody.getBytes()).build();
Mockito.when(scimServiceStub.getGroup(validRoleId)).thenReturn(successfulResponse);
try {
String roleName = idpImpl.getRoleName(validRoleId);
Assert.assertEquals(roleName, expectedRoleName);
} catch (Exception ex) {
Assert.fail(ex.getMessage());
}
// error path
// When response is null
String invalidRoleIdResponseNull = "invalidRoleId_Response_Null";
Mockito.when(scimServiceStub.getGroup(invalidRoleIdResponseNull)).thenReturn(null);
try {
idpImpl.getRoleName(invalidRoleIdResponseNull);
} catch (IdentityProviderException ex) {
Assert.assertEquals(ex.getMessage(), "Error occurred while retrieving name of role with Id " + invalidRoleIdResponseNull + ". Error : Response is null.");
}
// error path
// When the request did not return a 200 OK response
String invalidRoleIdNot200OK = "invalidRoleId_Not_200_OK";
String errorResponseBody = "{\"Errors\":[{\"code\":\"404\",\"description\":\"Group not found in the user " + "store.\"}]}";
Response errorResponse = Response.builder().status(APIMgtConstants.HTTPStatusCodes.SC_404_NOT_FOUND).headers(new HashMap<>()).body(errorResponseBody.getBytes()).build();
Mockito.when(scimServiceStub.getGroup(invalidRoleIdNot200OK)).thenReturn(errorResponse);
try {
idpImpl.getRoleName(invalidRoleIdNot200OK);
} catch (IdentityProviderException ex) {
Assert.assertEquals(ex.getMessage(), "Error occurred while retrieving name of role with Id " + invalidRoleIdNot200OK + ". Error : Group not found in the user store.");
}
// Error case - When response body is empty
String invalidRoleIdResponseEmpty = "invalidRoleId_Response_Empty";
Response emptyResponse = Response.builder().status(APIMgtConstants.HTTPStatusCodes.SC_200_OK).headers(new HashMap<>()).body("".getBytes()).build();
Mockito.when(scimServiceStub.getGroup(invalidRoleIdResponseEmpty)).thenReturn(emptyResponse);
try {
idpImpl.getRoleName(invalidRoleIdResponseEmpty);
} catch (IdentityProviderException ex) {
Assert.assertEquals(ex.getMessage(), "Error occurred while retrieving role name with role Id " + invalidRoleIdResponseEmpty + " from SCIM endpoint. " + "Response body is null or empty.");
}
}
use of org.wso2.siddhi.query.api.execution.query.input.store.Store in project carbon-apimgt by wso2.
the class DefaultIdentityProviderImplTestCase method testRegisterUser.
@Test
public void testRegisterUser() throws Exception {
SCIMServiceStub scimServiceStub = Mockito.mock(SCIMServiceStub.class);
UserNameMapper userNameMapper = Mockito.mock(UserNameMapperImpl.class);
DefaultIdentityProviderImpl idpImpl = new DefaultIdentityProviderImpl(scimServiceStub, userNameMapper);
// happy path
User user = new User();
user.setFirstName("john");
user.setLastName("doe");
user.setUsername("johnd");
user.setEmail("john@wso2.com");
user.setPassword(new char[] { 'p', 'a', 's', 's' });
SCIMUser scimUser = new SCIMUser();
SCIMUser.SCIMName scimName = new SCIMUser.SCIMName();
scimName.setGivenName(user.getFirstName());
scimName.setFamilyName(user.getLastName());
scimUser.setName(scimName);
SCIMUser.SCIMUserEmails scimUserEmails = new SCIMUser.SCIMUserEmails(user.getEmail(), "home", true);
List<SCIMUser.SCIMUserEmails> scimUserEmailList = new ArrayList<>();
scimUserEmailList.add(scimUserEmails);
scimUser.setEmails(scimUserEmailList);
scimUser.setUsername(user.getUsername());
scimUser.setPassword(String.valueOf(user.getPassword()));
Response createdResponse = Response.builder().status(APIMgtConstants.HTTPStatusCodes.SC_201_CREATED).headers(new HashMap<>()).build();
Mockito.when(scimServiceStub.addUser(scimUser)).thenReturn(createdResponse);
try {
idpImpl.registerUser(user);
Assert.assertTrue(true);
} catch (Exception ex) {
Assert.fail(ex.getMessage());
}
// error path
final int errorSc = APIMgtConstants.HTTPStatusCodes.SC_409_CONFLICT;
final String errorMsg = "{\"Errors\":[{\"code\":\"409\",\"description\":\"Error in adding the user: test to " + "the user store.\"}]}";
Response errorResponse = Response.builder().status(errorSc).headers(new HashMap<>()).body(errorMsg.getBytes()).build();
Mockito.when(scimServiceStub.addUser(any(SCIMUser.class))).thenReturn(errorResponse);
try {
idpImpl.registerUser(user);
Assert.fail("Exception was expected, but wasn't thrown");
} catch (IdentityProviderException ex) {
Assert.assertTrue(ex.getMessage().startsWith("Error occurred while creating user."));
}
}
Aggregations