Skip to content

Commit 1c0ac56

Browse files
committed
add advanced mappings tool added
1 parent 57bad18 commit 1c0ac56

File tree

4 files changed

+159
-1
lines changed

4 files changed

+159
-1
lines changed

add_mapping.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from login import global_admin_login
2+
from filer import get_filers, get_filer
3+
from cterasdk import settings
4+
5+
import logging
6+
7+
from cterasdk import common_types
8+
9+
def get_adv_mapping(edge):
10+
highest_id = 0
11+
mappings = []
12+
for domain, mapping in edge.directoryservice.get_advanced_mapping().items():
13+
print(f"Domain: {domain}")
14+
print(f"Mapping: {mapping}")
15+
if mapping.maxID > highest_id:
16+
highest_id = mapping.maxID
17+
mappings.append(mapping)
18+
19+
return mappings, highest_id
20+
21+
def add_mapping(address, username, password, domain, device_name=None, tenant=None):
22+
try:
23+
settings.sessions.management.ssl = False
24+
ga = global_admin_login(address, username, password, True)
25+
if device_name:
26+
filers=[get_filer(ga, device_name, tenant)]
27+
elif tenant:
28+
filers = get_filers(ga, tenant=tenant, all_tenants=False)
29+
else:
30+
filers = get_filers(ga, all_tenants=True)
31+
32+
for edge in filers:
33+
mappings, highest_id = get_adv_mapping(edge)
34+
35+
mappings.append(common_types.ADDomainIDMapping(domain, highest_id + 1, highest_id + 200000))
36+
37+
for mapping in mappings:
38+
print(f"Mapping: {mapping}")
39+
40+
logging.info(f"Attempting to add mapping for domain {domain} to {edge.name}")
41+
edge.directoryservice.set_advanced_mapping(mappings)
42+
logging.info(f"Added mapping for domain {domain} to {edge.name}")
43+
except Exception as e:
44+
logging.error(f"Error: {e}")
45+
finally:
46+
ga.logout()
47+

ctools.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from windows.AddMembersWindow import addMembersWindow
2121
from windows.ReportZonesWindow import reportZonesWindow
2222
from windows.PopulateCloudFoldersWindow import populateCloudFoldersWindow
23+
from windows.AddMappingWindow import addMappingWindow
2324
#from windows.SMBAuditWindow import smbAuditWindow
2425

2526
from PySide6 import QtCore
@@ -87,6 +88,9 @@ def main():
8788
populate_shares = populateCloudFoldersWindow(widget)
8889
widget.addWidget(populate_shares)
8990

91+
add_mapping = addMappingWindow(widget)
92+
widget.addWidget(add_mapping)
93+
9094
## STEP7- Add new windows above this line ##
9195

9296
widget.setCurrentWidget(run_cmd)

ui_help.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,13 @@ def create_tool_bar(widget, currentWindow):
3131
add_members = QPushButton("Add/Remove Members")
3232
report_zones = QPushButton("Report Zones")
3333
populate_shares = QPushButton("Populate Shares")
34+
add_mapping = QPushButton("Add Domain to Advanced Mapping")
3435

3536
#STEP8 - Create the push button above so you can navigate to the tool
3637

3738

3839
# STEP9 - Add the button you just created to the list below. MAKE SURE YOU PUT IT BEFORE EXIT
39-
tool_list = [run_cmd, show_status, suspend_sync, unsuspend_sync, enable_ssh, disable_ssh, enable_telnet, reset_password, cloud_folders, delete_shares, import_shares, add_members, report_zones, populate_shares]
40+
tool_list = [run_cmd, show_status, suspend_sync, unsuspend_sync, enable_ssh, disable_ssh, enable_telnet, reset_password, cloud_folders, delete_shares, import_shares, add_members, report_zones, populate_shares, add_mapping]
4041

4142
tool_list[currentWindow].setStyleSheet("color: darkblue; background-color: lightblue;")
4243

windows/AddMappingWindow.py

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
import logging
2+
from log_setter import set_logging
3+
## STEP6a - import the tool function from the file you imported into the CTOOLS3 project folder
4+
from add_mapping import add_mapping
5+
from ui_help import gen_tool_layout, gen_custom_tool_layout, create_tool_bar
6+
from login import global_admin_login
7+
from PySide6.QtCore import Qt
8+
from PySide6.QtWidgets import (
9+
QMainWindow,
10+
QWidget,
11+
QPushButton,
12+
QVBoxLayout,
13+
QLabel,
14+
QHBoxLayout,
15+
QTextEdit,
16+
QFrame,
17+
)
18+
from PySide6.QtGui import (
19+
QPixmap
20+
)
21+
WINDOW_WIDTH = 700
22+
WINDOW_HEIGHT = 600
23+
OUTPUT_HEIGHT = 250
24+
class addMappingWindow(QMainWindow):
25+
"""PyCalc's main window (GUI or view)."""
26+
def __init__(self, widget):
27+
super().__init__()
28+
self.widget = widget
29+
self.setWindowTitle("CTools 3.0")
30+
self.setFixedSize(WINDOW_WIDTH, WINDOW_HEIGHT)
31+
self.generalLayout = QVBoxLayout()
32+
self.top = QHBoxLayout()
33+
welcome = QLabel("<h2>Welcome to CTools!</h2><h5>One tool for all</h5>")
34+
pic_label = QLabel(self)
35+
pixmap = QPixmap("C:\\Users\\lakea\\Desktop\\CTERA\\ctools\\logo.png")#replace with image location
36+
pic_label.setPixmap(pixmap)
37+
#pic_label.setScaledContents(True)
38+
self.top.addWidget(welcome)
39+
self.top.addStretch()
40+
self.top.addWidget(pic_label)
41+
self.mainContent = QHBoxLayout()
42+
centralWidget = QWidget(self)
43+
centralWidget.setLayout(self.generalLayout)
44+
self.setCentralWidget(centralWidget)
45+
self.generalLayout.addLayout(self.top)
46+
self.generalLayout.addLayout(self.mainContent)
47+
self._createToolBar()
48+
self._createToolViewLayout()
49+
def _createToolBar(self):
50+
tools = create_tool_bar(self.widget, 14)
51+
# Add line separator between Tool List and Tool View
52+
line = QFrame()
53+
line.setFrameShape(QFrame.VLine)
54+
line.setFrameShadow(QFrame.Sunken)
55+
line.setLineWidth(1)
56+
self.mainContent.addLayout(tools)
57+
self.mainContent.addWidget(line)
58+
def _createToolViewLayout(self):
59+
toolView = QVBoxLayout()
60+
# Step3 - You will change the next two lines according to the KB
61+
BoilerLayout, self.input_widgets = gen_custom_tool_layout("Add Domain to Advanced Mapping", ["Tenant (Empty if all devices on all tenants)", "Device Name (Empty if multiple devices)", "Domain to be Added"], ["Ignore cert warnings for login", "Verbose Logging"])
62+
toolView.addLayout(BoilerLayout)
63+
# Create action buttons
64+
actionButtonLayout = QHBoxLayout()
65+
self.cancel = QPushButton("Cancel")
66+
self.start = QPushButton("Start")
67+
actionButtonLayout.addWidget(self.cancel)
68+
actionButtonLayout.addWidget(self.start)
69+
toolView.addLayout(actionButtonLayout)
70+
# STEP5 - Add button listeners
71+
self.start.clicked.connect(self.tool)
72+
# Create Output box
73+
self.output = QTextEdit()
74+
self.output.setReadOnly(True)
75+
toolView.addWidget(self.output)
76+
self.mainContent.addLayout(toolView)
77+
# STEP4 - Grab the arguments for you tool
78+
def tool(self):
79+
portal_address = self.input_widgets[0].text()
80+
portal_username = self.input_widgets[1].text()
81+
portal_password = self.input_widgets[2].text()
82+
tenant = self.input_widgets[3].text()
83+
device_name = self.input_widgets[4].text()
84+
domain_name = self.input_widgets[5].text()
85+
ignore_cert = self.input_widgets[6].isChecked()
86+
verbose = self.input_widgets[7].isChecked()
87+
if verbose:
88+
set_logging(logging.DEBUG, 'debug-log.txt')
89+
else:
90+
set_logging()
91+
## Step6b - Run the tool here
92+
# Ex: run_status(global_admin, filename, all_tenants_flag)
93+
if device_name:
94+
add_mapping(portal_address, portal_username, portal_password, domain_name, device_name=device_name, tenant=tenant)
95+
elif tenant:
96+
add_mapping(portal_address, portal_username, portal_password, domain_name, tenant=tenant)
97+
else:
98+
add_mapping(portal_address, portal_username, portal_password, domain_name)
99+
100+
self._updateOutput()
101+
def _updateOutput(self):
102+
file = open("output.tmp", 'r')
103+
with file:
104+
text = file.read()
105+
self.output.setText(text)
106+
self.output.verticalScrollBar().setValue(self.output.verticalScrollBar().maximum())

0 commit comments

Comments
 (0)