Skip to content

Commit b5dc66a

Browse files
committed
improve oauth
1 parent 47c859a commit b5dc66a

9 files changed

Lines changed: 59 additions & 20 deletions

File tree

OpenFlow/src/OAuthProvider.ts

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export class OAuthProvider {
3737
if (state == null) state = encodeURIComponent((req.query.state ? req.query.state : req.query["amp;state"]) as any);
3838
const access_type = (req.query.access_type ? req.query.access_type : req.query["amp;access_type"]);
3939
const client_id = (req.query.client_id ? req.query.client_id : req.query["amp;client_id"]);
40-
const redirect_uri = (req.query.redirect_uri ? req.query.redirect_uri : req.query["amp;redirect_uri"]);
40+
const redirect_uri = (req.query.redirect_uri ? req.query.redirect_uri : req.query["amp;redirect_uri"]) as string;
4141
const response_type = (req.query.response_type ? req.query.response_type : req.query["amp;response_type"]);
4242
const scope = (req.query.scope ? req.query.scope : req.query["amp;scope"]);
4343
let client = instance.getClientById(client_id);
@@ -54,9 +54,7 @@ export class OAuthProvider {
5454
const code = Math.random().toString(36).substr(2, 9);
5555

5656
instance._logger.info("[OAuth][" + (req.user as any).username + "] /oauth/login " + state);
57-
instance.codes[code] = req.user;
58-
instance.codes[code].redirect_uri = redirect_uri;
59-
instance.codes[code].client_id = client_id;
57+
instance.saveAuthorizationCode(code, client, req.user, redirect_uri);
6058
res.redirect(`${redirect_uri}?state=${state}&code=${code}`);
6159
} else {
6260
instance._logger.info("[OAuth][anon] /oauth/login " + state);
@@ -164,6 +162,7 @@ export class OAuthProvider {
164162
public async saveToken(token, client, user) {
165163
this._logger.info("[OAuth] saveToken " + token);
166164
const result: any = {
165+
name: "Token for " + user.name,
167166
accessToken: token.accessToken,
168167
access_token: token.accessToken,
169168
accessTokenExpiresAt: token.accessTokenExpiresAt,
@@ -180,8 +179,22 @@ export class OAuthProvider {
180179
await Config.db.InsertOne(result, "oauthtokens", 0, false, Crypt.rootToken());
181180
return result;
182181
}
183-
saveAuthorizationCode(code, client, user) {
182+
public async saveAuthorizationCode(code: string, client: any, user: any, redirect_uri: string) {
184183
this._logger.info("[OAuth] saveAuthorizationCode " + code);
184+
const codeobject = Object.assign({}, user);
185+
delete codeobject._id;
186+
codeobject._type = 'code';
187+
codeobject.code = code;
188+
codeobject.redirect_uri = redirect_uri;
189+
codeobject.client_id = client.clientId
190+
this.codes[code] = codeobject;
191+
await Config.db.InsertOne(codeobject, "oauthtokens", 1, false, Crypt.rootToken());
192+
this._logger.info("[OAuth] saveAuthorizationCode " + code + " saved");
193+
// instance.codes[code].client_id = client_id;
194+
195+
196+
// await Config.db.InsertOne(result, "oauthtokens", 0, false, Crypt.rootToken());
197+
185198
// // const codeToSave: any = this.codes[code];
186199
// const codeToSave: any = {
187200
// 'authorizationCode': code.authorizationCode,
@@ -197,11 +210,36 @@ export class OAuthProvider {
197210
// 'client': client.id,
198211
// 'user': user.username
199212
// });
200-
return code;
213+
return codeobject;
201214
}
202-
getAuthorizationCode(code) {
215+
sleep(ms) {
216+
return new Promise(resolve => {
217+
setTimeout(resolve, ms)
218+
})
219+
}
220+
221+
public async getAuthorizationCode(code) {
203222
this._logger.info("[OAuth] getAuthorizationCode " + code);
204223
let user: TokenUser = this.codes[code];
224+
if (user == null) {
225+
let users = await Config.db.query<Base>({ _type: "code", "code": code }, null, 10, 0, null, "oauthtokens", Crypt.rootToken());
226+
user = users.length ? users[0] as any : null;
227+
if (user == null) {
228+
await this.sleep(1000);
229+
users = await Config.db.query<Base>({ _type: "code", "code": code }, null, 10, 0, null, "oauthtokens", Crypt.rootToken());
230+
user = users.length ? users[0] as any : null;
231+
}
232+
if (user == null) {
233+
await this.sleep(1000);
234+
users = await Config.db.query<Base>({ _type: "code", "code": code }, null, 10, 0, null, "oauthtokens", Crypt.rootToken());
235+
user = users.length ? users[0] as any : null;
236+
}
237+
if (user == null) {
238+
this._logger.error("[OAuth] getAuthorizationCode, unkown code '" + code + "'");
239+
return null;
240+
}
241+
if (user != null) { this.codes[code] = user; }
242+
}
205243
const client_id: string = this.codes[code].client_id;
206244
if (user == null) return null;
207245
this.revokeAuthorizationCode(code);
@@ -236,6 +274,7 @@ export class OAuthProvider {
236274
revokeAuthorizationCode(code) {
237275
this._logger.info("[OAuth] revokeAuthorizationCode " + code);
238276
delete this.codes[code];
277+
Config.db.DeleteMany({ _type: "code", "code": code }, null, "oauthtokens", Crypt.rootToken());
239278
return true;
240279
// const user: TokenUser = this.codes[code];
241280
// if (user != null) delete this.codes[code];

OpenFlow/src/public/Payment.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@
420420
<div ng-show="ctrl.cardmessage != ''"" class=" alert alert-danger" role="alert">{{ctrl.cardmessage}}</div>
421421
<div ng-show="ctrl.errormessage != ''"" class=" alert alert-danger" role="alert">{{ctrl.errormessage}}</div>
422422
<pre ng-show="ctrl.messages!=''" class=" alert alert-primary" role="alert">{{ ctrl.messages }}</pre>
423-
<h3 ng-show="ctrl.openflowplans.length > 0">OpenFlow User w/NodeRed with a SLA</h3>
423+
<!-- <h3 ng-show="ctrl.openflowplans.length > 0">OpenFlow User w/NodeRed with a SLA</h3>
424424
<div class="row" ng-hide="ctrl.loading==true">
425425
<div ng-repeat="model in ctrl.openflowplans">
426426
<div class="card" style="width: 17rem;height: 332px;">
@@ -437,7 +437,7 @@ <h6 class="card-subtitle mb-2 text-muted">{{model.metadata.subtitle}}</h6>
437437
</div>
438438
</div>
439439
</div>
440-
</div>
440+
</div> -->
441441
<h3 ng-show="ctrl.supportplans.length > 0">Support agreements</h3>
442442
<div class="row" ng-hide="ctrl.loading==true">
443443
<div ng-repeat="model in ctrl.supportplans">

OpenFlowNodeRED/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "openflow-nodered",
3-
"version": "1.1.99",
3+
"version": "1.1.103",
44
"description": "Simple wrapper around NodeRed, RabbitMQ and MongoDB to support a more scaleable NodeRed implementation.\r Also the \"backend\" for [OpenRPA](https://github.com/skadefro/OpenRPA)",
55
"main": "index.js",
66
"scripts": {

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.1.99
1+
1.1.103

docker-compose-toolbox.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ services:
4545
- "traefik.http.routers.web.rule=Host(`toolbox.openrpa.dk`)"
4646
- "traefik.http.routers.web.entrypoints=web"
4747
- "traefik.frontend.passHostHeader=true"
48-
image: "cloudhack/openflow:1.1.99"
48+
image: "cloudhack/openflow:1.1.103"
4949
container_name: "web"
5050
environment:
5151
- update_acl_based_on_groups=true
@@ -82,7 +82,7 @@ services:
8282
- "traefik.http.routers.nodered.rule=Host(`nodered1.toolbox.openrpa.dk`)"
8383
- "traefik.http.routers.nodered.entrypoints=web"
8484
- "traefik.http.services.nodered.loadbalancer.server.port=1880"
85-
image: "cloudhack/openflownodered:1.1.99"
85+
image: "cloudhack/openflownodered:1.1.103"
8686
container_name: "nodered"
8787
environment:
8888
# - nodered_id=1

docker-compose-traefik-letsencrypt.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ services:
6969
- "traefik.http.routers.web.entrypoints=web,websecure"
7070
- "traefik.frontend.passHostHeader=true"
7171
- "traefik.http.routers.web.tls.certresolver=myresolver"
72-
image: "cloudhack/openflow:1.1.99"
72+
image: "cloudhack/openflow:1.1.103"
7373
container_name: "web"
7474
environment:
7575
- update_acl_based_on_groups=true
@@ -107,7 +107,7 @@ services:
107107
- "traefik.http.routers.nodered.entrypoints=web,websecure"
108108
- "traefik.http.services.nodered.loadbalancer.server.port=1880"
109109
- "traefik.http.routers.nodered.tls.certresolver=myresolver"
110-
image: "cloudhack/openflownodered:1.1.99"
110+
image: "cloudhack/openflownodered:1.1.103"
111111
container_name: "nodered"
112112
environment:
113113
# - nodered_id=1

docker-compose-traefik.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ services:
4545
- "traefik.http.routers.web.rule=Host(`localhost.openrpa.dk`)"
4646
- "traefik.http.routers.web.entrypoints=web"
4747
- "traefik.frontend.passHostHeader=true"
48-
image: "cloudhack/openflow:1.1.99"
48+
image: "cloudhack/openflow:1.1.103"
4949
container_name: "web"
5050
environment:
5151
- update_acl_based_on_groups=true
@@ -82,7 +82,7 @@ services:
8282
- "traefik.http.routers.nodered.rule=Host(`nodered1.localhost.openrpa.dk`)"
8383
- "traefik.http.routers.nodered.entrypoints=web"
8484
- "traefik.http.services.nodered.loadbalancer.server.port=1880"
85-
image: "cloudhack/openflownodered:1.1.99"
85+
image: "cloudhack/openflownodered:1.1.103"
8686
container_name: "nodered"
8787
environment:
8888
# - nodered_id=1

docker-compose.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ services:
1818
- "5672:5672"
1919
- "15672:15672"
2020
web:
21-
image: "cloudhack/openflow:1.1.99"
21+
image: "cloudhack/openflow:1.1.103"
2222
environment:
2323
- update_acl_based_on_groups=true
2424
- multi_tenant=false
@@ -52,7 +52,7 @@ services:
5252
- "80:80"
5353
- "5858:5858"
5454
nodered:
55-
image: "cloudhack/openflownodered:1.1.99"
55+
image: "cloudhack/openflownodered:1.1.103"
5656
environment:
5757
# - nodered_id=1
5858
- nodered_sa=nodered1

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "openiap",
3-
"version": "1.1.99",
3+
"version": "1.1.103",
44
"description": "Simple wrapper around NodeRed, RabbitMQ and MongoDB to support a more scaleable NodeRed implementation.\r Also the \"backend\" for [OpenRPA](https://github.com/skadefro/OpenRPA)",
55
"main": "index.js",
66
"scripts": {

0 commit comments

Comments
 (0)