def render_content(self, ctx, data): return ctx.tag[tags.h3["Thebe"], tags.a(href="Users/")['Manage Users'], tags.br, tags.a(href="Groups/")['Manage Groups'], tags.br, tags.a(href="Servers/")['Manage Servers'], tags.br, tags.a(href="Domains/")['Manage Domains'], tags.br, tags.a(href="Globals/")['Global Operations'], tags.br, ]
def gotGroups(groups): tlist = [] for k in groups: tlist.append((tags.a(href="View/%s/" % k[0])[k[1]], tags.a(href="Delete/%s/" % k[0])["Delete"])) return ctx.tag[tags.h3["Group list"], self.dataTable(["Group name", ""], tlist), tags.br, tags.br, tags.h3["Add group"], tags.directive('form addGroup'), ]
def renderServers(server): servers = [(i[1], i[2], i[3], [ tags.a(href="Edit/%s/" % i[0])["Edit"], " ", tags.a(href="Edit/Delete/%s/" % i[0])["Delete"] ]) for i in server] return ctx.tag[ tags.h3["Server List"], self.dataTable(["Name", "Hostname", "Key", ""], servers, sortable=True), tags.br, tags.h3["Comission new server"], tags.directive('form addServer'), ]
def render_ncontent(self, ctx, data): dom = None if len(self.arguments) > 0: dom = self.arguments[0] dns = DNS.DNS('o=THUSA', 'thusa') if dom: data = dns.printableFlatRecords(dom) tab = [ [ tags.tr[ tags.td[i[0]], tags.td[i[1]], tags.td[j] ] for j in i[2] ] for i in data ] else: tab = [ tags.tr[ tags.td[ tags.a(href="%s/" % i)[i] ] ] for i in data ] return ctx.tag[ tags.table[ tab ] ]
def render_topMenu(self, ctx, data): m = [ tags.td[tags.a(href="/Updates/")["Updates"]], tags.td[tags.a(href="/Thebe/")["Thebe"]] ] if 1 not in self.avatarId.gids: m = "" return ctx.tag[tags.table[ tags.tr[tags.td[tags.a(href="/Dashboard/")["Dashboard"]], tags.td[tags.a(href="/ServerUsers/")["Users"]], tags.td[tags.a(href="/Servers/")["Server Manager"]], tags.td[tags.a(href="/DNS/")["DNS"]], tags.td[tags.a(href="/Tickets/")["Tickets"]], tags.td[tags.a(href="/Orders/")["Orders"]], m, tags.td[tags.a(href="/__logout__")["Logout"]], ]]]
def renderDomains(domains): return ctx.tag[tags.table( _class="sortable", id="TdomainTable", cellspacing="0")[tags.thead( background="/images/gradMB.png")[tags.tr[tags.th( colformat="istr")["Domain"]]], tags.tbody(id="searchTableBody")[[ tags.tr[tags.td[tags.a( href="View/%s/" % domain[0])[domain[0]]]] for domain in domains ]]]]
def renderUpdates(updates): trows = [] for i in updates: trows.append( (i[1], i[2], tags.a(href="Delete/%s" % i[0])["Delete"])) return ctx.tag[ tags.h3["Approved Updates"], tags.br, self. dataTable(["Package", "Version", ""], trows, sortable=True), tags.br, tags.h3["Approve Update"], tags.directive('form approveUpdate')]
def renderServers(servers): servers2 = {} for s in servers: if s[1] in self.enamel.tcsMaster.connectedNodes: servers2[s[1]] = ('Online', s[1], s[4], s[0]) elif s[1] in self.enamel.tcsMaster.knownNodes: servers2[s[1]] = ('Online (No Direct)', s[1], s[4], s[0]) else: servers2[s[1]] = ('Offline', s[1], s[2], s[0]) def getGraph(server, canonical): # Returns the right graph image or structure for this particular view mode if (len(self.arguments) < 1) or (self.arguments[0] == 'load'): return tags.img( src= "/RRD?source=%s&type=load&timeframe=-7d&width=200&height=50&nog=yes" % (server)) if self.arguments[0] == 'latency': return tags.img( src= "/RRD?source=%s&type=latency&timeframe=-7d&width=200&height=50&nog=yes" % (canonical)) if self.arguments[0] == 'internet': return tags.img( src= "/RRD?source=%s&type=net&timeframe=-7d&width=200&height=50&nog=yes" % (server)) if self.arguments[0] == 'mailrate': return tags.img( src= "/RRD?source=%s&type=exim&timeframe=-7d&width=200&height=50&nog=yes" % (server)) serversL = servers2.keys() serversL.sort() servers3 = [] for i in serversL: servers3.append(servers2[i]) return ctx.tag[ tags.h3["Servers"], tags.br, tags.directive('form switchView'), self.dataTable(["Name", "Status", "Last IP", "Load", ""], [( i[0] == "Online", i[1], i[0], i[2], tags.div(_class="graphBlock")[getGraph(i[3], i[1])], tags.a(href="/Servers/Manage/%s/" % i[3])["Manage"]) for i in servers3], sortable=True), ]
def renderUsers(users): return ctx.tag[tags.table( _class="sortable", id="TdomainTable", cellspacing="0")[tags.thead( background="/images/gradMB.png")[tags.tr[ tags.th(colformat="istr")["User"], tags.th(colformat="istr")["Server"]]], tags.tbody(id="searchTableBody")[[ tags.tr[tags.td[tags.a( href="/ServerUsers/Edit/%s/" % user[0])[user[1]]], tags.td[user[2]]] for user in users ]]]]
def renderServerManager(ports, events, updates, server): reachability = [i[1] for i in ports] services = ["Vulani", "SMTP", "POP3", "IMAP"] if server[1] in self.enamel.tcsMaster.connectedNodes: ThiveReach = "Online" elif server[1] in self.enamel.tcsMaster.knownNodes: ThiveReach = "Online" else: ThiveReach = "Offline" tdata = [ ("Server", tags.a(href="http://%s:9682/auth/" % server[4])[server[1]]), ("Status", ThiveReach), ("Services", tags.table[[ tags.tr[tags.td[service], tags.td[ ": ", reachability[k] and "Available" or "Offline"]] for k, service in enumerate(services) ]]), ("Performance", tags.div[ tags.strong["Load"], tags.br, tags.img(src='/RRD?source=%s&type=load&timeframe=-24h' % self.arguments[0]), tags.br, tags.strong["Mail"], tags.br, tags.img(src='/RRD?source=%s&type=exim&timeframe=-24h' % self.arguments[0]), tags.br, tags.strong["Latency"], tags.br, tags.img(src='/RRD?source=%s&type=latency&timeframe=-12h' % server[1]), ]), ( "Updates", tags.table[[ tags.tr[ #tags.td[tags.a(href='Package/%s/' % i[2])['Send Update']], tags.td[i[2]], tags.td[i[3].ctime()]] for i in updates ]]), ("Event Log", tags.table[[ tags.tr[ tags.td[i[0].ctime()], tags.td[tags.strong[log.formatLogType(i[1].encode())]], tags.td[log.formatLogMessage(i[1].encode( ), i[2].encode())]] for i in events ]]) ] return ctx.tag[tags.table[[ tags.tr[tags.td(valign="top")[tags.strong[i]], tags.td[j]] for i, j in tdata ]]]
def rendercont(updated): return ctx.tag[tags.h3["Global Changes"], web.TabSwitcher([ ("Admin Password", 'adminpass'), ("TUMS Updates", 'updatetums'), ]), tags.div(id="updatetums", _class="tabPane")[ tags.h3["Update TUMS"], updated and "Update sent" or tags.a( href="Update/")["Update all now"], ], tags.div(id="adminpass", _class="tabPane")[ tags.h3["Change Administrator Password"], tags.directive('form adminpassword')], web.LoadTabSwitcher()]
def renderOutage(servers): deadServers = [] allServers = [] idDict = {} faultyServers = [] for i in servers: name = i[1] idDict[name] = i[0] allServers.append((name, i[3], i[5])) if name not in self.enamel.tcsMaster.connectedNodes: if name not in self.enamel.tcsMaster.knownNodes: deadServers.append(name) allServers.sort() table = [] for svr in allServers: tr = [ tags.td[tags.a(href=url.root.child('Servers').child( 'Manage').child(idDict.get(svr[0])))[svr[0] or ""]], tags.td[tags.pre[svr[1]]], tags.td[svr[2] or "<1.7.0"], tags.td[tags.span( style="color: %s" % (svr[0] in deadServers and "#f00" or "#0f0"))[ svr[0] in deadServers and "Offline" or "Online"]] ] if 1 in self.avatarId.gids: tr.append( tags.td[tags.a(href=url.root.child('Commands').child( 'Upgrade').child(idDict.get(svr[0])))["Update"]]) table.append(tags.tr[tr]) return ctx.tag[table]
def gotres(res): table = [] # Create a dictionary out of our group memberships glist = {} for g in res[1][1]: if g[0] in glist: glist[g[0]].append((g[1], g[2])) else: glist[g[0]] = [(g[1], g[2])] for user in res[0][1]: groups = [(i[1], tags.br) for i in glist.get(user[0], [])] table.append( (user[0], tags.a(href="/Account/%s/" % user[0])[user[1]], user[3] or "Not set", user[4] or "Not set", groups)) return ctx.tag[ tags.h3["Users"], Widgets.autoTable( ['Id', 'Username', 'Name', 'Email', 'Groups'], table), tags.h3["Add user"], tags.directive('form addUser')]
def gotUser(row): return ctx.tag[tags.table(_class="stdTable")[ tags.tr[tags.td( style="text-align:right;")[tags.strong["Name: "]], tags.td[row[3] or ""]], tags.tr[tags.td( style="text-align:right;")[tags.strong["Company: "]], tags.td[row[5] or ""]], tags.tr[tags.td( style="text-align:right;")[tags.strong["Email: "]], tags.td[row[4] or ""]], tags.tr[tags.td( style="text-align:right;")[tags.strong["Phone number: "]], tags.td[row[10] or ""]], tags.tr[tags.td( style="text-align:right;")[tags.strong["Address: "]], tags.td[row[6] or ""]], tags.tr[tags.td[""], tags.td[row[7] or ""]], tags.tr[tags.td[""], tags.td[row[8] or ""]], tags.tr[tags.td[""], tags.td[row[9] or ""]]], tags.a(href="/Account/")["Manage account"]]
def renderTable(rows): orderTable = [] for i in rows: if i[5] == "Vulani License": descr = "Vulani License + %s support for %s" % ( i[6].capitalize(), i[3]) else: descr = "" orderTable.append([ i[10], i[3], i[5], descr, i[8].ctime(), i[9].ctime(), i[7] or u"Pending", tags.a(href="/Orders/EditOrder/%s/" % i[0])["Manage"] ]) return ctx.tag[tags.div(_class="tabBlock")[ tags.div(_class="tabHeader")[tags.div( _class="tabText")["Pending Orders"]], tags.div(_class="tabContent")[self.dataTable([ "Requester", "Company", "Type", "Detail", "Created", "Changed", "Status", "" ], orderTable, width="100%")]]]
def render_content(self, ctx, d): return ctx.tag[tags.a(href="/Orders/Vulani")["Vulani licenses"], tags.br, #tags.a(href="/Orders/DNS")["DNS hosting"], ]
from datetime import datetime, date from custom import Widgets from twisted.internet import utils, defer from nevow import inevow from lib import PageBase, web PayGateKey = "secret" PayGateID = "10011013800" PayGateLogoStuff = tags.div(_class="paygateLogos")[tags.p( style="margin-top:30px;")[tags.a( href="http://www.paygate.co.za", target="_blank")[tags.img( src="http://www.thusa.co.za/images/paygate.png", border="0")]]] def genPayGateReqCHK(formDict): vars = [ formDict["PAYGATE_ID"], formDict["REFERENCE"], formDict["AMOUNT"], formDict["CURRENCY"], formDict["RETURN_URL"], formDict["TRANSACTION_DATE"], formDict["EMAIL"] ] if "SUB_START_DATE" in formDict: vars.extend([ formDict["SUB_START_DATE"], formDict["SUB_END_DATE"], formDict["SUB_FREQUENCY"], formDict["PROCESS_NOW"],
def renderForm(user): self.user = user domains = ['asd.co.za'] username = self.user[3] domain = self.user[2] u_form = formal.Form( self.submitForm )[formal.Group('userSettings')[tags.div(_class="field")[ tags.label[self.text.userFormLabelEmailAddress], tags.div(id="emailAd", _class="inputs")["%s@%s" % (username, domain)]], formal.Field('uid', formal.String( required=True), label=self.text. userFormLabelUsername), formal.Field('givenName', formal.String( required=True), label=self.text. userFormLabelName), formal.Field('sn', formal.String(), label=self.text. userFormLabelSurname), formal.Field('userPassword', formal.String(), formal.CheckedPassword, label=self.text. userFormLabelPass), ], formal.Group('mailSettings') [formal.Field('mailForwardingAddress0', formal.String(), label=self.text.userFormLabelForward), formal. Field('mailForwardingAddress1', formal.String(), label=""), formal. Field('mailForwardingAddress2', formal.String(), label=""), formal. Field('mailForwardingAddress3', formal.String(), label=""), formal. Field('mailForwardingAddress4', formal.String(), label=""), formal. Field('mailForwardingAddress5', formal.String(), label=""), formal. Field('mailForwardingAddress6', formal.String(), label=""), formal. Field('mailForwardingAddress7', formal.String(), label=""), formal. Field('mailForwardingAddress8', formal.String(), label=""), formal. Field('mailForwardingAddress9', formal.String(), label=""), tags.div( _class="userLine")[tags.a(href="#", onclick="addForward();") [self.text.userFormLabelAddline]], formal.Field('mailAlternateAddress0', formal.String(), label=self.text.userFormLabelAlias), formal.Field('mailAlternateAddress1', formal.String(), label="" ), formal.Field('mailAlternateAddress2', formal.String(), label="" ), formal.Field('mailAlternateAddress3', formal.String(), label="" ), formal.Field('mailAlternateAddress4', formal.String(), label="" ), formal.Field('mailAlternateAddress5', formal.String(), label="" ), formal.Field('mailAlternateAddress6', formal.String(), label="" ), formal.Field('mailAlternateAddress7', formal.String(), label="" ), formal.Field('mailAlternateAddress8', formal.String(), label="" ), formal.Field('mailAlternateAddress9', formal.String(), label="" ), tags.div( _class="userLine")[tags.a(href="#", onclick="addAlias();")[ self.text.userFormLabelAddline]], formal.Field('vacen', formal.Boolean(), label=self.text.userFormLabelVacationActive, description=self.text.userFormTextVacationNote), formal.Field('vacation', formal.String(), formal.TextArea, label=self.text.userFormLabelVacation), ], formal.Group('userPermissions') [formal.Field('employeeType', formal.Boolean(), label=self.text.userFormLabelWeb), formal.Field('accountStatus', formal.Boolean(), label=self.text.userFormLabelEmail), formal.Field('tumsAdmin', formal.Boolean(), label=self.text.userFormLabelAdmin), formal.Field( 'tumsUser', formal.Sequence(formal.String()), formal.widgetFactory(formal.CheckboxMultiChoice, [(i, i) for i in domains])), formal.Field('tumsReports', formal.Boolean(), label=self.text.userFormLabelReports), # formal.Field('copyto', formal.String(), label = self.text.userFormLabelCopy, # description = self.text.userFormTextCopy) ], # formal.Group('userAccess')[ # formal.Field('vpnEnabled', formal.Boolean(), label = self.text.userFormLabelVPN, # description = self.text.userFormTextVPN), # formal.Field('ftpEnabled', formal.Boolean(), label = self.text.userFormLabelFTP, # description = self.text.userFormTextFTP), # formal.Field('ftpGlobal', formal.Boolean(), label = self.text.userFormLabelGlobalFTP, # description = self.text.userFormTextGlobal) # ] ] u_form.addAction(self.submitForm) u_form.data['userSettings.uid'] = self.user[3] u_form.data['userSettings.givenName'] = self.user[4] u_form.data['userSettings.sn'] = self.user[5] u_form.data['userPermissions.employeeType'] = "squid" in self.user[ 9] u_form.data['userPermissions.tumsUser'] = [] u_form.data[ 'userPermissions.accountStatus'] = "active" in self.user[10] u_form.data[ 'userPermissions.tumsAdmin'] = "tumsAdmin" in self.user[9] u_form.data['userPermissions.tumsReports'] = "Repor" in self.user[ 9] u_form.data['mailSettings.vacen'] = self.user[20] == 1 u_form.data['mailSettings.vacation'] = self.user[19] return u_form
def render_sideMenu(self, ctx, data): return ctx.tag[tags.a(href="Users/")['Manage Users'], tags.br, tags.a(href="Groups/")['Manage Groups'], tags.br, tags.a(href="Servers/")['Manage Servers'], tags.br, tags.a(href="Domains/")['Manage Domains'], tags.br, tags.a(href="Globals/")['Global Operations'], tags.br, ]
def updatesSent(self, ctx): return ctx.tag[ "Update sent. ", tags.a(href=url.root.child('Servers').child('Manage'). child(self.arguments[0]))["Back to server management"]]
def renderConfirmed(self, _, ctx): return ctx.tag[ tags.h3["Registration confirmed!"], "Your registration has been successfully confirmed. You may now log in by clicking here: ", tags.a(href="https://portal.vulani.net/" )["https://portal.vulani.net/"]]
def TabSwitcher(tabs, id="A"): tabNames = [i for j, i in tabs] tabLables = [i for i, j in tabs] closeTabs = ';\n'.join([ " hideElement('%s'); getElement('tab%s').style.color='#666666';" % (i, i) for i in tabNames ]) switchFunc = """ tabSwitcher%s = function (tab) { %s getElement('tab'+tab).style.color='#E710D8'; showElement(tab); createCookie('tabOpen%s', tab); return false; }; """ % (id, closeTabs, id) return [ tags.xml("""<script type="text/javascript"> function createCookie(name,value) { var date = new Date(); date.setTime(date.getTime()+(24*60*60*1000)); var expires = "; expires="+date.toGMTString(); document.cookie = name+"="+value+expires+"; path=/"; } function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } createTabSwitcher%s = function() { %s var firstTab = '%s'; showElement(firstTab); getElement('tab'+firstTab).style.color='#E710D8'; try { var tab = readCookie('tabOpen%s'); if (tab) { %s showElement(tab); getElement('tab'+tab).style.color='#E710D8'; } } catch(dontCare){ showElement(firstTab); getElement('tab'+ firstTab).style.color='#E710D8'; } }; %s </script>""" % (id, closeTabs, tabNames[0], id, closeTabs, switchFunc)), tags.br, tags.br, tags.table(cellspacing=0, cellpadding=0)[tags.tr[[ tags. td(_class="tabTab", style= "padding:0;background-image: url(/images/tabcenter.png); background-repeat: repeat-x;", onclick="return tabSwitcher%s('%s');" % (id, j))[tags.a(id="tab" + j, href="#", style="color:#666666; text-decoration:none;", title="Switch to the tab: %s" % i, onclick="return tabSwitcher%s('%s');" % (id, j))[tags.img(src='/images/lefttab.png', align="absmiddle", style="border:none"), tags.strong[i], tags.img(src='/images/righttab.png', align="absmiddle", style="border:none")], ] for i, j in tabs ]]] ]
def render_userMenu(self, ctx, data): return ctx.tag["Welcome, ", tags.strong[self.avatarId.username], ". ", tags.a(href="/Password/")['Change Password'], " / ", tags.a(href="/__logout__/")['Log out']]