Skip to content

Commit

Permalink
Add management commands
Browse files Browse the repository at this point in the history
  • Loading branch information
skatsaounis committed Apr 10, 2020
1 parent 56d381a commit 7c6b37e
Show file tree
Hide file tree
Showing 7 changed files with 110 additions and 0 deletions.
7 changes: 7 additions & 0 deletions patchman/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from __future__ import unicode_literals

from django.apps import AppConfig


class PatchmanConfig(AppConfig):
name = 'patchman'
Empty file added patchman/management/__init__.py
Empty file.
Empty file.
33 changes: 33 additions & 0 deletions patchman/management/commands/createsuperuser_with_password.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
from django.contrib.auth.management.commands import createsuperuser
from django.core.management import CommandError


class Command(createsuperuser.Command):
help = 'Crate a superuser, and allow password to be provided'

def add_arguments(self, parser):
super(Command, self).add_arguments(parser)
parser.add_argument(
'--password', dest='password', default=None,
help='Specifies the password for the superuser.',
)

def handle(self, *args, **options):
password = options.get('password')
username = options.get('username')
database = options.get('database')

if options['interactive']:
raise CommandError(
'Command is required to run with --no-input option')
if password and not username:
raise CommandError(
'--username is required if specifying --password')

super(Command, self).handle(*args, **options)

if password:
user = self.UserModel._default_manager.db_manager(
database).get(username=username)
user.set_password(password)
user.save()
17 changes: 17 additions & 0 deletions patchman/management/commands/set_rdns_check.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from django.core.management.base import BaseCommand, CommandError
from hosts.models import Host


class Command(BaseCommand):
help = 'Enable/Disable rDNS check for hosts'

def add_arguments(self, parser):
parser.add_argument(
'--disable', action='store_false', default=True, dest='rdns_check',
help='If set, disables rDNS check')

def handle(self, *args, **options):
try:
Host.objects.all().update(check_dns=options['rdns_check'])
except Exception as e:
raise CommandError('Failed to update rDNS check', str(e))
52 changes: 52 additions & 0 deletions patchman/management/commands/set_secret_key.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import os
import re
import sys
import codecs
from random import choice
from tempfile import NamedTemporaryFile
from shutil import copy

from django.core.management.base import BaseCommand


class Command(BaseCommand):
help = 'Set SECRET_KEY of Patchman Application.'

def add_arguments(self, parser):
parser.add_argument(
'--key', help=(
'The SECRET_KEY to be used by Patchman. If not set, a random '
'key of length 50 will be created.'))

@staticmethod
def get_random_key():
chars = 'abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)'
return ''.join([choice(chars) for i in range(50)])

def handle(self, *args, **options):
secret_key = options.get('key', self.get_random_key())

if sys.prefix == '/usr':
conf_path = '/etc/patchman'
else:
conf_path = os.path.join(sys.prefix, 'etc/patchman')
# if conf_path doesn't exist, try ./etc/patchman
if not os.path.isdir(conf_path):
conf_path = './etc/patchman'
local_settings = os.path.join(conf_path, 'local_settings.py')

settings_contents = codecs.open(
local_settings, 'r', encoding='utf-8').read()
settings_contents = re.sub(
r"(?<=SECRET_KEY = ')'", secret_key + "'", settings_contents)

f = NamedTemporaryFile(delete=False)
temp = f.name
f.close()

fh = codecs.open(temp, 'w+b', encoding='utf-8')
fh.write(settings_contents)
fh.close()

copy(temp, local_settings)
os.remove(temp)
1 change: 1 addition & 0 deletions patchman/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@
'repos.apps.ReposConfig',
'reports.apps.ReportsConfig',
'util.apps.UtilConfig',
'patchman.apps.PatchmanConfig',
]

REST_FRAMEWORK = {
Expand Down

0 comments on commit 7c6b37e

Please sign in to comment.