diff options
Diffstat (limited to 'rpkid/rpki/gui/scripts/adduser.py')
-rw-r--r-- | rpkid/rpki/gui/scripts/adduser.py | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/rpkid/rpki/gui/scripts/adduser.py b/rpkid/rpki/gui/scripts/adduser.py new file mode 100644 index 00000000..8b475c0c --- /dev/null +++ b/rpkid/rpki/gui/scripts/adduser.py @@ -0,0 +1,115 @@ +# $Id$ +# +# Copyright (C) 2010, 2011 SPARTA, Inc. dba Cobham Analytic Solutions +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND SPARTA DISCLAIMS ALL WARRANTIES WITH +# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS. IN NO EVENT SHALL SPARTA BE LIABLE FOR ANY SPECIAL, DIRECT, +# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# +# Helper script to quickly set up a new portal-gui user/handle. This script +# is designed to be safe to run multiple times for the same user. +# +# DO NOT EDIT! This script is automatically generated from adduser.py + +import os +os.environ['DJANGO_SETTINGS_MODULE'] = 'rpki.gui.settings' + +from django.contrib.auth.models import User +from django.conf import settings +from rpki.gui.app.models import Conf + +# The username that apache runs as. This is required so that we can chown +# the csv files that the portal-gui needs to write. +WEB_USER='@WEBUSER@' + +import os +import sys +import getpass +import pwd + +web_uid = pwd.getpwnam(WEB_USER)[2] + +if __name__ == '__main__': + if len(sys.argv) < 3: + print >>sys.stderr, 'usage: adduser <username> <user\'s email> <host handle>' + sys.exit(1) + + if os.getuid() != 0: + print >>sys.stderr, 'error: this script must be run as root so it can set file permissions.' + sys.exit(1) + + username = sys.argv[1] + email = sys.argv[2] + host = sys.argv[3] + print 'username=', username, 'email=', email, 'host=', host + + user_set = User.objects.filter(username=username) + if user_set: + print >>sys.stderr, 'user already exists' + user = user_set[0] + else: + print >>sys.stderr, 'creating user' + password = getpass.getpass() + user = User.objects.create_user(username, email, password) + + conf_set = Conf.objects.filter(handle=username) + if conf_set: + conf = conf_set[0] + else: + print >>sys.stderr, 'creating conf' + conf = Conf.objects.create(handle=username) + + # always try to add the user as owner just in case the Conf object was + # created previously by the "list_resources" script + conf.owner.add(user) + + if host != username: + host_set = Conf.objects.filter(handle=host) + if not host_set: + print >>sys.stderr, 'error: Conf object for host %s does not exist!' % host + sys.exit(1) + + conf.host = host_set[0] + else: + print >>sys.stderr, '%s is self-hosted' % username + conf.save() + + myrpki_dir = '%s/%s' % (settings.CONFDIR, username) + print 'myrpki_dir=', myrpki_dir + if not os.path.exists(myrpki_dir): + print 'creating ', myrpki_dir + os.mkdir(myrpki_dir) + os.chown(myrpki_dir, web_uid, -1) + + # create enought of rpki.conf enough to fool portal-gui + myrpki_conf = myrpki_dir + '/rpki.conf' + if not os.path.exists(myrpki_conf): + print 'creating ', myrpki_conf + with open(myrpki_conf, 'w') as f: + print >>f, """[myrpki] +run_rpkidemo=true +run_rpkid=false +asn_csv=%(path)s/asns.csv +roa_csv=%(path)s/roas.csv +prefix_csv=%(path)s/prefixes.csv""" % { 'path': myrpki_dir } + + # create empty csv files so portal-gui doesn't barf + for base in ['roas', 'asns', 'prefixes']: + fname = '%s/%s.csv' % (myrpki_dir, base) + if not os.path.exists(fname): + print 'creating ', fname + with open(fname, 'w') as f: + # just create an empty file + pass + os.chown(fname, web_uid, -1) + +# vim:sw=4 ts=8 |