Skip to content

Commit 7696aff

Browse files
committed
update docs, fix recursive bug in messages
1 parent 46e80e6 commit 7696aff

3 files changed

Lines changed: 16 additions & 80 deletions

File tree

OpenFlow/src/Messages/Message.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,9 @@ export class Message {
417417
var user:User;
418418
try {
419419
msg = RegisterUserMessage.assign(this.data);
420+
if(msg.name == null || msg.name == undefined || msg.name == "") { throw new Error("Name cannot be null"); }
421+
if(msg.username == null || msg.username == undefined || msg.username == "") { throw new Error("Username cannot be null"); }
422+
if(msg.password == null || msg.password == undefined || msg.password == "") { throw new Error("Password cannot be null"); }
420423
user = await User.FindByUsername(msg.username);
421424
if(user!==null && user !== undefined) { throw new Error("Illegal username"); }
422425
user = await User.ensureUser(msg.name, msg.username, msg.password, null);

OpenFlow/src/WebSocketClient.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,17 +155,18 @@ export class WebSocketClient {
155155
var first: SocketMessage = msgs[0];
156156
if(first.count === msgs.length) {
157157
if(msgs.length === 1) {
158+
this._receiveQueue = this._receiveQueue.filter(function (msg: SocketMessage):boolean { return msg.id!==id;});
158159
var singleresult: Message = Message.frommessage(first, first.data);
159160
singleresult.Process(this);
160161
} else {
161162
var buffer: string = "";
162163
msgs.forEach(msg => {
163164
if(msg.data!==null && msg.data !== undefined) { buffer += msg.data; }
164165
});
166+
this._receiveQueue = this._receiveQueue.filter(function (msg: SocketMessage):boolean { return msg.id!==id;});
165167
var result: Message = Message.frommessage(first, buffer);
166168
result.Process(this);
167169
}
168-
this._receiveQueue = this._receiveQueue.filter(function (msg: SocketMessage):boolean { return msg.id!==id;});
169170
}
170171
});
171172
this._sendQueue.forEach(msg => {

OpenFlowNodeRED/src/nodered/nodes/api.html

Lines changed: 11 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
</div>
3737
</script>
3838
<script type="text/x-red" data-help-name="api get jwt">
39-
Request a JWT token for talking with API. Leave config blank to impersonate root
39+
Request a JWT token for talking with API. Leave config blank to impersonate root.
4040
</script>
4141
<script type="text/javascript">
4242
RED.nodes.registerType('api get jwt', {
@@ -430,7 +430,7 @@
430430
</div>
431431
</script>
432432
<script type="text/x-red" data-help-name="grant permission">
433-
<p>Delete payload as new entity in collection</p>
433+
<p>Grants a role (or user if set by msg.targetid) a specific permission on the entity/entities in payload.</p>
434434
</script>
435435
<script type="text/javascript">
436436
RED.nodes.registerType('grant permission', {
@@ -508,7 +508,7 @@
508508
</div>
509509
</script>
510510
<script type="text/x-red" data-help-name="revoke permission">
511-
<p>Delete payload as new entity in collection</p>
511+
<p>Revoke a specific permission for a role (or user if set by msg.targetid) on the entity/entities in payload.</p>
512512
</script>
513513
<script type="text/javascript">
514514
RED.nodes.registerType('revoke permission', {
@@ -563,81 +563,6 @@
563563

564564

565565

566-
<script type="text/x-red" data-template-name="grant permission">
567-
<div class="form-row">
568-
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
569-
<input type="text" id="node-input-name" placeholder="Name">
570-
</div>
571-
<div class="form-row">
572-
<label for="node-input-targetid"><i class="fa fa-tasks"></i> Target</label>
573-
<select id="node-input-targetid-select">
574-
</select>
575-
<input id="node-input-targetid" type="hidden">
576-
</div>
577-
<div class="form-row">
578-
<label for="node-input-typed-entities"><i class="fa fa-list"></i> Entities</label>
579-
<input id="node-input-typed-entities" type="text" style="width: 70%">
580-
<input id="node-input-entities" type="hidden">
581-
</div>
582-
<div class="form-row">
583-
<label><i class="fa fa-tag"></i> Bitsexplained </label>
584-
(F:-1, R:2, U:3, D:4, I:5)
585-
</div>
586-
<div class="form-row">
587-
<label for="node-input-bits"><i class="fa fa-tag"></i> Bits </label>
588-
<input type="text" id="node-input-bits" placeholder="Bits seperated by comma,">
589-
</div>
590-
</script>
591-
<script type="text/x-red" data-help-name="grant permission">
592-
<p>Delete payload as new entity in collection</p>
593-
</script>
594-
<script type="text/javascript">
595-
RED.nodes.registerType('grant permission', {
596-
category: 'api',
597-
color: "#a6bbcf",
598-
defaults: {
599-
name: { value: "" },
600-
targetid: { value: "result._id", required: true },
601-
entities: { value: "payload", required: true },
602-
bits: { value: "", required: true }
603-
},
604-
inputs: 1,
605-
outputs: 1,
606-
icon: "bridge.png",
607-
label: function () {
608-
return this.name || "grant permission";
609-
},
610-
labelStyle: function () {
611-
return this.name ? "node_label_italic" : "";
612-
},
613-
614-
oneditprepare: function () {
615-
$("#node-input-typed-entities").typedInput({ types: ['msg'] });
616-
$("#node-input-typed-entities").typedInput('value', this.entities);
617-
618-
619-
$.getJSON('api_roles',function(data) {
620-
$.each(data, function(i, ele) {
621-
$('#node-input-targetid-select').append($('<option>', {
622-
value: ele._id,
623-
text : ele.name
624-
}));
625-
});
626-
$('#node-input-targetid-select').val($('#node-input-targetid').val());
627-
});
628-
629-
},
630-
oneditsave: function () {
631-
$('#node-input-targetid').val($('#node-input-targetid-select').val());
632-
$("#node-input-entities").val($("#node-input-typed-entities").typedInput('value'));
633-
}
634-
635-
});
636-
</script>
637-
638-
639-
640-
641566

642567

643568

@@ -699,7 +624,14 @@
699624

700625
</script>
701626
<script type="text/x-red" data-help-name="map reduce">
702-
<p>Delete payload as new entity in collection</p>
627+
<p>
628+
Run a mapreduce on a collection.
629+
If output is set for inline, the result will be returned in payload, for all else, you can get the result in the receiving collection.<br>
630+
Finalize is optional, and can be left blank if not needed.<br>
631+
Be carefull to keep _acl on all reduced objects, so you have permission to read the result.<br>
632+
<a href="https://docs.mongodb.com/manual/tutorial/map-reduce-examples/index.html">map-reduce-examples</a><br>
633+
<a href="https://docs.mongodb.com/manual/reference/method/db.collection.mapReduce/#db.collection.mapReduce">dokumentation</a>
634+
</p>
703635
</script>
704636
<script type="text/javascript">
705637
RED.nodes.registerType('map reduce', {

0 commit comments

Comments
 (0)