scenario-notebooks/UserSecurityMetadata/GraphVis.py (26 lines of code) (raw):

# ------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for # license information. # -------------------------------------------------------------------------- from pathlib import Path from string import Template from NodeEdge import Node, Edge import jsonpickle class GraphVis: def __init__(self): self.nodes = set() self.edges = set() def addEdge(self, fromNode, toNode, label): if fromNode.group != "User" and fromNode.group != "Group" and fromNode.group != "AzureSubscription" and fromNode.group != "ServicePrincipal": raise Exception("Error: Unsupported node type - " + jsonpickle.encode(fromNode, unpicklable=False, make_refs=False)) if toNode.group != "User" and toNode.group != "Group" and toNode.group != "AzureSubscription" and toNode.group != "ServicePrincipal": raise Exception("Error: Unsupported node type - " + jsonpickle.encode(toNode, unpicklable=False, make_refs=False)) self.nodes.add(fromNode) self.nodes.add(toNode) edge = Edge(fromNode.id, toNode.id, label) self.edges.add(edge) def getHtml(self): htmlTemplate = Template(Path('./graph.html.template').read_text()) nodesJson = jsonpickle.encode( self.nodes, unpicklable=False, make_refs=False) edgesJson = jsonpickle.encode( self.edges, unpicklable=False, make_refs=False).replace("from_", "from") return htmlTemplate.substitute(NODES=nodesJson, EDGES=edgesJson)