forked from community/device-mgt-core
parent
fa7ee67aed
commit
ac834d0359
@ -0,0 +1,148 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Copyright (c) 2023, Entgra (Pvt) Ltd. (http://entgra.io) All Rights Reserved.
|
||||
~
|
||||
~ Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
~ Version 2.0 (the "License"); you may not use this file except
|
||||
~ in compliance with the License.
|
||||
~ You may obtain a copy of the License at
|
||||
~
|
||||
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||
~
|
||||
~ Unless required by applicable law or agreed to in writing,
|
||||
~ software distributed under the License is distributed on an
|
||||
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
~ KIND, either express or implied. See the License for the
|
||||
~ specific language governing permissions and limitations
|
||||
~ under the License.
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
|
||||
<parent>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>5.0.21-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>io.entgra.devicemgt.apimgt.extension.publisher.api</artifactId>
|
||||
<packaging>bundle</packaging>
|
||||
<name>Entgra - Device API Management Extension Publisher API</name>
|
||||
<description>Entgra - Device API Management Extension Publisher API</description>
|
||||
<url>https://entgra.io</url>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents.wso2</groupId>
|
||||
<artifactId>httpcore</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.orbit.org.apache.httpcomponents</groupId>
|
||||
<artifactId>httpclient</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.logging</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.utils</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.osgi</groupId>
|
||||
<artifactId>org.eclipse.osgi</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.osgi</groupId>
|
||||
<artifactId>org.eclipse.osgi.services</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-scr-plugin</artifactId>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<version>1.4.0</version>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
|
||||
<Bundle-Name>${project.artifactId}</Bundle-Name>
|
||||
<Bundle-Version>${carbon.device.mgt.version}</Bundle-Version>
|
||||
<Bundle-Description>Publisher API Management Bundle</Bundle-Description>
|
||||
<Export-Package>
|
||||
io.entgra.devicemgt.apimgt.extension.publisher.api.*
|
||||
</Export-Package>
|
||||
<Import-Package>
|
||||
javax.net.ssl,
|
||||
javax.xml.bind,
|
||||
org.apache.commons.logging,
|
||||
org.apache.http;version="${httpclient.version.range}",
|
||||
org.apache.http.client;version="${httpclient.version.range}",
|
||||
org.apache.http.client.methods;version="${httpclient.version.range}",
|
||||
org.apache.http.conn.socket,
|
||||
org.apache.http.conn.ssl,
|
||||
org.apache.http.entity,
|
||||
org.apache.http.impl.client,
|
||||
org.apache.http.util;version="${httpclient.version.range}",
|
||||
|
||||
org.osgi.framework.*;version="${imp.package.version.osgi.framework}",
|
||||
org.osgi.service.*;version="${imp.package.version.osgi.service}",
|
||||
com.sun.jndi.toolkit.ctx,
|
||||
org.wso2.carbon.utils
|
||||
</Import-Package>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.jacoco</groupId>
|
||||
<artifactId>jacoco-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<destFile>${basedir}/target/coverage-reports/jacoco-unit.exec</destFile>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>jacoco-initialize</id>
|
||||
<goals>
|
||||
<goal>prepare-agent</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>jacoco-site</id>
|
||||
<phase>test</phase>
|
||||
<goals>
|
||||
<goal>report</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<dataFile>${basedir}/target/coverage-reports/jacoco-unit.exec</dataFile>
|
||||
<outputDirectory>${basedir}/target/coverage-reports/site</outputDirectory>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<!-- <plugin>-->
|
||||
<!-- <groupId>org.apache.maven.plugins</groupId>-->
|
||||
<!-- <artifactId>maven-surefire-plugin</artifactId>-->
|
||||
<!-- <configuration>-->
|
||||
<!-- <systemPropertyVariables>-->
|
||||
<!-- <log4j.configuration>file:src/test/resources/log4j.properties</log4j.configuration>-->
|
||||
<!-- </systemPropertyVariables>-->
|
||||
<!-- <suiteXmlFiles>-->
|
||||
<!-- <suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>-->
|
||||
<!-- </suiteXmlFiles>-->
|
||||
<!-- </configuration>-->
|
||||
<!-- </plugin>-->
|
||||
</plugins>
|
||||
</build>
|
||||
<properties>
|
||||
<maven.test.skip>true</maven.test.skip>
|
||||
</properties>
|
||||
|
||||
</project>
|
@ -0,0 +1,6 @@
|
||||
package io.entgra.devicemgt.apimgt.extension.publisher.api;
|
||||
|
||||
public interface PublisherAPIService {
|
||||
|
||||
void registerApplication();
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
package io.entgra.devicemgt.apimgt.extension.publisher.api;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.client.HttpClient;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
|
||||
import org.apache.http.conn.ssl.SSLContextBuilder;
|
||||
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
|
||||
import org.apache.http.entity.StringEntity;
|
||||
|
||||
import javax.xml.bind.DatatypeConverter;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.URL;
|
||||
import java.security.KeyManagementException;
|
||||
import java.security.KeyStoreException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
|
||||
public class PublisherAPIServiceImpl implements PublisherAPIService {
|
||||
private static final Log log = LogFactory.getLog(PublisherAPIServiceImpl.class);
|
||||
|
||||
@Override
|
||||
public void registerApplication() {
|
||||
try {
|
||||
HttpClient httpclient;
|
||||
SSLContextBuilder builder = new SSLContextBuilder();
|
||||
builder.loadTrustMaterial(null, new TrustSelfSignedStrategy());
|
||||
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(builder.build());
|
||||
httpclient = org.apache.http.impl.client.HttpClients.custom().setSSLSocketFactory(sslsf).useSystemProperties().build();
|
||||
|
||||
URL url =new URL("https://localhost:9443/client-registration/v0.17/register");
|
||||
HttpPost request = new HttpPost(url.toString());
|
||||
|
||||
String payload = "{\n" +
|
||||
" \"callbackUrl\":\"www.google.lk\",\n" +
|
||||
" \"clientName\":\"rest_api_publisher_code\",\n" +
|
||||
" \"owner\":\"admin\",\n" +
|
||||
" \"grantType\":\"client_credentials password refresh_token\",\n" +
|
||||
" \"saasApp\":true\n" +
|
||||
" }";
|
||||
|
||||
StringEntity entity = new StringEntity(payload);
|
||||
request.setEntity(entity);
|
||||
String encoding = DatatypeConverter.printBase64Binary("admin:admin".getBytes("UTF-8"));
|
||||
|
||||
request.setHeader("Authorization", "Basic " + encoding);
|
||||
request.setHeader("Content-Type", "application/json");
|
||||
|
||||
HttpResponse httpResponse = httpclient.execute(request);
|
||||
|
||||
if (httpResponse != null) {
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
|
||||
String readLine;
|
||||
String response = "";
|
||||
while (((readLine = br.readLine()) != null)) {
|
||||
response += readLine;
|
||||
}
|
||||
System.out.println(response);
|
||||
}
|
||||
|
||||
System.out.println(httpResponse.getStatusLine().getStatusCode());
|
||||
|
||||
} catch (IOException | NoSuchAlgorithmException | KeyStoreException |
|
||||
KeyManagementException e) {
|
||||
log.error("failed to call http client.", e);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
package io.entgra.devicemgt.apimgt.extension.publisher.api.dto;
|
||||
|
||||
public class AccessTokenInfo {
|
||||
|
||||
private String tokenType;
|
||||
private long expiresIn;
|
||||
private String refreshToken;
|
||||
private String accessToken;
|
||||
private String scope;
|
||||
|
||||
public String getTokenType() {
|
||||
return tokenType;
|
||||
}
|
||||
|
||||
public void setTokenType(String tokenType) {
|
||||
this.tokenType = tokenType;
|
||||
}
|
||||
|
||||
public long getExpiresIn() {
|
||||
return expiresIn;
|
||||
}
|
||||
|
||||
public void setExpiresIn(long expiresIn) {
|
||||
this.expiresIn = expiresIn;
|
||||
}
|
||||
|
||||
public String getRefreshToken() {
|
||||
return refreshToken;
|
||||
}
|
||||
|
||||
public void setRefreshToken(String refreshToken) {
|
||||
this.refreshToken = refreshToken;
|
||||
}
|
||||
|
||||
public String getAccessToken() {
|
||||
return accessToken;
|
||||
}
|
||||
|
||||
public void setAccessToken(String accessToken) {
|
||||
this.accessToken = accessToken;
|
||||
}
|
||||
|
||||
public String getScope() {
|
||||
return scope;
|
||||
}
|
||||
|
||||
public void setScope(String scope) {
|
||||
this.scope = scope;
|
||||
}
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package io.entgra.devicemgt.apimgt.extension.publisher.api.internal;
|
||||
|
||||
|
||||
import com.sun.jndi.toolkit.ctx.ComponentContext;
|
||||
import io.entgra.devicemgt.apimgt.extension.publisher.api.PublisherAPIService;
|
||||
import io.entgra.devicemgt.apimgt.extension.publisher.api.PublisherAPIServiceImpl;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.osgi.framework.BundleContext;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @scr.component name="io.entgra.devicemgt.apimgt.extension.publisher.api.internal.PublisherAPIServiceComponent"
|
||||
* immediate="true"
|
||||
*/
|
||||
public class PublisherAPIServiceComponent {
|
||||
|
||||
private static Log log = LogFactory.getLog(PublisherAPIServiceComponent.class);
|
||||
|
||||
protected void activate(ComponentContext componentContext) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Initializing publisher API extension bundle");
|
||||
}
|
||||
|
||||
PublisherAPIService publisherAPIService = new PublisherAPIServiceImpl();
|
||||
|
||||
}
|
||||
|
||||
protected void deactivate(ComponentContext componentContext) {
|
||||
//do nothing
|
||||
}
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
package io.entgra.devicemgt.apimgt.extension.publisher.api.util;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.client.HttpClient;
|
||||
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
|
||||
import org.apache.http.conn.ssl.SSLContextBuilder;
|
||||
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import org.wso2.carbon.utils.CarbonUtils;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.security.KeyManagementException;
|
||||
import java.security.KeyStoreException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
|
||||
public class PublisherAPIUtil {
|
||||
|
||||
private static final Log log = LogFactory.getLog(PublisherAPIUtil.class);
|
||||
private static final String HTTPS_PROTOCOL = "https";
|
||||
private static final String TENANT_JWT_CONFIG_LOCATION = File.separator + "jwt-config" + File.separator + "jwt.properties";
|
||||
private static final String JWT_CONFIG_FILE_NAME = "jwt.properties";
|
||||
private static final String SUPERTENANT_JWT_CONFIG_LOCATION =
|
||||
CarbonUtils.getEtcCarbonConfigDirPath() + File.separator + JWT_CONFIG_FILE_NAME;
|
||||
|
||||
/**
|
||||
* Return a http client instance
|
||||
*
|
||||
* @param protocol- service endpoint protocol http/https
|
||||
* @return
|
||||
*/
|
||||
public static HttpClient getHttpClient(String protocol)
|
||||
throws IOException, KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
|
||||
HttpClient httpclient;
|
||||
if (HTTPS_PROTOCOL.equals(protocol)) {
|
||||
SSLContextBuilder builder = new SSLContextBuilder();
|
||||
builder.loadTrustMaterial(null, new TrustSelfSignedStrategy());
|
||||
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(builder.build());
|
||||
httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).useSystemProperties().build();
|
||||
} else {
|
||||
httpclient = HttpClients.createDefault();
|
||||
}
|
||||
return httpclient;
|
||||
}
|
||||
|
||||
public static String getResponseString(HttpResponse httpResponse) throws IOException {
|
||||
BufferedReader br = null;
|
||||
try {
|
||||
br = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
|
||||
String readLine;
|
||||
String response = "";
|
||||
while (((readLine = br.readLine()) != null)) {
|
||||
response += readLine;
|
||||
}
|
||||
return response;
|
||||
} finally {
|
||||
EntityUtils.consumeQuietly(httpResponse.getEntity());
|
||||
if (br != null) {
|
||||
try {
|
||||
br.close();
|
||||
} catch (IOException e) {
|
||||
log.warn("Error while closing the connection! " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in new issue