Skip to content
This repository was archived by the owner on Feb 20, 2024. It is now read-only.

Commit 0265cf9

Browse files
Merge pull request #39 from solace-iot-team/feat-ac-token
Feat ac token
2 parents 6a28d8c + 3c8e6e8 commit 0265cf9

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+431
-397
lines changed

ReleaseNotes.md

+20
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,26 @@
22

33
Solace Async API Management.
44

5+
## Version 0.3.1
6+
* [API-M Admin & Developer Portal](https://github.com/solace-iot-team/async-apim/tree/main/apim-portal): 0.3.1
7+
* [API-M Server OpenAPI](https://github.com/solace-iot-team/async-apim/blob/main/apim-server/server/common/api.yml): 0.3.1
8+
* [API-M Server](https://github.com/solace-iot-team/async-apim/tree/main/apim-server): 0.3.1
9+
* [API-M Connector OpenAPI](https://github.com/solace-iot-team/platform-api): 0.7.19
10+
11+
**Enhancements:**
12+
* **API Products**
13+
- enabled editing `queue granularity` to Guaranteed Messaging Options - Connector re-provisions apps on changing setting
14+
15+
**APIM Server:**
16+
- **Internal IDP**
17+
- APIM server functions as an internal IDP (bearer token + refresh token)
18+
- APIM Server proxy to Connector API with bearer token
19+
- removed connector username + password from config & bootstrap files
20+
21+
**Quickstart:**
22+
- **Mongo DB**
23+
- changed quickstart docker compose to use only 1 mongo db for apim server & connector
24+
525
## Version 0.3.0
626
* [API-M Admin & Developer Portal](https://github.com/solace-iot-team/async-apim/tree/main/apim-portal): 0.3.0
727
* [API-M Server OpenAPI](https://github.com/solace-iot-team/async-apim/blob/main/apim-server/server/common/api.yml): 0.3.0

apim-portal/devel/README.md

-13
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,5 @@
11
# APIM Portal Development
22

3-
## Standup APIM Connector System
4-
5-
````bash
6-
apim-connector-system/start.system.sh
7-
````
8-
- Check the [docker.compose.yml](./docker.compose.yml) for ports / credentials, etc.
9-
- [Connector username/password](./apim-connector-system/docker-volumes/apim-connector/organization_users.json).
10-
11-
Stop:
12-
````bash
13-
apim-connector-system/stop.system.sh
14-
````
15-
163
## Start Devel Portal
174
````bash
185
npm install

apim-portal/devel/apim-connector-system/docker.compose.yml

-35
This file was deleted.

apim-portal/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "async-apim-portal",
3-
"version": "0.3.0",
3+
"version": "0.3.1",
44
"description": "Solace Async API Management Portal",
55
"repository": {
66
"type": "git",

apim-portal/src/admin-portal/components/ManageConnectors/EditNewConnector.tsx

+8-9
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import { Dropdown } from "primereact/dropdown";
66
import { InputText } from 'primereact/inputtext';
77
import { InputTextarea } from 'primereact/inputtextarea';
88
import { InputNumber } from "primereact/inputnumber";
9-
import { Password } from "primereact/password";
109
import { Button } from 'primereact/button';
1110
import { Toolbar } from 'primereact/toolbar';
1211
import { classNames } from 'primereact/utils';
@@ -95,8 +94,8 @@ export const EditNewConnector: React.FC<IEditNewConnectorProps> = (props: IEditN
9594
connectorClientConfig: {
9695
locationConfig: emptyLocationConfigInternalProxy,
9796
apiVersion: 'v1',
98-
serviceUser: '',
99-
serviceUserPwd: ''
97+
// serviceUser: 'unused-service-user',
98+
// serviceUserPwd: 'unused-service-user-pwd'
10099
}
101100
};
102101

@@ -276,8 +275,8 @@ export const EditNewConnector: React.FC<IEditNewConnectorProps> = (props: IEditN
276275
managedObjectUseForm.setValue('managedObject.description', mofd.managedObject.description);
277276

278277
managedObjectUseForm.setValue('managedObject.connectorClientConfig.apiVersion', mofd.managedObject.connectorClientConfig.apiVersion);
279-
managedObjectUseForm.setValue('managedObject.connectorClientConfig.serviceUser', mofd.managedObject.connectorClientConfig.serviceUser);
280-
managedObjectUseForm.setValue('managedObject.connectorClientConfig.serviceUserPwd', mofd.managedObject.connectorClientConfig.serviceUserPwd);
278+
// managedObjectUseForm.setValue('managedObject.connectorClientConfig.serviceUser', mofd.managedObject.connectorClientConfig.serviceUser);
279+
// managedObjectUseForm.setValue('managedObject.connectorClientConfig.serviceUserPwd', mofd.managedObject.connectorClientConfig.serviceUserPwd);
281280

282281
managedObjectUseForm.setValue('selectedLocationConfigTypeId', mofd.selectedLocationConfigTypeId);
283282
managedObjectUseForm.setValue('locationConfigExternal', mofd.locationConfigExternal);
@@ -488,7 +487,7 @@ export const EditNewConnector: React.FC<IEditNewConnectorProps> = (props: IEditN
488487
{displayManagedObjectFormFieldErrorMessage(managedObjectUseForm.formState.errors.managedObject?.description)}
489488
</div>
490489
{/* serviceUser */}
491-
<div className="p-field">
490+
{/* <div className="p-field">
492491
<span className="p-float-label">
493492
<Controller
494493
name="managedObject.connectorClientConfig.serviceUser"
@@ -511,9 +510,9 @@ export const EditNewConnector: React.FC<IEditNewConnectorProps> = (props: IEditN
511510
<label htmlFor="managedObject.connectorClientConfig.serviceUser" className={classNames({ 'p-error': managedObjectUseForm.formState.errors.managedObject?.connectorClientConfig?.serviceUser })}>Service User*</label>
512511
</span>
513512
{displayManagedObjectFormFieldErrorMessage(managedObjectUseForm.formState.errors.managedObject?.connectorClientConfig?.serviceUser)}
514-
</div>
513+
</div> */}
515514
{/* serviceUserPwd */}
516-
<div className="p-field">
515+
{/* <div className="p-field">
517516
<span className="p-float-label">
518517
<Controller
519518
name="managedObject.connectorClientConfig.serviceUserPwd"
@@ -539,7 +538,7 @@ export const EditNewConnector: React.FC<IEditNewConnectorProps> = (props: IEditN
539538
<label htmlFor="managedObject.connectorClientConfig.serviceUserPwd" className={classNames({ 'p-error': managedObjectUseForm.formState.errors.managedObject?.connectorClientConfig?.serviceUserPwd })}>Service User Password*</label>
540539
</span>
541540
{displayManagedObjectFormFieldErrorMessage(managedObjectUseForm.formState.errors.managedObject?.connectorClientConfig?.serviceUserPwd)}
542-
</div>
541+
</div> */}
543542

544543
{/* config Type */}
545544
<div className="p-field">

apim-portal/src/admin-portal/components/ManageConnectors/ListConnectors.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,8 @@ export const ListConnectors: React.FC<IListConnectorsProps> = (props: IListConne
193193
autoLayout={true}
194194
>
195195
<Column header="URL" headerStyle={{ width: '35%' }} field="composedConnectorUrl" />
196-
<Column header="Service User" field="apsConnector.connectorClientConfig.serviceUser" />
197-
<Column header="Service User Password" field="apsConnector.connectorClientConfig.serviceUserPwd" />
196+
{/* <Column header="Service User" field="apsConnector.connectorClientConfig.serviceUser" />
197+
<Column header="Service User Password" field="apsConnector.connectorClientConfig.serviceUserPwd" /> */}
198198
</DataTable>
199199
</div>
200200
);

apim-portal/src/admin-portal/components/ManageConnectors/ViewConnector.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,8 @@ export const ViewConnector: React.FC<IViewConnectorProps> = (props: IViewConnect
135135
<div className="p-ml-4">
136136
<div><b>Type</b>: {mo.apsConnector.connectorClientConfig.locationConfig.configType}</div>
137137
<div><b>Url</b>: {mo.composedConnectorUrl}</div>
138-
<div><b>Service User</b>: {mo.apsConnector.connectorClientConfig.serviceUser}</div>
139-
<div><b>Service Pwd </b>: {mo.apsConnector.connectorClientConfig.serviceUserPwd}</div>
138+
{/* <div><b>Service User</b>: {mo.apsConnector.connectorClientConfig.serviceUser}</div> */}
139+
{/* <div><b>Service Pwd </b>: {mo.apsConnector.connectorClientConfig.serviceUserPwd}</div> */}
140140
</div>
141141
</React.Fragment>
142142
);

apim-portal/src/utils/APClientConnectorOpenApi.ts

-64
Original file line numberDiff line numberDiff line change
@@ -51,74 +51,10 @@ export class APClientConnectorOpenApi {
5151
return base;
5252
}
5353

54-
public static deleteme_initialize = (config: APSConnectorClientConfig) => {
55-
// const funcName: string = `initialize`;
56-
// const logName: string = `${APClientConnectorOpenApi.componentName}.${funcName}()`
57-
APClientConnectorOpenApi.config = (JSON.parse(JSON.stringify(config)));
58-
OpenAPI.BASE = APClientConnectorOpenApi.constructOpenApiBase(APClientConnectorOpenApi.config);
59-
OpenAPI.USERNAME = APClientConnectorOpenApi.config.serviceUser;
60-
OpenAPI.PASSWORD = APClientConnectorOpenApi.config.serviceUserPwd;
61-
APClientConnectorOpenApi.isInitialized = true;
62-
// console.log(`${logName}: OpenAPI = ${JSON.stringify(OpenAPI, null, 2)}`);
63-
}
64-
6554
public static uninitialize = () => {
6655
APClientConnectorOpenApi.isInitialized = false;
6756
}
6857

69-
// ************ PROXY *******************
70-
// public static tmpInitializeAsProxy = async () => {
71-
// const funcName: string = `tmpInitializeAsProxy`;
72-
// const logName: string = `${APClientConnectorOpenApi.componentName}.${funcName}()`
73-
// // APClientConnectorOpenApi.mutexReleaser = await APClientConnectorOpenApi.mutex.acquire();
74-
// if(APClientConnectorOpenApi.isInitialized) {
75-
// APClientConnectorOpenApi.orgSettings = {
76-
// config: JSON.parse(JSON.stringify(APClientConnectorOpenApi.config)),
77-
// isInitialized: true
78-
// }
79-
// }
80-
// const url: string = APSOpenAPI.BASE + '/connectorProxy';
81-
// OpenAPI.BASE = `${url}/${APClientConnectorOpenApi.config.apiVersion}`;
82-
// OpenAPI.USERNAME = undefined;
83-
// OpenAPI.PASSWORD = undefined;
84-
// OpenAPI.WITH_CREDENTIALS = true;
85-
// // OpenAPI.CREDENTIALS = "include";
86-
// OpenAPI.TOKEN = async() => { return APSClientOpenApi.getToken(); }
87-
// console.log(`${logName}: ConnectorOpenAPI=${JSON.stringify(OpenAPI, null, 2)}`);
88-
// }
89-
// public static tmpUninitializeAsProxy = async () => {
90-
// if(APClientConnectorOpenApi.orgSettings) {
91-
// APClientConnectorOpenApi.initialize(APClientConnectorOpenApi.orgSettings.config);
92-
// } else {
93-
// APClientConnectorOpenApi.uninitialize();
94-
// }
95-
// APClientConnectorOpenApi.mutexReleaser();
96-
// }
97-
// ************ PROXY *******************
98-
99-
public static deleteme_tmpInitialize = async (tmpConfig: APSConnectorClientConfig) => {
100-
// const funcName: string = `tmpInitialize`;
101-
// const logName: string = `${APClientConnectorOpenApi.componentName}.${funcName}()`
102-
// APClientConnectorOpenApi.mutexReleaser = await APClientConnectorOpenApi.mutex.acquire();
103-
// if(APClientConnectorOpenApi.isInitialized) {
104-
// APClientConnectorOpenApi.orgSettings = {
105-
// config: JSON.parse(JSON.stringify(APClientConnectorOpenApi.config)),
106-
// isInitialized: true
107-
// }
108-
// }
109-
// APClientConnectorOpenApi.initialize(tmpConfig);
110-
// console.log(`${logName}: OpenAPI=${JSON.stringify(OpenAPI, null, 2)}`);
111-
}
112-
113-
public static deleteme_tmpUninitialize = async () => {
114-
// if(APClientConnectorOpenApi.orgSettings) {
115-
// APClientConnectorOpenApi.initialize(APClientConnectorOpenApi.orgSettings.config);
116-
// } else {
117-
// APClientConnectorOpenApi.uninitialize();
118-
// }
119-
// APClientConnectorOpenApi.mutexReleaser();
120-
}
121-
12258
public static getOpenApiInfo = (): APConnectorClientOpenApiInfo => {
12359
return {
12460
base: OpenAPI.BASE,

apim-server/.env

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
APIM_SERVER_APP_ID=devel-apim-server
12
APIM_SERVER_PORT=3003
23
APIM_SERVER_MONGO_CONNECTION_STRING=mongodb://localhost:27019/?retryWrites=true&w=majority
34

@@ -9,7 +10,6 @@ APIM_SERVER_MONGO_CONNECTION_STRING=mongodb://localhost:27019/?retryWrites=true&
910
APIM_SERVER_MONGO_DB=solace-apim-server
1011
APIM_SERVER_OPENAPI_ENABLE_RESPONSE_VALIDATION=true
1112
# APIM_SERVER_OPENAPI_ENABLE_RESPONSE_VALIDATION=false
12-
APIM_SERVER_LOGGER_APP_ID=devel-apim-server
1313
# level: 'fatal', 'error', 'warn', 'info', 'debug', 'trace' or 'silent'
1414
APIM_SERVER_LOGGER_LOG_LEVEL=debug
1515
#APIM_SERVER_LOGGER_LOG_LEVEL=info
@@ -33,6 +33,11 @@ APIM_SERVER_AUTH_INTERNAL_REFRESH_JWT_SECRET=myRefreshJwtSecret
3333
# 30 days = 60 * 60 * 24 * 30 = 2592000 seconds
3434
# 5 days = 60 * 60 * 24 * 5 = 432000 seconds
3535
APIM_SERVER_AUTH_INTERNAL_REFRESH_JWT_EXPIRY_SECS=432000
36+
# token auth for connector
37+
APIM_SERVER_CONNECTOR_AUTH_ISSUER=apim-server
38+
APIM_SERVER_CONNECTOR_AUTH_AUDIENCE=platform-api-server
39+
APIM_SERVER_CONNECTOR_AUTH_SECRET=myConnectorAuthJwtSecret
40+
3641
#future
3742
# APIM_SERVER_AUTH_WHITELISTED_DOMAINS=http://localhost:3000
3843
# oidc auth
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[
22
{
3-
"connectorId": "localDevelApimConnector",
4-
"displayName": "Local Devel Connector",
3+
"connectorId": "localDevelApimConnectorDocker",
4+
"displayName": "Local Devel Connector Docker",
55
"description": "uses docker/release",
66
"isActive": true,
77
"connectorClientConfig": {
@@ -11,9 +11,7 @@
1111
"host": "localhost",
1212
"port": 9095
1313
},
14-
"apiVersion": "v1",
15-
"serviceUser": "apim-portal-service-admin",
16-
"serviceUserPwd": "Solace123!"
14+
"apiVersion": "v1"
1715
}
1816
}
1917
]

apim-server/devel/README.md

-39
Original file line numberDiff line numberDiff line change
@@ -54,45 +54,6 @@ npm run lint
5454
- implement a new test in `test`
5555
- run tests
5656

57-
### MongoDB
58-
### Start Mongo in Docker Container
59-
60-
````bash
61-
# start it with an external volume
62-
vi mongodb/start.mongo.external-volume.sh
63-
# start it with an internal volume
64-
vi mongodb/start.mongo.internal-volume.sh
65-
# check the port number mapped and adjust / align with env for apim-server
66-
````
67-
68-
````bash
69-
# start it with an external volume
70-
./mongodb/start.mongo.external-volume.sh
71-
# login
72-
docker exec -it apim-devel-server-mongodb-ext-vols bash
73-
# docker logs
74-
docker logs apim-devel-server-mongodb-ext-vols
75-
76-
# or
77-
78-
# start it with an internal volume
79-
./mongodb/start.mongo.internal-volume.sh
80-
# login
81-
docker exec -it apim-devel-server-mongodb-int-vols bash
82-
# docker logs
83-
docker logs apim-devel-server-mongodb-int-vols
84-
````
85-
86-
### Stop Mongo Docker Container
87-
````bash
88-
./mongodb/stop.mongo.external-volume.sh
89-
90-
# or
91-
92-
./mongodb/stop.mongo.internal-volume.sh
93-
````
94-
95-
9657
### Start Devel Server
9758
````bash
9859
npm run dev

apim-server/devel/mongodb/docker-compose-external-volume.yml

-17
This file was deleted.

apim-server/devel/mongodb/docker-compose-internal-volume.yml

-19
This file was deleted.

0 commit comments

Comments
 (0)