Fix queries with start/end shortestpath
parent
3690a5ad86
commit
c29d3c168a
|
@ -84,11 +84,11 @@ export default class ComputerNodeData extends Component {
|
||||||
|
|
||||||
s4.run("MATCH p=(n:Computer {name:{name}})-[r1:MemberOf*1..]->(g:Group)-[r2:AdminTo]->(c2:Computer) RETURN count(c2)", {name:payload})
|
s4.run("MATCH p=(n:Computer {name:{name}})-[r1:MemberOf*1..]->(g:Group)-[r2:AdminTo]->(c2:Computer) RETURN count(c2)", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'groupDelegatedLocalAdmin':result.records[0]._fields[0].low})
|
this.setState({'groupDelegatedLocalAdmin':result.records[0]._fields[0].low});
|
||||||
s4.close()
|
s4.close();
|
||||||
}.bind(this))
|
}.bind(this))
|
||||||
|
|
||||||
s5.run("MATCH (n:Computer {name:{name}}), (m:Computer), p=shortestPath((n)-[r:AdminTo|MemberOf*1..]->(m)) RETURN count(distinct(m))", {name:payload})
|
s5.run("MATCH (n:Computer {name:{name}}), (m:Computer) WHERE NOT m.name={name} MATCH p=shortestPath((n)-[r:AdminTo|MemberOf*1..]->(m)) RETURN count(distinct(m))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'derivativeLocalAdmin':result.records[0]._fields[0].low})
|
this.setState({'derivativeLocalAdmin':result.records[0]._fields[0].low})
|
||||||
s5.close()
|
s5.close()
|
||||||
|
@ -112,7 +112,7 @@ export default class ComputerNodeData extends Component {
|
||||||
s8.close()
|
s8.close()
|
||||||
}.bind(this))
|
}.bind(this))
|
||||||
|
|
||||||
s9.run("MATCH p = shortestPath((n)-[r:AdminTo|MemberOf|HasSession*1..]->(m:Computer {name:{name}})) RETURN COUNT(DISTINCT(n))", {name:payload})
|
s9.run("MATCH (n) WHERE NOT n.name={name} WITH n MATCH p = shortestPath((n)-[r:AdminTo|MemberOf|HasSession*1..]->(m:Computer {name:{name}})) RETURN COUNT(DISTINCT(n))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'derivativeLocalAdmins':result.records[0]._fields[0].low})
|
this.setState({'derivativeLocalAdmins':result.records[0]._fields[0].low})
|
||||||
s9.close()
|
s9.close()
|
||||||
|
@ -136,7 +136,7 @@ export default class ComputerNodeData extends Component {
|
||||||
s12.close()
|
s12.close()
|
||||||
}.bind(this))
|
}.bind(this))
|
||||||
|
|
||||||
s13.run("MATCH p = shortestPath((c:Computer {name:{name}})-[r:MemberOf|AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner*1..]->(n)) RETURN COUNT(DISTINCT(n))", {name:payload})
|
s13.run("MATCH (n) WHERE NOT n.name={name} WITH n MATCH p = shortestPath((c:Computer {name:{name}})-[r:MemberOf|AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner*1..]->(n)) RETURN COUNT(DISTINCT(n))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'transitiveControl':result.records[0]._fields[0].low})
|
this.setState({'transitiveControl':result.records[0]._fields[0].low})
|
||||||
s13.close()
|
s13.close()
|
||||||
|
@ -178,7 +178,8 @@ export default class ComputerNodeData extends Component {
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query',
|
emitter.emit('query',
|
||||||
"MATCH (m:Computer {name:{name}})-[r:HasSession]->(n:User) WITH n,r,m WHERE NOT n.name ENDS WITH '$' RETURN n,r,m", {name: this.state.label})
|
"MATCH (m:Computer {name:{name}})-[r:HasSession]->(n:User) WITH n,r,m WHERE NOT n.name ENDS WITH '$' RETURN n,r,m", {name: this.state.label})
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<br />
|
<br />
|
||||||
<h4>Local Admins</h4>
|
<h4>Local Admins</h4>
|
||||||
|
@ -192,7 +193,8 @@ export default class ComputerNodeData extends Component {
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query',
|
emitter.emit('query',
|
||||||
"MATCH (n)-[r:AdminTo]->(m:Computer {name:{name}}) RETURN n,r,m",{name: this.state.label})
|
"MATCH (n)-[r:AdminTo]->(m:Computer {name:{name}}) RETURN n,r,m",{name: this.state.label})
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Unrolled Admins
|
Unrolled Admins
|
||||||
|
@ -206,7 +208,8 @@ export default class ComputerNodeData extends Component {
|
||||||
"MATCH p = (n:User)-[r:MemberOf*1..]->(g:Group)-[r2:AdminTo]->(c:Computer {name:{name}}) RETURN p",
|
"MATCH p = (n:User)-[r:MemberOf*1..]->(g:Group)-[r2:AdminTo]->(c:Computer {name:{name}}) RETURN p",
|
||||||
{name: this.state.label},
|
{name: this.state.label},
|
||||||
this.state.label)
|
this.state.label)
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Derivative Local Admins
|
Derivative Local Admins
|
||||||
|
@ -217,8 +220,9 @@ export default class ComputerNodeData extends Component {
|
||||||
value={this.state.derivativeLocalAdmins}
|
value={this.state.derivativeLocalAdmins}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query',
|
emitter.emit('query',
|
||||||
"MATCH p = shortestPath((n)-[r:AdminTo|MemberOf|HasSession*1..]->(m:Computer {name:{name}})) RETURN p",{name: this.state.label}, this.state.label)
|
"MATCH (n) WHERE NOT n.name={name} WITH n MATCH p = shortestPath((n)-[r:AdminTo|MemberOf|HasSession*1..]->(m:Computer {name:{name}})) RETURN p",{name: this.state.label}, this.state.label)
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<br />
|
<br />
|
||||||
<h4>Group Memberships</h4>
|
<h4>Group Memberships</h4>
|
||||||
|
@ -232,7 +236,8 @@ export default class ComputerNodeData extends Component {
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query',
|
emitter.emit('query',
|
||||||
"MATCH (n:Computer {name:{name}}),(m:Group), (n)-[r:MemberOf]->(m) RETURN n,r,m",{name: this.state.label}, this.state.label)
|
"MATCH (n:Computer {name:{name}}),(m:Group), (n)-[r:MemberOf]->(m) RETURN n,r,m",{name: this.state.label}, this.state.label)
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Unrolled Group Membership
|
Unrolled Group Membership
|
||||||
|
@ -244,7 +249,8 @@ export default class ComputerNodeData extends Component {
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query',
|
emitter.emit('query',
|
||||||
"MATCH p = (n:Computer {name:{name}})-[r:MemberOf*1..]->(m:Group) RETURN p",{name: this.state.label}, this.state.label)
|
"MATCH p = (n:Computer {name:{name}})-[r:MemberOf*1..]->(m:Group) RETURN p",{name: this.state.label}, this.state.label)
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Foreign Group Membership
|
Foreign Group Membership
|
||||||
|
@ -256,7 +262,8 @@ export default class ComputerNodeData extends Component {
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query',
|
emitter.emit('query',
|
||||||
"MATCH p = (c:Computer {name:{name}})-[r:MemberOf*1..]->(g:Group) WHERE NOT g.domain = c.domain RETURN p",{name: this.state.label}, this.state.label)
|
"MATCH p = (c:Computer {name:{name}})-[r:MemberOf*1..]->(g:Group) WHERE NOT g.domain = c.domain RETURN p",{name: this.state.label}, this.state.label)
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<br />
|
<br />
|
||||||
<h4>Local Admin Rights</h4>
|
<h4>Local Admin Rights</h4>
|
||||||
|
@ -270,7 +277,8 @@ export default class ComputerNodeData extends Component {
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query',
|
emitter.emit('query',
|
||||||
"MATCH (n:Computer {name:{name}}), (m:Computer), p=(n)-[r:AdminTo]->(m) RETURN p",{name: this.state.label}, this.state.label)
|
"MATCH (n:Computer {name:{name}}), (m:Computer), p=(n)-[r:AdminTo]->(m) RETURN p",{name: this.state.label}, this.state.label)
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Group Delegated Local Admin
|
Group Delegated Local Admin
|
||||||
|
@ -282,7 +290,8 @@ export default class ComputerNodeData extends Component {
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query',
|
emitter.emit('query',
|
||||||
"MATCH p=(n:Computer {name:{name}})-[r1:MemberOf*1..]->(g:Group)-[r2:AdminTo]->(m:Computer) RETURN p",{name: this.state.label}, this.state.label)
|
"MATCH p=(n:Computer {name:{name}})-[r1:MemberOf*1..]->(g:Group)-[r2:AdminTo]->(m:Computer) RETURN p",{name: this.state.label}, this.state.label)
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Derivative Local Admin
|
Derivative Local Admin
|
||||||
|
@ -293,8 +302,9 @@ export default class ComputerNodeData extends Component {
|
||||||
value={this.state.derivativeLocalAdmin}
|
value={this.state.derivativeLocalAdmin}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query',
|
emitter.emit('query',
|
||||||
"MATCH p = shortestPath((c1:Computer {name:{name}})-[r:AdminTo|MemberOf|HasSession*1..]->(c:Computer)) RETURN p",{name: this.state.label}, this.state.label)
|
"MATCH (c:Computer) WHERE NOT c.name={name} WITH c MATCH p = shortestPath((c1:Computer {name:{name}})-[r:AdminTo|MemberOf|HasSession*1..]->(c)) RETURN p",{name: this.state.label}, this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<br />
|
<br />
|
||||||
<h4>Outbound Object Control</h4>
|
<h4>Outbound Object Control</h4>
|
||||||
|
@ -307,7 +317,8 @@ export default class ComputerNodeData extends Component {
|
||||||
value={this.state.firstdegreeControl}
|
value={this.state.firstdegreeControl}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = (c:Computer {name:{name}})-[r1:AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(n) RETURN p", {name:this.state.label})
|
emitter.emit('query', "MATCH p = (c:Computer {name:{name}})-[r1:AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(n) RETURN p", {name:this.state.label})
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Group Delegated Object Control
|
Group Delegated Object Control
|
||||||
|
@ -319,7 +330,8 @@ export default class ComputerNodeData extends Component {
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = (c:Computer {name:{name}})-[r1:MemberOf*1..]->(g:Group)-[r2:AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(n) RETURN p", {name:this.state.label}
|
emitter.emit('query', "MATCH p = (c:Computer {name:{name}})-[r1:MemberOf*1..]->(g:Group)-[r2:AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(n) RETURN p", {name:this.state.label}
|
||||||
,this.state.label)
|
,this.state.label)
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Transitive Object Control
|
Transitive Object Control
|
||||||
|
@ -329,9 +341,10 @@ export default class ComputerNodeData extends Component {
|
||||||
ready={this.state.transitiveControl !== -1}
|
ready={this.state.transitiveControl !== -1}
|
||||||
value={this.state.transitiveControl}
|
value={this.state.transitiveControl}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = shortestPath((c:Computer {name:{name}})-[r1:MemberOf|AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner*1..]->(n)) RETURN p", {name:this.state.label}
|
emitter.emit('query', "MATCH (n) WHERE NOT n.name={name} WITH n MATCH p = shortestPath((c:Computer {name:{name}})-[r1:MemberOf|AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner*1..]->(n)) RETURN p", {name:this.state.label}
|
||||||
,this.state.label)
|
,this.state.label)
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import React, { Component } from 'react';
|
import React, { Component } from 'react';
|
||||||
import NodeALink from './NodeALink.jsx'
|
import NodeALink from './NodeALink.jsx';
|
||||||
import LoadLabel from './LoadLabel.jsx'
|
import LoadLabel from './LoadLabel.jsx';
|
||||||
import PropTypes from 'prop-types'
|
import PropTypes from 'prop-types';
|
||||||
|
|
||||||
export default class DomainNodeData extends Component {
|
export default class DomainNodeData extends Component {
|
||||||
constructor(){
|
constructor(){
|
||||||
|
@ -19,7 +19,7 @@ export default class DomainNodeData extends Component {
|
||||||
firstDegreeInboundTrusts: -1,
|
firstDegreeInboundTrusts: -1,
|
||||||
effectiveInboundTrusts: -1,
|
effectiveInboundTrusts: -1,
|
||||||
driversessions: []
|
driversessions: []
|
||||||
}
|
};
|
||||||
|
|
||||||
emitter.on('domainNodeClicked', this.getNodeData.bind(this));
|
emitter.on('domainNodeClicked', this.getNodeData.bind(this));
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ export default class DomainNodeData extends Component {
|
||||||
getNodeData(payload){
|
getNodeData(payload){
|
||||||
$.each(this.state.driversessions, function(index, record){
|
$.each(this.state.driversessions, function(index, record){
|
||||||
record.close();
|
record.close();
|
||||||
})
|
});
|
||||||
this.setState({
|
this.setState({
|
||||||
label: payload,
|
label: payload,
|
||||||
users: -1,
|
users: -1,
|
||||||
|
@ -39,73 +39,73 @@ export default class DomainNodeData extends Component {
|
||||||
effectiveOutboundTrusts: -1,
|
effectiveOutboundTrusts: -1,
|
||||||
firstDegreeInboundTrusts: -1,
|
firstDegreeInboundTrusts: -1,
|
||||||
effectiveInboundTrusts: -1
|
effectiveInboundTrusts: -1
|
||||||
})
|
});
|
||||||
|
|
||||||
var s1 = driver.session()
|
var s1 = driver.session();
|
||||||
var s2 = driver.session()
|
var s2 = driver.session();
|
||||||
var s3 = driver.session()
|
var s3 = driver.session();
|
||||||
var s4 = driver.session()
|
var s4 = driver.session();
|
||||||
var s5 = driver.session()
|
var s5 = driver.session();
|
||||||
var s6 = driver.session()
|
var s6 = driver.session();
|
||||||
var s7 = driver.session()
|
var s7 = driver.session();
|
||||||
var s8 = driver.session()
|
var s8 = driver.session();
|
||||||
var s9 = driver.session()
|
var s9 = driver.session();
|
||||||
|
|
||||||
s1.run("MATCH (a:User) WHERE a.name ENDS WITH ('@' + {name}) RETURN COUNT(a)", {name:payload})
|
s1.run("MATCH (a:User) WHERE a.name ENDS WITH ('@' + {name}) RETURN COUNT(a)", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'users':result.records[0]._fields[0].low})
|
this.setState({'users':result.records[0]._fields[0].low});
|
||||||
s1.close()
|
s1.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s2.run("MATCH (a:Group) WHERE a.name ENDS WITH ('@' + {name}) RETURN COUNT(a)", {name:payload})
|
s2.run("MATCH (a:Group) WHERE a.name ENDS WITH ('@' + {name}) RETURN COUNT(a)", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'groups':result.records[0]._fields[0].low})
|
this.setState({'groups':result.records[0]._fields[0].low});
|
||||||
s2.close()
|
s2.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s3.run("MATCH (n:Computer) WHERE n.name ENDS WITH {name} WITH n WHERE size(split(n.name,'.')) - size(split({name},'.')) = 1 RETURN count(n)", {name:payload})
|
s3.run("MATCH (n:Computer) WHERE n.name ENDS WITH {name} WITH n WHERE size(split(n.name,'.')) - size(split({name},'.')) = 1 RETURN count(n)", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'computers':result.records[0]._fields[0].low})
|
this.setState({'computers':result.records[0]._fields[0].low});
|
||||||
s3.close()
|
s3.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s4.run("MATCH (a:Group) WHERE NOT a.name ENDS WITH ('@' + {name}) WITH a MATCH (b:Group) WHERE b.name ENDS WITH ('@' + {name}) WITH a,b MATCH (a)-[r:MemberOf]->(b) RETURN count(a)", {name:payload})
|
s4.run("MATCH (a:Group) WHERE NOT a.name ENDS WITH ('@' + {name}) WITH a MATCH (b:Group) WHERE b.name ENDS WITH ('@' + {name}) WITH a,b MATCH (a)-[r:MemberOf]->(b) RETURN count(a)", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'foreignGroups':result.records[0]._fields[0].low})
|
this.setState({'foreignGroups':result.records[0]._fields[0].low});
|
||||||
s4.close()
|
s4.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s5.run("MATCH (a:User) WHERE NOT a.name ENDS WITH ('@' + {name}) WITH a MATCH (b:Group) WHERE b.name ENDS WITH ('@' + {name}) WITH a,b MATCH (a)-[r:MemberOf]->(b) RETURN count(a)", {name:payload})
|
s5.run("MATCH (a:User) WHERE NOT a.name ENDS WITH ('@' + {name}) WITH a MATCH (b:Group) WHERE b.name ENDS WITH ('@' + {name}) WITH a,b MATCH (a)-[r:MemberOf]->(b) RETURN count(a)", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'foreignUsers':result.records[0]._fields[0].low})
|
this.setState({'foreignUsers':result.records[0]._fields[0].low});
|
||||||
s5.close()
|
s5.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s6.run("MATCH (a:Domain {name:{name}})<-[r:TrustedBy]-(b:Domain) RETURN count(b)", {name:payload})
|
s6.run("MATCH (a:Domain {name:{name}})<-[r:TrustedBy]-(b:Domain) RETURN count(b)", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'firstDegreeInboundTrusts':result.records[0]._fields[0].low})
|
this.setState({'firstDegreeInboundTrusts':result.records[0]._fields[0].low});
|
||||||
s6.close()
|
s6.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s7.run("MATCH (a:Domain {name:{name}})-[r:TrustedBy]->(b:Domain) RETURN count(b)", {name:payload})
|
s7.run("MATCH (a:Domain {name:{name}})-[r:TrustedBy]->(b:Domain) RETURN count(b)", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'firstDegreeOutboundTrusts':result.records[0]._fields[0].low})
|
this.setState({'firstDegreeOutboundTrusts':result.records[0]._fields[0].low});
|
||||||
s7.close()
|
s7.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s8.run("MATCH p=shortestPath((a:Domain {name:{name}})<-[r:TrustedBy*1..]-(b:Domain)) RETURN count(b)", {name:payload})
|
s8.run("MATCH (b:Domain) WHERE NOT b.name={name} WITH b MATCH p=shortestPath((a:Domain {name:{name}})<-[r:TrustedBy*1..]-(b)) RETURN count(b)", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'effectiveInboundTrusts':result.records[0]._fields[0].low})
|
this.setState({'effectiveInboundTrusts':result.records[0]._fields[0].low});
|
||||||
s8.close()
|
s8.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s9.run("MATCH p=shortestPath((a:Domain {name:{name}})-[r:TrustedBy*1..]->(b:Domain)) RETURN count(b)", {name:payload})
|
s9.run("MATCH (b:Domain) WHERE NOT b.name={name} MATCH p=shortestPath((a:Domain {name:{name}})-[r:TrustedBy*1..]->(b)) RETURN count(b)", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'effectiveOutboundTrusts':result.records[0]._fields[0].low})
|
this.setState({'effectiveOutboundTrusts':result.records[0]._fields[0].low});
|
||||||
s9.close()
|
s9.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
this.setState({'driversessions': [s1,s2,s3,s4,s5,s6,s7,s8,s9]})
|
this.setState({'driversessions': [s1,s2,s3,s4,s5,s6,s7,s8,s9]});
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
@ -125,7 +125,8 @@ export default class DomainNodeData extends Component {
|
||||||
<dd>
|
<dd>
|
||||||
<LoadLabel
|
<LoadLabel
|
||||||
ready={this.state.users !== -1}
|
ready={this.state.users !== -1}
|
||||||
value={this.state.users} />
|
value={this.state.users}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Groups
|
Groups
|
||||||
|
@ -133,7 +134,8 @@ export default class DomainNodeData extends Component {
|
||||||
<dd>
|
<dd>
|
||||||
<LoadLabel
|
<LoadLabel
|
||||||
ready={this.state.groups !== -1}
|
ready={this.state.groups !== -1}
|
||||||
value={this.state.groups} />
|
value={this.state.groups}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Computers
|
Computers
|
||||||
|
@ -141,7 +143,8 @@ export default class DomainNodeData extends Component {
|
||||||
<dd>
|
<dd>
|
||||||
<LoadLabel
|
<LoadLabel
|
||||||
ready={this.state.computers !== -1}
|
ready={this.state.computers !== -1}
|
||||||
value={this.state.computers} />
|
value={this.state.computers}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<br />
|
<br />
|
||||||
<dt>
|
<dt>
|
||||||
|
@ -152,8 +155,9 @@ export default class DomainNodeData extends Component {
|
||||||
ready={this.state.foreignUsers !== -1}
|
ready={this.state.foreignUsers !== -1}
|
||||||
value={this.state.foreignUsers}
|
value={this.state.foreignUsers}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH (a:User) WHERE NOT a.name ENDS WITH ('@' + {domain}) WITH a MATCH (b:Group) WHERE b.name ENDS WITH ('@' + {domain}) WITH a,b MATCH (a)-[r:MemberOf]-(b) RETURN a,r,b", {domain: this.state.label})
|
emitter.emit('query', "MATCH (a:User) WHERE NOT a.name ENDS WITH ('@' + {domain}) WITH a MATCH (b:Group) WHERE b.name ENDS WITH ('@' + {domain}) WITH a,b MATCH (a)-[r:MemberOf]-(b) RETURN a,r,b", {domain: this.state.label});
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Foreign Groups
|
Foreign Groups
|
||||||
|
@ -163,8 +167,9 @@ export default class DomainNodeData extends Component {
|
||||||
ready={this.state.foreignGroups !== -1}
|
ready={this.state.foreignGroups !== -1}
|
||||||
value={this.state.foreignGroups}
|
value={this.state.foreignGroups}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH (a:Group) WHERE NOT a.name ENDS WITH ('@' + {domain}) WITH a MATCH (b:Group) WHERE b.name ENDS WITH ('@' + {domain}) WITH a,b MATCH (a)-[r:MemberOf]-(b) RETURN a,r,b", {domain: this.state.label})
|
emitter.emit('query', "MATCH (a:Group) WHERE NOT a.name ENDS WITH ('@' + {domain}) WITH a MATCH (b:Group) WHERE b.name ENDS WITH ('@' + {domain}) WITH a,b MATCH (a)-[r:MemberOf]-(b) RETURN a,r,b", {domain: this.state.label});
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Foreign Admins
|
Foreign Admins
|
||||||
|
@ -174,8 +179,9 @@ export default class DomainNodeData extends Component {
|
||||||
ready={this.state.foreignAdmins !== -1}
|
ready={this.state.foreignAdmins !== -1}
|
||||||
value={this.state.foreignAdmins}
|
value={this.state.foreignAdmins}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH (a:Group) WHERE NOT a.name ENDS WITH ('@' + {domain}) WITH a MATCH (b:Group) WHERE b.name ENDS WITH ('@' + {domain}) WITH a,b MATCH (a)-[r:MemberOf]-(b) RETURN a,r,b", {domain: this.state.label})
|
emitter.emit('query', "MATCH (a:Group) WHERE NOT a.name ENDS WITH ('@' + {domain}) WITH a MATCH (b:Group) WHERE b.name ENDS WITH ('@' + {domain}) WITH a,b MATCH (a)-[r:MemberOf]-(b) RETURN a,r,b", {domain: this.state.label});
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<br />
|
<br />
|
||||||
<dt>
|
<dt>
|
||||||
|
@ -186,8 +192,9 @@ export default class DomainNodeData extends Component {
|
||||||
ready={this.state.firstDegreeInboundTrusts !== -1}
|
ready={this.state.firstDegreeInboundTrusts !== -1}
|
||||||
value={this.state.firstDegreeInboundTrusts}
|
value={this.state.firstDegreeInboundTrusts}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH (a:Domain {name:{domain}})<-[r:TrustedBy]-(b:Domain) RETURN a,r,b", {domain: this.state.label})
|
emitter.emit('query', "MATCH (a:Domain {name:{domain}})<-[r:TrustedBy]-(b:Domain) RETURN a,r,b", {domain: this.state.label});
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Effective Inbound Trusts
|
Effective Inbound Trusts
|
||||||
|
@ -197,8 +204,9 @@ export default class DomainNodeData extends Component {
|
||||||
ready={this.state.effectiveInboundTrusts !== -1}
|
ready={this.state.effectiveInboundTrusts !== -1}
|
||||||
value={this.state.effectiveInboundTrusts}
|
value={this.state.effectiveInboundTrusts}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p=shortestPath((a:Domain {name:{domain}})<-[r:TrustedBy*1..]-(b:Domain)) RETURN p", {domain: this.state.label})
|
emitter.emit('query', "MATCH (b:Domain) WHERE NOT b.name={domain} WITH b MATCH p=shortestPath((a:Domain {name:{domain}})<-[r:TrustedBy*1..]-(b)) RETURN p", {domain: this.state.label});
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Outbound Trusts
|
Outbound Trusts
|
||||||
|
@ -208,8 +216,9 @@ export default class DomainNodeData extends Component {
|
||||||
ready={this.state.firstDegreeOutboundTrusts !== -1}
|
ready={this.state.firstDegreeOutboundTrusts !== -1}
|
||||||
value={this.state.firstDegreeOutboundTrusts}
|
value={this.state.firstDegreeOutboundTrusts}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH (a:Domain {name:{domain}})-[r:TrustedBy]->(b:Domain) RETURN a,r,b", {domain: this.state.label})
|
emitter.emit('query', "MATCH (a:Domain {name:{domain}})-[r:TrustedBy]->(b:Domain) RETURN a,r,b", {domain: this.state.label});
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Effective Outbound Trusts
|
Effective Outbound Trusts
|
||||||
|
@ -219,8 +228,9 @@ export default class DomainNodeData extends Component {
|
||||||
ready={this.state.effectiveOutboundTrusts !== -1}
|
ready={this.state.effectiveOutboundTrusts !== -1}
|
||||||
value={this.state.effectiveOutboundTrusts}
|
value={this.state.effectiveOutboundTrusts}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p=shortestPath((a:Domain {name:{domain}})-[r:TrustedBy*1..]->(b:Domain)) RETURN p", {domain: this.state.label})
|
emitter.emit('query', "MATCH (b:Domain) WHERE NOT b.name={domain} WITH b MATCH p=shortestPath((a:Domain {name:{domain}})-[r:TrustedBy*1..]->(b:Domain)) RETURN p", {domain: this.state.label});
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
|
@ -230,4 +240,4 @@ export default class DomainNodeData extends Component {
|
||||||
|
|
||||||
DomainNodeData.propTypes = {
|
DomainNodeData.propTypes = {
|
||||||
visible : React.PropTypes.bool.isRequired
|
visible : React.PropTypes.bool.isRequired
|
||||||
}
|
};
|
|
@ -1,6 +1,6 @@
|
||||||
import React, { Component } from 'react';
|
import React, { Component } from 'react';
|
||||||
import NodeALink from './NodeALink'
|
import NodeALink from './NodeALink';
|
||||||
import PropTypes from 'prop-types'
|
import PropTypes from 'prop-types';
|
||||||
|
|
||||||
export default class GroupNodeData extends Component {
|
export default class GroupNodeData extends Component {
|
||||||
constructor(){
|
constructor(){
|
||||||
|
@ -25,7 +25,7 @@ export default class GroupNodeData extends Component {
|
||||||
unrolledControllers: -1,
|
unrolledControllers: -1,
|
||||||
transitiveControllers: -1,
|
transitiveControllers: -1,
|
||||||
driversessions: []
|
driversessions: []
|
||||||
}
|
};
|
||||||
|
|
||||||
emitter.on('groupNodeClicked', this.getNodeData.bind(this));
|
emitter.on('groupNodeClicked', this.getNodeData.bind(this));
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ export default class GroupNodeData extends Component {
|
||||||
getNodeData(payload){
|
getNodeData(payload){
|
||||||
$.each(this.state.driversessions, function(index, record){
|
$.each(this.state.driversessions, function(index, record){
|
||||||
record.close();
|
record.close();
|
||||||
})
|
});
|
||||||
|
|
||||||
this.setState({
|
this.setState({
|
||||||
label: payload,
|
label: payload,
|
||||||
|
@ -53,127 +53,127 @@ export default class GroupNodeData extends Component {
|
||||||
firstDegreeControllers: -1,
|
firstDegreeControllers: -1,
|
||||||
unrolledControllers: -1,
|
unrolledControllers: -1,
|
||||||
transitiveControllers: -1
|
transitiveControllers: -1
|
||||||
})
|
});
|
||||||
|
|
||||||
var domain = '@' + payload.split('@').last()
|
var domain = '@' + payload.split('@').last();
|
||||||
var s1 = driver.session()
|
var s1 = driver.session();
|
||||||
var s2 = driver.session()
|
var s2 = driver.session();
|
||||||
var s3 = driver.session()
|
var s3 = driver.session();
|
||||||
var s4 = driver.session()
|
var s4 = driver.session();
|
||||||
var s5 = driver.session()
|
var s5 = driver.session();
|
||||||
var s6 = driver.session()
|
var s6 = driver.session();
|
||||||
var s7 = driver.session()
|
var s7 = driver.session();
|
||||||
var s8 = driver.session()
|
var s8 = driver.session();
|
||||||
var s9 = driver.session()
|
var s9 = driver.session();
|
||||||
var s10 = driver.session()
|
var s10 = driver.session();
|
||||||
var s11 = driver.session()
|
var s11 = driver.session();
|
||||||
var s12 = driver.session()
|
var s12 = driver.session();
|
||||||
var s13 = driver.session()
|
var s13 = driver.session();
|
||||||
var s14 = driver.session()
|
var s14 = driver.session();
|
||||||
var s15 = driver.session()
|
var s15 = driver.session();
|
||||||
var s16 = driver.session()
|
var s16 = driver.session();
|
||||||
|
|
||||||
s1.run("MATCH (a)-[b:MemberOf]->(c:Group {name:{name}}) RETURN count(a)", {name:payload})
|
s1.run("MATCH (a)-[b:MemberOf]->(c:Group {name:{name}}) RETURN count(a)", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'directMembers':result.records[0]._fields[0].low})
|
this.setState({'directMembers':result.records[0]._fields[0].low});
|
||||||
s1.close()
|
s1.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s2.run("MATCH p = (n)-[r:MemberOf*1..]->(g:Group {name:{name}}) RETURN COUNT(n)", {name:payload})
|
s2.run("MATCH p = (n)-[r:MemberOf*1..]->(g:Group {name:{name}}) RETURN COUNT(n)", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'unrolledMembers':result.records[0]._fields[0].low})
|
this.setState({'unrolledMembers':result.records[0]._fields[0].low});
|
||||||
s2.close()
|
s2.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s3.run("MATCH (n:Group {name:{name}})-[r:AdminTo]->(m:Computer) RETURN count(distinct(m))", {name:payload})
|
s3.run("MATCH (n:Group {name:{name}})-[r:AdminTo]->(m:Computer) RETURN count(distinct(m))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'directAdminTo':result.records[0]._fields[0].low})
|
this.setState({'directAdminTo':result.records[0]._fields[0].low});
|
||||||
s3.close()
|
s3.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s4.run("MATCH p = shortestPath((g:Group {name:{name}})-[r:MemberOf|AdminTo|HasSession*1..]->(c:Computer)) RETURN COUNT(DISTINCT(c))", {name:payload})
|
s4.run("MATCH (c:Computer) WHERE NOT c.name={name} WITH c MATCH p = shortestPath((g:Group {name:{name}})-[r:MemberOf|AdminTo|HasSession*1..]->(c)) RETURN COUNT(DISTINCT(c))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'derivativeAdminTo':result.records[0]._fields[0].low})
|
this.setState({'derivativeAdminTo':result.records[0]._fields[0].low});
|
||||||
s4.close()
|
s4.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s5.run("MATCH p = (g1:Group {name:{name}})-[r:MemberOf*1..]->(g2:Group) RETURN COUNT(DISTINCT(g2))", {name:payload})
|
s5.run("MATCH p = (g1:Group {name:{name}})-[r:MemberOf*1..]->(g2:Group) RETURN COUNT(DISTINCT(g2))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'unrolledMemberOf':result.records[0]._fields[0].low})
|
this.setState({'unrolledMemberOf':result.records[0]._fields[0].low});
|
||||||
s5.close()
|
s5.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s6.run("MATCH p = (c:Computer)-[r1:HasSession]->(u:User)-[r2:MemberOf*1..]->(g:Group {name: {name}}) RETURN COUNT(r1)", {name:payload})
|
s6.run("MATCH p = (c:Computer)-[r1:HasSession]->(u:User)-[r2:MemberOf*1..]->(g:Group {name: {name}}) RETURN COUNT(r1)", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'sessions':result.records[0]._fields[0].low})
|
this.setState({'sessions':result.records[0]._fields[0].low});
|
||||||
s6.close()
|
s6.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s7.run("MATCH (n:Group) WHERE NOT n.name ENDS WITH {domain} WITH n MATCH (m:Group {name:{name}}) MATCH (m)-[r:MemberOf]->(n) RETURN count(n)", {name:payload, domain:domain})
|
s7.run("MATCH (n:Group) WHERE NOT n.name ENDS WITH {domain} WITH n MATCH (m:Group {name:{name}}) MATCH (m)-[r:MemberOf]->(n) RETURN count(n)", {name:payload, domain:domain})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'foreignGroupMembership':result.records[0]._fields[0].low})
|
this.setState({'foreignGroupMembership':result.records[0]._fields[0].low});
|
||||||
s7.close()
|
s7.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s8.run("MATCH p = (n)-[r:MemberOf*1..]->(g:Group {name:{name}}) WHERE NOT g.domain = n.domain RETURN COUNT(DISTINCT(n))", {name:payload})
|
s8.run("MATCH p = (n)-[r:MemberOf*1..]->(g:Group {name:{name}}) WHERE NOT g.domain = n.domain RETURN COUNT(DISTINCT(n))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'foreignGroupMembers':result.records[0]._fields[0].low})
|
this.setState({'foreignGroupMembers':result.records[0]._fields[0].low});
|
||||||
s8.close()
|
s8.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s9.run("MATCH p = (g1:Group {name:{name}})-[r:MemberOf]->(g2:Group) RETURN COUNT(DISTINCT(g2))", {name:payload})
|
s9.run("MATCH p = (g1:Group {name:{name}})-[r:MemberOf]->(g2:Group) RETURN COUNT(DISTINCT(g2))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'firstDegreeGroupMembership':result.records[0]._fields[0].low})
|
this.setState({'firstDegreeGroupMembership':result.records[0]._fields[0].low});
|
||||||
s9.close()
|
s9.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s10.run("MATCH p = (g1:Group {name:{name}})-[r1:MemberOf*1..]->(g2:Group)-[r2:AdminTo]->(c:Computer) RETURN COUNT(DISTINCT(c))", {name:payload})
|
s10.run("MATCH p = (g1:Group {name:{name}})-[r1:MemberOf*1..]->(g2:Group)-[r2:AdminTo]->(c:Computer) RETURN COUNT(DISTINCT(c))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'groupDelegatedAdmin':result.records[0]._fields[0].low})
|
this.setState({'groupDelegatedAdmin':result.records[0]._fields[0].low});
|
||||||
s10.close()
|
s10.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s11.run("MATCH p = (g:Group {name:{name}})-[r:AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(n) RETURN COUNT(DISTINCT(n))", {name:payload})
|
s11.run("MATCH p = (g:Group {name:{name}})-[r:AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(n) RETURN COUNT(DISTINCT(n))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'firstdegreeControl':result.records[0]._fields[0].low})
|
this.setState({'firstdegreeControl':result.records[0]._fields[0].low});
|
||||||
s11.close()
|
s11.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s12.run("MATCH p = (g1:Group {name:{name}})-[r1:MemberOf*1..]->(g2:Group)-[r2:AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(n) RETURN COUNT(DISTINCT(n))", {name:payload})
|
s12.run("MATCH p = (g1:Group {name:{name}})-[r1:MemberOf*1..]->(g2:Group)-[r2:AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(n) RETURN COUNT(DISTINCT(n))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'groupDelegatedControl':result.records[0]._fields[0].low})
|
this.setState({'groupDelegatedControl':result.records[0]._fields[0].low});
|
||||||
s12.close()
|
s12.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s13.run("MATCH p = shortestPath((g:Group {name:{name}})-[r:MemberOf|AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner*1..]->(n)) RETURN COUNT(DISTINCT(n))", {name:payload})
|
s13.run("MATCH (n) WHERE NOT n.name={name} WITH n MATCH p = shortestPath((g:Group {name:{name}})-[r:MemberOf|AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner*1..]->(n)) RETURN COUNT(DISTINCT(n))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'transitiveControl':result.records[0]._fields[0].low})
|
this.setState({'transitiveControl':result.records[0]._fields[0].low});
|
||||||
s13.close()
|
s13.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s14.run("MATCH p = (n)-[r:AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(g:Group {name:{name}}) RETURN COUNT(DISTINCT(n))", {name:payload})
|
s14.run("MATCH p = (n)-[r:AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(g:Group {name:{name}}) RETURN COUNT(DISTINCT(n))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'firstDegreeControllers':result.records[0]._fields[0].low})
|
this.setState({'firstDegreeControllers':result.records[0]._fields[0].low});
|
||||||
s14.close()
|
s14.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s15.run("MATCH p = (n1)-[r:MemberOf*1..]->(g1:Group)-[r1:AddMembers|AllExtendedRights|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(g2:Group {name: {name}}) WITH LENGTH(p) as pathLength, p, n1 WHERE NONE (x in NODES(p)[1..(pathLength-1)] WHERE x.name = g2.name) AND NOT n1.name = g2.name RETURN COUNT(DISTINCT(n1))", {name:payload})
|
s15.run("MATCH p = (n1)-[r:MemberOf*1..]->(g1:Group)-[r1:AddMembers|AllExtendedRights|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(g2:Group {name: {name}}) WITH LENGTH(p) as pathLength, p, n1 WHERE NONE (x in NODES(p)[1..(pathLength-1)] WHERE x.name = g2.name) AND NOT n1.name = g2.name RETURN COUNT(DISTINCT(n1))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'unrolledControllers':result.records[0]._fields[0].low})
|
this.setState({'unrolledControllers':result.records[0]._fields[0].low});
|
||||||
s15.close()
|
s15.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s16.run("MATCH p = shortestPath((n)-[r:MemberOf|AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner*1..]->(g:Group {name:{name}})) RETURN COUNT(DISTINCT(n))", {name:payload})
|
s16.run("MATCH (n) WHERE NOT n.name={name} WITH n MATCH p = shortestPath((n)-[r:MemberOf|AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner*1..]->(g:Group {name:{name}})) RETURN COUNT(DISTINCT(n))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'transitiveControllers':result.records[0]._fields[0].low})
|
this.setState({'transitiveControllers':result.records[0]._fields[0].low});
|
||||||
s16.close()
|
s16.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
this.setState({'driversessions': [s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16]})
|
this.setState({'driversessions': [s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16]});
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
var domain = '@' + this.state.label.split('@')
|
var domain = '@' + this.state.label.split('@');
|
||||||
return (
|
return (
|
||||||
<div className={this.props.visible ? "" : "displaynone"}>
|
<div className={this.props.visible ? "" : "displaynone"}>
|
||||||
<dl className='dl-horizontal'>
|
<dl className='dl-horizontal'>
|
||||||
|
@ -193,8 +193,9 @@ export default class GroupNodeData extends Component {
|
||||||
value={this.state.sessions}
|
value={this.state.sessions}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = (c:Computer)-[r1:HasSession]->(u:User)-[r2:MemberOf*1..]->(g:Group {name: {name}}) RETURN p", {name: this.state.label},
|
emitter.emit('query', "MATCH p = (c:Computer)-[r1:HasSession]->(u:User)-[r2:MemberOf*1..]->(g:Group {name: {name}}) RETURN p", {name: this.state.label},
|
||||||
"",this.state.label)
|
"",this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<br />
|
<br />
|
||||||
<h4>Group Members</h4>
|
<h4>Group Members</h4>
|
||||||
|
@ -206,8 +207,9 @@ export default class GroupNodeData extends Component {
|
||||||
ready={this.state.directMembers !== -1}
|
ready={this.state.directMembers !== -1}
|
||||||
value={this.state.directMembers}
|
value={this.state.directMembers}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH (n)-[r:MemberOf]->(m:Group {name:{name}}) RETURN n,r,m", {name: this.state.label})
|
emitter.emit('query', "MATCH (n)-[r:MemberOf]->(m:Group {name:{name}}) RETURN n,r,m", {name: this.state.label});
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Unrolled Members
|
Unrolled Members
|
||||||
|
@ -218,8 +220,9 @@ export default class GroupNodeData extends Component {
|
||||||
value={this.state.unrolledMembers}
|
value={this.state.unrolledMembers}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = (n)-[r:MemberOf*1..]->(g:Group {name:{name}}) RETURN p", {name: this.state.label},
|
emitter.emit('query', "MATCH p = (n)-[r:MemberOf*1..]->(g:Group {name:{name}}) RETURN p", {name: this.state.label},
|
||||||
this.state.label)
|
this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Foreign Members
|
Foreign Members
|
||||||
|
@ -230,8 +233,9 @@ export default class GroupNodeData extends Component {
|
||||||
value={this.state.foreignGroupMembers}
|
value={this.state.foreignGroupMembers}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = (n)-[r:MemberOf*1..]->(g:Group {name:{name}}) WHERE NOT g.domain = n.domain RETURN p", {name: this.state.label},
|
emitter.emit('query', "MATCH p = (n)-[r:MemberOf*1..]->(g:Group {name:{name}}) WHERE NOT g.domain = n.domain RETURN p", {name: this.state.label},
|
||||||
this.state.label)
|
this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<br />
|
<br />
|
||||||
<h4>Group Membership</h4>
|
<h4>Group Membership</h4>
|
||||||
|
@ -244,8 +248,9 @@ export default class GroupNodeData extends Component {
|
||||||
value={this.state.firstDegreeGroupMembership}
|
value={this.state.firstDegreeGroupMembership}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = (g1:Group {name:{name}})-[r:MemberOf]->(g2:Group) RETURN p", {name: this.state.label},
|
emitter.emit('query', "MATCH p = (g1:Group {name:{name}})-[r:MemberOf]->(g2:Group) RETURN p", {name: this.state.label},
|
||||||
this.state.label)
|
this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Unrolled Member Of
|
Unrolled Member Of
|
||||||
|
@ -256,8 +261,9 @@ export default class GroupNodeData extends Component {
|
||||||
value={this.state.unrolledMemberOf}
|
value={this.state.unrolledMemberOf}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = (g1:Group {name:{name}})-[r:MemberOf*1..]->(g2:Group) RETURN p", {name: this.state.label},
|
emitter.emit('query', "MATCH p = (g1:Group {name:{name}})-[r:MemberOf*1..]->(g2:Group) RETURN p", {name: this.state.label},
|
||||||
this.state.label)
|
this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Foreign Group Membership
|
Foreign Group Membership
|
||||||
|
@ -267,8 +273,9 @@ export default class GroupNodeData extends Component {
|
||||||
ready={this.state.foreignGroupMembership !== -1}
|
ready={this.state.foreignGroupMembership !== -1}
|
||||||
value={this.state.foreignGroupMembership}
|
value={this.state.foreignGroupMembership}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH (n:Group) WHERE NOT n.name ENDS WITH {domain} WITH n MATCH (m:Group {name:{name}}) MATCH (m)-[r:MemberOf]->(n) RETURN m,r,n", {name: this.state.label, domain: domain})
|
emitter.emit('query', "MATCH (n:Group) WHERE NOT n.name ENDS WITH {domain} WITH n MATCH (m:Group {name:{name}}) MATCH (m)-[r:MemberOf]->(n) RETURN m,r,n", {name: this.state.label, domain: domain});
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<br />
|
<br />
|
||||||
<h4>Local Admin Rights</h4>
|
<h4>Local Admin Rights</h4>
|
||||||
|
@ -281,8 +288,9 @@ export default class GroupNodeData extends Component {
|
||||||
value={this.state.directAdminTo}
|
value={this.state.directAdminTo}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p=(g:Group {name:{name}})-[r:AdminTo]->(c:Computer) RETURN p", {name: this.state.label},
|
emitter.emit('query', "MATCH p=(g:Group {name:{name}})-[r:AdminTo]->(c:Computer) RETURN p", {name: this.state.label},
|
||||||
this.state.label)
|
this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Group Delegated Local Admin Rights
|
Group Delegated Local Admin Rights
|
||||||
|
@ -293,8 +301,9 @@ export default class GroupNodeData extends Component {
|
||||||
value={this.state.groupDelegatedAdmin}
|
value={this.state.groupDelegatedAdmin}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = (g1:Group {name:{name}})-[r1:MemberOf*1..]->(g2:Group)-[r2:AdminTo]->(c:Computer) RETURN p", {name: this.state.label},
|
emitter.emit('query', "MATCH p = (g1:Group {name:{name}})-[r1:MemberOf*1..]->(g2:Group)-[r2:AdminTo]->(c:Computer) RETURN p", {name: this.state.label},
|
||||||
this.state.label)
|
this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Derivative Local Admin Rights
|
Derivative Local Admin Rights
|
||||||
|
@ -304,9 +313,10 @@ export default class GroupNodeData extends Component {
|
||||||
ready={this.state.derivativeAdminTo !== -1}
|
ready={this.state.derivativeAdminTo !== -1}
|
||||||
value={this.state.derivativeAdminTo}
|
value={this.state.derivativeAdminTo}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = shortestPath((g:Group {name:{name}})-[r:MemberOf|AdminTo|HasSession*1..]->(c:Computer)) RETURN p", {name: this.state.label},
|
emitter.emit('query', "MATCH (c:Computer) WHERE NOT c.name={name} WITH c MATCH p = shortestPath((g:Group {name:{name}})-[r:MemberOf|AdminTo|HasSession*1..]->(c)) RETURN p", {name: this.state.label},
|
||||||
this.state.label)
|
this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<br />
|
<br />
|
||||||
<h4>Outbound Object Control</h4>
|
<h4>Outbound Object Control</h4>
|
||||||
|
@ -318,8 +328,9 @@ export default class GroupNodeData extends Component {
|
||||||
ready={this.state.firstdegreeControl !== -1}
|
ready={this.state.firstdegreeControl !== -1}
|
||||||
value={this.state.firstdegreeControl}
|
value={this.state.firstdegreeControl}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = (g:Group {name:{name}})-[r1:AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(n) RETURN p", {name:this.state.label})
|
emitter.emit('query', "MATCH p = (g:Group {name:{name}})-[r1:AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(n) RETURN p", {name:this.state.label});
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Group Delegated Object Control
|
Group Delegated Object Control
|
||||||
|
@ -330,8 +341,9 @@ export default class GroupNodeData extends Component {
|
||||||
value={this.state.groupDelegatedControl}
|
value={this.state.groupDelegatedControl}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = (g1:Group {name:{name}})-[r1:MemberOf*1..]->(g2:Group)-[r2:AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(n) RETURN p", {name:this.state.label}
|
emitter.emit('query', "MATCH p = (g1:Group {name:{name}})-[r1:MemberOf*1..]->(g2:Group)-[r2:AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(n) RETURN p", {name:this.state.label}
|
||||||
,this.state.label)
|
,this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Transitive Object Control
|
Transitive Object Control
|
||||||
|
@ -341,9 +353,10 @@ export default class GroupNodeData extends Component {
|
||||||
ready={this.state.transitiveControl !== -1}
|
ready={this.state.transitiveControl !== -1}
|
||||||
value={this.state.transitiveControl}
|
value={this.state.transitiveControl}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = shortestPath((g:Group {name:{name}})-[r1:MemberOf|AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner*1..]->(n)) RETURN p", {name:this.state.label}
|
emitter.emit('query', "MATCH (n) WHERE NOT n.name={name} WITH n MATCH p = shortestPath((g:Group {name:{name}})-[r1:MemberOf|AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner*1..]->(n)) RETURN p", {name:this.state.label}
|
||||||
,this.state.label)
|
,this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<br />
|
<br />
|
||||||
<h4>Inbound Object Control</h4>
|
<h4>Inbound Object Control</h4>
|
||||||
|
@ -356,8 +369,9 @@ export default class GroupNodeData extends Component {
|
||||||
value={this.state.firstDegreeControllers}
|
value={this.state.firstDegreeControllers}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = (n)-[r:AddMembers|AllExtendedRights|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(g:Group {name: {name}}) RETURN p", {name:this.state.label}
|
emitter.emit('query', "MATCH p = (n)-[r:AddMembers|AllExtendedRights|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(g:Group {name: {name}}) RETURN p", {name:this.state.label}
|
||||||
,this.state.label)
|
,this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Unrolled Object Controllers
|
Unrolled Object Controllers
|
||||||
|
@ -368,8 +382,9 @@ export default class GroupNodeData extends Component {
|
||||||
value={this.state.unrolledControllers}
|
value={this.state.unrolledControllers}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = (n1)-[r:MemberOf*1..]->(g1:Group)-[r1:AddMembers|AllExtendedRights|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(g2:Group {name: {name}}) WITH LENGTH(p) as pathLength, p, n1 WHERE NONE (x in NODES(p)[1..(pathLength-1)] WHERE x.name = g2.name) AND NOT n1.name = g2.name RETURN p", {name:this.state.label}
|
emitter.emit('query', "MATCH p = (n1)-[r:MemberOf*1..]->(g1:Group)-[r1:AddMembers|AllExtendedRights|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(g2:Group {name: {name}}) WITH LENGTH(p) as pathLength, p, n1 WHERE NONE (x in NODES(p)[1..(pathLength-1)] WHERE x.name = g2.name) AND NOT n1.name = g2.name RETURN p", {name:this.state.label}
|
||||||
,this.state.label)
|
,this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Transitive Object Controllers
|
Transitive Object Controllers
|
||||||
|
@ -379,9 +394,10 @@ export default class GroupNodeData extends Component {
|
||||||
ready={this.state.transitiveControllers !== -1}
|
ready={this.state.transitiveControllers !== -1}
|
||||||
value={this.state.transitiveControllers}
|
value={this.state.transitiveControllers}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = shortestPath((n)-[r:MemberOf|AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner*1..]->(g:Group {name: {name}})) RETURN p", {name:this.state.label}
|
emitter.emit('query', "MATCH (n) WHERE NOT n.name={name} WITH n MATCH p = shortestPath((n)-[r:MemberOf|AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner*1..]->(g:Group {name: {name}})) RETURN p", {name:this.state.label}
|
||||||
,this.state.label)
|
,this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
|
@ -391,4 +407,4 @@ export default class GroupNodeData extends Component {
|
||||||
|
|
||||||
GroupNodeData.propTypes = {
|
GroupNodeData.propTypes = {
|
||||||
visible : React.PropTypes.bool.isRequired
|
visible : React.PropTypes.bool.isRequired
|
||||||
}
|
};
|
|
@ -1,6 +1,6 @@
|
||||||
import React, { Component } from 'react';
|
import React, { Component } from 'react';
|
||||||
import NodeALink from './NodeALink'
|
import NodeALink from './NodeALink';
|
||||||
import PropTypes from 'prop-types'
|
import PropTypes from 'prop-types';
|
||||||
|
|
||||||
export default class UserNodeData extends Component {
|
export default class UserNodeData extends Component {
|
||||||
constructor(){
|
constructor(){
|
||||||
|
@ -25,7 +25,7 @@ export default class UserNodeData extends Component {
|
||||||
unrolledControl: -1,
|
unrolledControl: -1,
|
||||||
transitiveControl: -1,
|
transitiveControl: -1,
|
||||||
driversessions : []
|
driversessions : []
|
||||||
}
|
};
|
||||||
|
|
||||||
emitter.on('userNodeClicked', this.getNodeData.bind(this));
|
emitter.on('userNodeClicked', this.getNodeData.bind(this));
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ export default class UserNodeData extends Component {
|
||||||
getNodeData(payload){
|
getNodeData(payload){
|
||||||
$.each(this.state.driversessions,function(index, record){
|
$.each(this.state.driversessions,function(index, record){
|
||||||
record.close();
|
record.close();
|
||||||
})
|
});
|
||||||
|
|
||||||
this.setState({
|
this.setState({
|
||||||
label: payload,
|
label: payload,
|
||||||
|
@ -53,107 +53,107 @@ export default class UserNodeData extends Component {
|
||||||
firstdegreeControl: -1,
|
firstdegreeControl: -1,
|
||||||
unrolledControl: -1,
|
unrolledControl: -1,
|
||||||
transitiveControl: -1
|
transitiveControl: -1
|
||||||
})
|
});
|
||||||
|
|
||||||
var domain = '@' + payload.split('@').last()
|
var domain = '@' + payload.split('@').last();
|
||||||
|
|
||||||
var s1 = driver.session()
|
var s1 = driver.session();
|
||||||
var s2 = driver.session()
|
var s2 = driver.session();
|
||||||
var s3 = driver.session()
|
var s3 = driver.session();
|
||||||
var s4 = driver.session()
|
var s4 = driver.session();
|
||||||
var s5 = driver.session()
|
var s5 = driver.session();
|
||||||
var s6 = driver.session()
|
var s6 = driver.session();
|
||||||
var s7 = driver.session()
|
var s7 = driver.session();
|
||||||
var s8 = driver.session()
|
var s8 = driver.session();
|
||||||
var s9 = driver.session()
|
var s9 = driver.session();
|
||||||
var s10 = driver.session()
|
var s10 = driver.session();
|
||||||
var s11 = driver.session()
|
var s11 = driver.session();
|
||||||
var s12 = driver.session()
|
var s12 = driver.session();
|
||||||
var s13 = driver.session()
|
var s13 = driver.session();
|
||||||
|
|
||||||
s1.run("MATCH (n:Group) WHERE NOT n.name ENDS WITH {domain} WITH n MATCH (m:User {name:{name}}) MATCH (m)-[r:MemberOf*1..]->(n) RETURN count(n)", {name:payload, domain: domain})
|
s1.run("MATCH (n:Group) WHERE NOT n.name ENDS WITH {domain} WITH n MATCH (m:User {name:{name}}) MATCH (m)-[r:MemberOf*1..]->(n) RETURN count(n)", {name:payload, domain: domain})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'foreignGroupMembership':result.records[0]._fields[0].low})
|
this.setState({'foreignGroupMembership':result.records[0]._fields[0].low});
|
||||||
s1.close()
|
s1.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s2.run("MATCH (n:User {name:{name}}), (m:Group), p=(n)-[:MemberOf]->(m) RETURN count(m)", {name:payload})
|
s2.run("MATCH (n:User {name:{name}}), (m:Group), p=(n)-[:MemberOf]->(m) RETURN count(m)", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'firstDegreeGroupMembership':result.records[0]._fields[0].low})
|
this.setState({'firstDegreeGroupMembership':result.records[0]._fields[0].low});
|
||||||
s2.close()
|
s2.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s3.run("MATCH p = (n:User {name:{name}})-[r:MemberOf*1..]->(g:Group) RETURN COUNT(DISTINCT(g))", {name:payload})
|
s3.run("MATCH p = (n:User {name:{name}})-[r:MemberOf*1..]->(g:Group) RETURN COUNT(DISTINCT(g))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'unrolledGroupMembership':result.records[0]._fields[0].low})
|
this.setState({'unrolledGroupMembership':result.records[0]._fields[0].low});
|
||||||
s3.close()
|
s3.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s4.run("MATCH p = (n:User {name:{name}})-[r:AdminTo]->(c:Computer) RETURN COUNT(DISTINCT(c))", {name:payload})
|
s4.run("MATCH p = (n:User {name:{name}})-[r:AdminTo]->(c:Computer) RETURN COUNT(DISTINCT(c))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'firstDegreeLocalAdmin':result.records[0]._fields[0].low})
|
this.setState({'firstDegreeLocalAdmin':result.records[0]._fields[0].low});
|
||||||
s4.close()
|
s4.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s5.run("MATCH p=(n:User {name:{name}})-[r1:MemberOf*1..]->(g:Group)-[r2:AdminTo]->(c:Computer) RETURN count(distinct(c))", {name:payload})
|
s5.run("MATCH p=(n:User {name:{name}})-[r1:MemberOf*1..]->(g:Group)-[r2:AdminTo]->(c:Computer) RETURN count(distinct(c))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'groupDelegatedLocalAdmin':result.records[0]._fields[0].low})
|
this.setState({'groupDelegatedLocalAdmin':result.records[0]._fields[0].low});
|
||||||
s5.close()
|
s5.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s6.run("MATCH p = shortestPath((n:User {name:{name}})-[r:HasSession|AdminTo|MemberOf*1..]->(c:Computer)) RETURN COUNT(c)", {name:payload})
|
s6.run("MATCH (c:Computer) WHERE NOT c.name={name} WITH c MATCH p = shortestPath((n:User {name:{name}})-[r:HasSession|AdminTo|MemberOf*1..]->(c)) RETURN COUNT(c)", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'derivativeLocalAdmin':result.records[0]._fields[0].low})
|
this.setState({'derivativeLocalAdmin':result.records[0]._fields[0].low});
|
||||||
s6.close()
|
s6.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s7.run("MATCH p = (n:Computer)-[r:HasSession]->(m:User {name:{name}}) RETURN COUNT(DISTINCT(n))", {name:payload})
|
s7.run("MATCH p = (n:Computer)-[r:HasSession]->(m:User {name:{name}}) RETURN COUNT(DISTINCT(n))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'sessions':result.records[0]._fields[0].low})
|
this.setState({'sessions':result.records[0]._fields[0].low});
|
||||||
s7.close()
|
s7.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s8.run("MATCH p = (n)-[r:AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(u1:User {name: {name}}) RETURN COUNT(DISTINCT(n))", {name:payload})
|
s8.run("MATCH p = (n)-[r:AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(u1:User {name: {name}}) RETURN COUNT(DISTINCT(n))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'firstdegreeControllers':result.records[0]._fields[0].low})
|
this.setState({'firstdegreeControllers':result.records[0]._fields[0].low});
|
||||||
s8.close()
|
s8.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s9.run("MATCH p = (n1)-[r:MemberOf*1..]->(g:Group)-[r1:AddMembers|AllExtendedRights|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(u:User {name: {name}}) WITH LENGTH(p) as pathLength, p, n1 WHERE NONE (x in NODES(p)[1..(pathLength-1)] WHERE x.name = u.name) AND NOT n1.name = u.name RETURN COUNT(DISTINCT(n1))", {name:payload})
|
s9.run("MATCH p = (n1)-[r:MemberOf*1..]->(g:Group)-[r1:AddMembers|AllExtendedRights|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(u:User {name: {name}}) WITH LENGTH(p) as pathLength, p, n1 WHERE NONE (x in NODES(p)[1..(pathLength-1)] WHERE x.name = u.name) AND NOT n1.name = u.name RETURN COUNT(DISTINCT(n1))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'unrolledControllers':result.records[0]._fields[0].low})
|
this.setState({'unrolledControllers':result.records[0]._fields[0].low});
|
||||||
s9.close()
|
s9.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s10.run("MATCH p = shortestPath((n1)-[r1:MemberOf|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner*1..]->(u1:User {name: {name}})) RETURN COUNT(DISTINCT(n1))", {name:payload})
|
s10.run("MATCH (n1) WHERE NOT n1.name={name} WITH n1 MATCH p = shortestPath((n1)-[r1:MemberOf|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner*1..]->(u1:User {name: {name}})) RETURN COUNT(DISTINCT(n1))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'transitiveControllers':result.records[0]._fields[0].low})
|
this.setState({'transitiveControllers':result.records[0]._fields[0].low});
|
||||||
s10.close()
|
s10.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s11.run("MATCH p = (u:User {name:{name}})-[r1:AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(n) RETURN COUNT(DISTINCT(n))", {name:payload})
|
s11.run("MATCH p = (u:User {name:{name}})-[r1:AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(n) RETURN COUNT(DISTINCT(n))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'firstdegreeControl':result.records[0]._fields[0].low})
|
this.setState({'firstdegreeControl':result.records[0]._fields[0].low});
|
||||||
s11.close()
|
s11.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s12.run("MATCH p = (u:User {name:{name}})-[r1:MemberOf*1..]->(g:Group)-[r2:AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(n) RETURN COUNT(DISTINCT(n))", {name:payload})
|
s12.run("MATCH p = (u:User {name:{name}})-[r1:MemberOf*1..]->(g:Group)-[r2:AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(n) RETURN COUNT(DISTINCT(n))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'unrolledControl':result.records[0]._fields[0].low})
|
this.setState({'unrolledControl':result.records[0]._fields[0].low});
|
||||||
s12.close()
|
s12.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
s13.run("MATCH p = shortestPath((u:User {name:{name}})-[r1:MemberOf|AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner*1..]->(n)) RETURN COUNT(DISTINCT(n))", {name:payload})
|
s13.run("MATCH (n) WHERE NOT n.name={name} WITH n MATCH p = shortestPath((u:User {name:{name}})-[r1:MemberOf|AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner*1..]->(n)) RETURN COUNT(DISTINCT(n))", {name:payload})
|
||||||
.then(function(result){
|
.then(function(result){
|
||||||
this.setState({'transitiveControl':result.records[0]._fields[0].low})
|
this.setState({'transitiveControl':result.records[0]._fields[0].low});
|
||||||
s13.close()
|
s13.close();
|
||||||
}.bind(this))
|
}.bind(this));
|
||||||
|
|
||||||
this.setState({'driversessions': [s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13]})
|
this.setState({'driversessions': [s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13]});
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
var domain = '@' + this.state.label.split('@').last()
|
var domain = '@' + this.state.label.split('@').last();
|
||||||
return (
|
return (
|
||||||
<div className={this.props.visible ? "" : "displaynone"}>
|
<div className={this.props.visible ? "" : "displaynone"}>
|
||||||
<dl className='dl-horizontal'>
|
<dl className='dl-horizontal'>
|
||||||
|
@ -193,8 +193,9 @@ export default class UserNodeData extends Component {
|
||||||
value={this.state.sessions}
|
value={this.state.sessions}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH (n:Computer)-[r:HasSession]->(m:User {name:{name}}) RETURN n,r,m", {name:this.state.label}
|
emitter.emit('query', "MATCH (n:Computer)-[r:HasSession]->(m:User {name:{name}}) RETURN n,r,m", {name:this.state.label}
|
||||||
,this.state.label)
|
,this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<br />
|
<br />
|
||||||
<h4>Group Membership</h4>
|
<h4>Group Membership</h4>
|
||||||
|
@ -209,8 +210,9 @@ export default class UserNodeData extends Component {
|
||||||
emitter.emit(
|
emitter.emit(
|
||||||
'query',
|
'query',
|
||||||
"MATCH p = (n:User {name:{name}})-[r:MemberOf]->(g:Group) RETURN p", {name:this.state.label}
|
"MATCH p = (n:User {name:{name}})-[r:MemberOf]->(g:Group) RETURN p", {name:this.state.label}
|
||||||
)
|
);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Unrolled Group Memberships
|
Unrolled Group Memberships
|
||||||
|
@ -221,8 +223,9 @@ export default class UserNodeData extends Component {
|
||||||
value={this.state.unrolledGroupMembership}
|
value={this.state.unrolledGroupMembership}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = (n:User {name:{name}})-[r:MemberOf*1..]->(g:Group) RETURN p", {name:this.state.label},
|
emitter.emit('query', "MATCH p = (n:User {name:{name}})-[r:MemberOf*1..]->(g:Group) RETURN p", {name:this.state.label},
|
||||||
this.state.label)
|
this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Foreign Group Membership
|
Foreign Group Membership
|
||||||
|
@ -233,8 +236,9 @@ export default class UserNodeData extends Component {
|
||||||
value={this.state.foreignGroupMembership}
|
value={this.state.foreignGroupMembership}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query',
|
emitter.emit('query',
|
||||||
"MATCH (n:Group) WHERE NOT n.name ENDS WITH {domain} WITH n MATCH (m:User {name:{name}}) WITH n,m MATCH p = (m)-[r:MemberOf*1..]->(n) RETURN p", {name: this.state.label, domain: domain})
|
"MATCH (n:Group) WHERE NOT n.name ENDS WITH {domain} WITH n MATCH (m:User {name:{name}}) WITH n,m MATCH p = (m)-[r:MemberOf*1..]->(n) RETURN p", {name: this.state.label, domain: domain});
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<br />
|
<br />
|
||||||
<h4>
|
<h4>
|
||||||
|
@ -248,8 +252,9 @@ export default class UserNodeData extends Component {
|
||||||
ready={this.state.firstDegreeLocalAdmin !== -1}
|
ready={this.state.firstDegreeLocalAdmin !== -1}
|
||||||
value={this.state.firstDegreeLocalAdmin}
|
value={this.state.firstDegreeLocalAdmin}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = (n:User {name:{name}})-[r:AdminTo]->(c:Computer) RETURN p", {name:this.state.label})
|
emitter.emit('query', "MATCH p = (n:User {name:{name}})-[r:AdminTo]->(c:Computer) RETURN p", {name:this.state.label});
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Group Delegated Local Admin Rights
|
Group Delegated Local Admin Rights
|
||||||
|
@ -260,8 +265,9 @@ export default class UserNodeData extends Component {
|
||||||
value={this.state.groupDelegatedLocalAdmin}
|
value={this.state.groupDelegatedLocalAdmin}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p=(n:User {name:{name}})-[r1:MemberOf*1..]->(g:Group)-[r2:AdminTo]->(c:Computer) RETURN p", {name:this.state.label}
|
emitter.emit('query', "MATCH p=(n:User {name:{name}})-[r1:MemberOf*1..]->(g:Group)-[r2:AdminTo]->(c:Computer) RETURN p", {name:this.state.label}
|
||||||
,this.state.label)
|
,this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Derivative Local Admin Rights
|
Derivative Local Admin Rights
|
||||||
|
@ -271,9 +277,10 @@ export default class UserNodeData extends Component {
|
||||||
ready={this.state.derivativeLocalAdmin !== -1}
|
ready={this.state.derivativeLocalAdmin !== -1}
|
||||||
value={this.state.derivativeLocalAdmin}
|
value={this.state.derivativeLocalAdmin}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = shortestPath((n:User {name:{name}})-[r:HasSession|AdminTo|MemberOf*1..]->(c:Computer)) RETURN p", {name:this.state.label}
|
emitter.emit('query', "MATCH (c:Computer) WHERE NOT c.name={name} WITH c MATCH p = shortestPath((n:User {name:{name}})-[r:HasSession|AdminTo|MemberOf*1..]->(c)) RETURN p", {name:this.state.label}
|
||||||
,this.state.label)
|
,this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<br />
|
<br />
|
||||||
<h4>
|
<h4>
|
||||||
|
@ -287,8 +294,9 @@ export default class UserNodeData extends Component {
|
||||||
ready={this.state.firstdegreeControl !== -1}
|
ready={this.state.firstdegreeControl !== -1}
|
||||||
value={this.state.firstdegreeControl}
|
value={this.state.firstdegreeControl}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = (u:User {name:{name}})-[r1:AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(n) RETURN p", {name:this.state.label})
|
emitter.emit('query', "MATCH p = (u:User {name:{name}})-[r1:AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(n) RETURN p", {name:this.state.label});
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Group Delegated Object Control
|
Group Delegated Object Control
|
||||||
|
@ -299,8 +307,9 @@ export default class UserNodeData extends Component {
|
||||||
value={this.state.unrolledControl}
|
value={this.state.unrolledControl}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = (u:User {name:{name}})-[r1:MemberOf*1..]->(g:Group)-[r2:AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(n) RETURN p", {name:this.state.label}
|
emitter.emit('query', "MATCH p = (u:User {name:{name}})-[r1:MemberOf*1..]->(g:Group)-[r2:AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(n) RETURN p", {name:this.state.label}
|
||||||
,this.state.label)
|
,this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Transitive Object Control
|
Transitive Object Control
|
||||||
|
@ -310,9 +319,10 @@ export default class UserNodeData extends Component {
|
||||||
ready={this.state.transitiveControl !== -1}
|
ready={this.state.transitiveControl !== -1}
|
||||||
value={this.state.transitiveControl}
|
value={this.state.transitiveControl}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = shortestPath((u:User {name:{name}})-[r1:MemberOf|AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner*1..]->(n)) RETURN p", {name:this.state.label}
|
emitter.emit('query', "MATCH (n) WHERE NOT n.name={name} WITH n MATCH p = shortestPath((u:User {name:{name}})-[r1:MemberOf|AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner*1..]->(n)) RETURN p", {name:this.state.label}
|
||||||
,this.state.label)
|
,this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<br />
|
<br />
|
||||||
<h4>Inbound Object Control</h4>
|
<h4>Inbound Object Control</h4>
|
||||||
|
@ -325,8 +335,9 @@ export default class UserNodeData extends Component {
|
||||||
value={this.state.firstdegreeControllers}
|
value={this.state.firstdegreeControllers}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = (n)-[r:AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(u1:User {name: {name}}) RETURN p", {name:this.state.label}
|
emitter.emit('query', "MATCH p = (n)-[r:AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(u1:User {name: {name}}) RETURN p", {name:this.state.label}
|
||||||
,this.state.label)
|
,this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Unrolled Object Controllers
|
Unrolled Object Controllers
|
||||||
|
@ -337,8 +348,9 @@ export default class UserNodeData extends Component {
|
||||||
value={this.state.unrolledControllers}
|
value={this.state.unrolledControllers}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = (n1)-[r:MemberOf*1..]->(g:Group)-[r1:AddMembers|AllExtendedRights|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(u:User {name: {name}}) WITH LENGTH(p) as pathLength, p, n1 WHERE NONE (x in NODES(p)[1..(pathLength-1)] WHERE x.name = u.name) AND NOT n1.name = u.name RETURN p", {name:this.state.label}
|
emitter.emit('query', "MATCH p = (n1)-[r:MemberOf*1..]->(g:Group)-[r1:AddMembers|AllExtendedRights|GenericAll|GenericWrite|WriteDacl|WriteOwner]->(u:User {name: {name}}) WITH LENGTH(p) as pathLength, p, n1 WHERE NONE (x in NODES(p)[1..(pathLength-1)] WHERE x.name = u.name) AND NOT n1.name = u.name RETURN p", {name:this.state.label}
|
||||||
,this.state.label)
|
,this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
<dt>
|
<dt>
|
||||||
Transitive Object Controllers
|
Transitive Object Controllers
|
||||||
|
@ -348,9 +360,10 @@ export default class UserNodeData extends Component {
|
||||||
ready={this.state.transitiveControllers !== -1}
|
ready={this.state.transitiveControllers !== -1}
|
||||||
value={this.state.transitiveControllers}
|
value={this.state.transitiveControllers}
|
||||||
click={function(){
|
click={function(){
|
||||||
emitter.emit('query', "MATCH p = shortestPath((n1)-[r1:MemberOf|AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner*1..]->(u1:User {name: {name}})) RETURN p", {name:this.state.label}
|
emitter.emit('query', "MATCH (n1) WHERE NOT n1.name={name} WITH n1 MATCH p = shortestPath((n1)-[r1:MemberOf|AddMembers|AllExtendedRights|ForceChangePassword|GenericAll|GenericWrite|WriteDacl|WriteOwner*1..]->(u1:User {name: {name}})) RETURN p", {name:this.state.label}
|
||||||
,this.state.label)
|
,this.state.label);
|
||||||
}.bind(this)} />
|
}.bind(this)}
|
||||||
|
/>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
|
@ -360,4 +373,4 @@ export default class UserNodeData extends Component {
|
||||||
|
|
||||||
UserNodeData.propTypes = {
|
UserNodeData.propTypes = {
|
||||||
visible : React.PropTypes.bool.isRequired
|
visible : React.PropTypes.bool.isRequired
|
||||||
}
|
};
|
Loading…
Reference in New Issue