Search in sources :

Example 51 with Store

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;
}
Also used : Path(java.nio.file.Path) IOException(java.io.IOException) BufferedWriter(java.io.BufferedWriter) SwaggerParser(io.swagger.parser.SwaggerParser) APIManagementException(org.wso2.carbon.apimgt.core.exception.APIManagementException) Swagger(io.swagger.models.Swagger) FileOutputStream(java.io.FileOutputStream) API(org.wso2.carbon.apimgt.core.models.API) OutputStreamWriter(java.io.OutputStreamWriter) File(java.io.File) OutputStreamWriter(java.io.OutputStreamWriter) BufferedWriter(java.io.BufferedWriter) Writer(java.io.Writer) APIStore(org.wso2.carbon.apimgt.core.api.APIStore)

Example 52 with Store

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;
}
Also used : RSAPrivateKey(java.security.interfaces.RSAPrivateKey) PrivateKey(java.security.PrivateKey) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) CertificateException(java.security.cert.CertificateException) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) KeyStoreException(java.security.KeyStoreException) IOException(java.io.IOException) KeyStore(java.security.KeyStore) FileInputStream(java.io.FileInputStream) UnrecoverableKeyException(java.security.UnrecoverableKeyException) APIManagementException(org.wso2.carbon.apimgt.core.exception.APIManagementException) RSAPublicKey(java.security.interfaces.RSAPublicKey) RSAPrivateKey(java.security.interfaces.RSAPrivateKey) PublicKey(java.security.PublicKey) Key(java.security.Key) PrivateKey(java.security.PrivateKey)

Example 53 with Store

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();
}
Also used : APIManagementException(org.wso2.carbon.apimgt.core.exception.APIManagementException) CertificateException(java.security.cert.CertificateException) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) KeyStoreException(java.security.KeyStoreException) IOException(java.io.IOException) KeyStore(java.security.KeyStore) FileInputStream(java.io.FileInputStream) Certificate(java.security.cert.Certificate)

Example 54 with Store

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.");
    }
}
Also used : Response(feign.Response) UserNameMapper(org.wso2.carbon.apimgt.core.api.UserNameMapper) SCIMServiceStub(org.wso2.carbon.apimgt.core.auth.SCIMServiceStub) IdentityProviderException(org.wso2.carbon.apimgt.core.exception.IdentityProviderException) IdentityProviderException(org.wso2.carbon.apimgt.core.exception.IdentityProviderException) Test(org.testng.annotations.Test)

Example 55 with Store

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."));
    }
}
Also used : SCIMUser(org.wso2.carbon.apimgt.core.auth.dto.SCIMUser) User(org.wso2.carbon.apimgt.core.models.User) SCIMUser(org.wso2.carbon.apimgt.core.auth.dto.SCIMUser) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) IdentityProviderException(org.wso2.carbon.apimgt.core.exception.IdentityProviderException) Response(feign.Response) UserNameMapper(org.wso2.carbon.apimgt.core.api.UserNameMapper) SCIMServiceStub(org.wso2.carbon.apimgt.core.auth.SCIMServiceStub) IdentityProviderException(org.wso2.carbon.apimgt.core.exception.IdentityProviderException) Test(org.testng.annotations.Test)

Aggregations

HashMap (java.util.HashMap)25 Test (org.testng.annotations.Test)21 ArrayList (java.util.ArrayList)18 CharonException (org.wso2.charon3.core.exceptions.CharonException)18 SCIMResponse (org.wso2.charon3.core.protocol.SCIMResponse)18 UserManager (org.wso2.charon3.core.extensions.UserManager)15 Produces (javax.ws.rs.Produces)14 ApiOperation (io.swagger.annotations.ApiOperation)12 ApiResponses (io.swagger.annotations.ApiResponses)12 Path (javax.ws.rs.Path)10 APIManagementException (org.wso2.carbon.apimgt.core.exception.APIManagementException)10 Map (java.util.Map)9 APIStore (org.wso2.carbon.apimgt.core.api.APIStore)8 APIMgtDAOException (org.wso2.carbon.apimgt.core.exception.APIMgtDAOException)8 UserStoreException (org.wso2.carbon.user.api.UserStoreException)8 Consumes (javax.ws.rs.Consumes)7 SiddhiAppRuntime (org.wso2.siddhi.core.SiddhiAppRuntime)7 SiddhiManager (org.wso2.siddhi.core.SiddhiManager)7 Response (feign.Response)6 IOException (java.io.IOException)6