Source code for intranet.apps.cslapps.management.commands.dev_create_cslapps

from django.contrib.auth.models import Group
from django.core.management.base import BaseCommand

from ....oauth.models import CSLApplication
from ...models import App


[docs]class Command(BaseCommand): help = "Creates commonly-used CSL apps for development."
[docs] def handle(self, *args, **options): APPS = [ { "order": 10, "name": "Webmail", "description": "Access your TJ email account", "url": "https://webmail.tjhsst.edu/", "html_icon": "<i class='fas fa-envelope'></i>", }, { "order": 20, "name": "Director", "description": "Web hosting interface", "url": "https://director.tjhsst.edu/", "oauth_application": CSLApplication.objects.get_or_create(name="Director 4.0", sanctioned=True)[0], "auth_url": "https://director.tjhsst.edu/login/ion/", "html_icon": "<i class='fas fa-cloud' style='color: #003060; left: 0;'></i>", }, { "order": 30, "name": "Tin", "description": "Autograder for CS classes", "url": "https://tin.tjhsst.edu/", "oauth_application": CSLApplication.objects.get_or_create(name="Turn-in", sanctioned=True)[0], "auth_url": "https://tin.tjhsst.edu/login/ion/", "image_url": "/static/img/cslapps/tin.svg", "invert_image_color_for_dark_mode": True, }, { "order": 40, "name": "JupyterHub", "description": "Web interface for the TJ Cluster", "url": "https://jupyterhub.tjhsst.edu/", "oauth_application": CSLApplication.objects.get_or_create(name="JupyterHub", sanctioned=True)[0], "auth_url": "https://jupyterhub.tjhsst.edu/hub/oauth_login", "image_url": "/static/img/cslapps/jupyterhub.png", }, { "order": 50, "name": "Mattermost", "description": "Collaboration platform", "url": "https://matterless.tjhsst.edu/", "image_url": "/static/img/cslapps/mattermost.png", }, { "order": 60, "name": "Mail Forwarding", "description": "Forward your TJ email to another address", "url": "https://mailforwarding.tjhsst.edu/", "oauth_application": CSLApplication.objects.get_or_create(name="CSL Mail Forwarding", sanctioned=True)[0], "auth_url": "https://mailforwarding.tjhsst.edu/login/ion/", "image_url": "/static/img/cslapps/mailforwarding.png", "invert_image_color_for_dark_mode": True, }, { "order": 70, "name": "Othello", "description": "Othello tournament platform for AI classes", "url": "https://othello.tjhsst.edu/", "oauth_application": CSLApplication.objects.get_or_create(name="Othello", sanctioned=True)[0], "auth_url": "https://othello.tjhsst.edu/oauth/login/ion/", "image_url": "/static/img/cslapps/othello.png", }, { "order": 80, "name": "Tiny", "description": "URL shortener", "url": "https://tiny.tjhsst.edu/", "oauth_application": CSLApplication.objects.get_or_create(name="tiny.tjhsst.edu", sanctioned=True)[0], "auth_url": "https://tiny.tjhsst.edu/oauth/login/ion/", "html_icon": "<i class='fas fa-link'></i>", }, { "order": 90, "name": "Password", "description": "Change your TJ password", "url": "https://resetter.tjhsst.edu/", "html_icon": "<i class='fas fa-key'></i>", }, { "order": 100, "name": "Sysadmins", "description": "Learn about the Computer Systems Lab and the Student Sysadmins who run it", "url": "https://sysadmins.tjhsst.edu/", "image_url": "/static/img/csl_logo.png", }, { "order": 110, "name": "Status", "description": "Information on TJ CSL service status", "url": "https://status.tjhsst.edu/", "image_url": "/static/img/cslapps/status.png", "invert_image_color_for_dark_mode": True, }, { "order": 120, "name": "Guides", "description": "Guides for TJ CSL services", "url": "https://guides.tjhsst.edu/", "html_icon": "<i class='fas fa-book'></i>", }, { "order": 1000, "name": "Documentation", "description": "Documentation for TJ CSL services", "url": "https://documentation.tjhsst.edu/", "html_icon": "<i class='fas fa-book'></i>", "groups": [Group.objects.get_or_create(name="Sysadmin(R) -- Permissions")[0]], }, { "order": 1010, "name": "CSL Mattermost", "description": "Internal CSL communication", "url": "https://mattermost.tjhsst.edu/", "image_url": "/static/img/cslapps/mattermost.png", "groups": [Group.objects.get_or_create(name="Sysadmin(R) -- Permissions")[0]], }, { "order": 1020, "name": "Slack", "description": "CSL Slack workspace", "url": "https://tjcsl.slack.com/", "image_url": "/static/img/cslapps/slack.png", "groups": [Group.objects.get_or_create(name="Sysadmin(R) -- Permissions")[0]], }, { "order": 1030, "name": "GitLab", "description": "CSL repositories", "url": "https://gitlab.tjhsst.edu/", "image_url": "/static/img/cslapps/gitlab.png", "groups": [Group.objects.get_or_create(name="Sysadmin(R) -- Permissions")[0]], }, { "order": 1040, "name": "Runbooks", "description": "Internal documentation", "url": "https://runbooks.tjhsst.edu/", "oauth_application": CSLApplication.objects.get_or_create(name="CSL Runbooks", sanctioned=True)[0], "auth_url": "https://runbooks.tjhsst.edu/auth", "image_url": "/static/img/csl_logo.png", "groups": [Group.objects.get_or_create(name="Sysadmin(R) -- Permissions")[0]], }, { "order": 1050, "name": "GitBook", "description": "Edit documentation", "url": "https://tjcsl.gitbook.io/", "image_url": "/static/img/cslapps/gitbook.png", "groups": [Group.objects.get_or_create(name="Sysadmin(R) -- Permissions")[0]], }, { "order": 1060, "name": "Grafana", "description": "Monitoring dashboard", "url": "https://grafana.tjhsst.edu/", "image_url": "/static/img/cslapps/grafana.png", "groups": [Group.objects.get_or_create(name="Sysadmin(R) -- Permissions")[0]], }, { "order": 1070, "name": "LibreNMS", "description": "Network monitoring", "url": "https://nms.tjhsst.edu/", "image_url": "/static/img/cslapps/librenms.png", "groups": [Group.objects.get_or_create(name="Sysadmin(R) -- Permissions")[0]], }, { "order": 1080, "name": "Better Uptime", "description": "Status page dashboard", "url": "https://betteruptime.com/team/58077/monitors", "image_url": "/static/img/cslapps/betteruptime.svg", "invert_image_color_for_dark_mode": True, "groups": [Group.objects.get_or_create(name="Sysadmin(R) -- Permissions")[0]], }, { "order": 1090, "name": "Kibana", "description": "Elastic stack and log viewer", "url": "https://kibana.tjhsst.edu/", "image_url": "/static/img/cslapps/kibana.png", "groups": [Group.objects.get_or_create(name="Sysadmin(R) -- Permissions")[0]], }, { "order": 1100, "name": "Netbox", "description": "Infrastructure management", "url": "https://netbox.tjhsst.edu/", "image_url": "/static/img/cslapps/netbox.png", "groups": [Group.objects.get_or_create(name="Sysadmin(R) -- Permissions")[0]], }, { "order": 1120, "name": "Notes", "description": "Internal notes site", "url": "https://notes.tjhsst.edu/", "auth_url": "https://notes.tjhsst.edu/auth/gitlab", "html_icon": "<i class='fas fa-file-alt'></i>", "groups": [Group.objects.get_or_create(name="Sysadmin(R) -- Permissions")[0]], }, { "order": 1130, "name": "Workstatus", "description": "Workstations status", "url": "https://workstatus.tjhsst.edu/", "oauth_application": CSLApplication.objects.get_or_create(name="Workstatus", sanctioned=True)[0], "auth_url": "https://workstatus.tjhsst.edu/login/ion/", "html_icon": "<i class='fas fa-desktop'></i>", "groups": [Group.objects.get_or_create(name="Sysadmin(R) -- Permissions")[0]], }, { "order": 1140, "name": "Signage", "description": "Signage management", "url": "https://signage.tjhsst.edu/admin", "oauth_application": CSLApplication.objects.get_or_create(name="Signage", sanctioned=True)[0], "auth_url": "https://signage.tjhsst.edu/login/ion/", "html_icon": "<i class='fas fa-sign'></i>", "groups": [Group.objects.get_or_create(name="Sysadmin(R) -- Permissions")[0]], }, ] for app in APPS: if App.objects.filter(url=app["url"]).count() == 0: if "groups" in app: groups = app.pop("groups") new_app = App.objects.create(**app) new_app.groups_visible.set(groups) else: App.objects.create(**app) self.stdout.write(self.style.SUCCESS(f"Created app {app['name']}")) else: self.stdout.write(self.style.WARNING(f"App {app['name']} already exists. Updating with new configuration.")) if "groups" in app: groups = app.pop("groups") new_app = App.objects.filter(url=app["url"]) new_app.update(**app) new_app[0].groups_visible.set(groups) else: App.objects.filter(url=app["url"]).update(**app) self.stdout.write(self.style.SUCCESS("Finished creating apps."))