diff options
author | Nikita Karetnikov <nikita.karetnikov@gmail.com> | 2012-04-23 15:38:08 +0400 |
---|---|---|
committer | Nikita Karetnikov <nikita.karetnikov@gmail.com> | 2012-04-23 15:38:08 +0400 |
commit | 1f863847110e1e0b6724280cff1ad3c255dd800f (patch) | |
tree | a57a79f31f00daf903e6edabf4578a208ccd46e8 /gstudio | |
parent | 850672379e02b758d89ed609e7f8a9c009853104 (diff) | |
download | gnowsys-1f863847110e1e0b6724280cff1ad3c255dd800f.tar.gz |
Custom manage.py commands for peers. Subclass for non-human users in models.py
Diffstat (limited to 'gstudio')
-rw-r--r-- | gstudio/management/commands/peers.py | 23 | ||||
-rw-r--r-- | gstudio/management/commands/register-peer.py | 52 | ||||
-rw-r--r-- | gstudio/models.py | 7 |
3 files changed, 81 insertions, 1 deletions
diff --git a/gstudio/management/commands/peers.py b/gstudio/management/commands/peers.py new file mode 100644 index 00000000..cb79991b --- /dev/null +++ b/gstudio/management/commands/peers.py @@ -0,0 +1,23 @@ +# Copyright (c) 2012 Free Software Foundation + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +from django.core.management.base import NoArgsCommand +import sys +from gstudio.models import Peer + +class Command(NoArgsCommand): + """Custom manage.py command to show all peers""" + def handle_noargs(self, **options): + sys.stdout.write("{0}\n".format(Peer.objects.all())) diff --git a/gstudio/management/commands/register-peer.py b/gstudio/management/commands/register-peer.py new file mode 100644 index 00000000..a068b2f0 --- /dev/null +++ b/gstudio/management/commands/register-peer.py @@ -0,0 +1,52 @@ +# Copyright (c) 2012 Free Software Foundation + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +from django.core.management.base import BaseCommand +from optparse import make_option +import sys +from gstudio.models import Peer + +class Command(BaseCommand): + """Custom manage.py command to register a peer""" + option_list = BaseCommand.option_list + ( + make_option("--ip", action="store", type="string", + dest="ip", help="Specify an IP"), + make_option("--pkey", action="store", type="string", + dest="pkey", help="Specify a public-key")) + + def handle(self, *args, **options): + try: + ip = options["ip"] + pkey = options["pkey"] + + if not ip: + sys.stderr.write("Please specify an IP\n") + sys.exit(2) + + if not pkey: + sys.stderr.write("Please specify a public-key\n") + sys.exit(2) + + pkey = open(options["pkey"]).readline().rstrip() + + except (IOError, TypeError): + sys.stderr.write("Please specify a correct public-key\n") + sys.exit(2) + + ip = Peer(ip="{0}".format(ip)) + ip.save() + + pkey = Peer(pkey="{0}".format(pkey)) + pkey.save() diff --git a/gstudio/models.py b/gstudio/models.py index d793db0a..a9d69281 100644 --- a/gstudio/models.py +++ b/gstudio/models.py @@ -1950,5 +1950,10 @@ post_save.connect(ping_directories_handler, sender=Nodetype, post_save.connect(ping_external_urls_handler, sender=Nodetype, dispatch_uid='gstudio.nodetype.post_save.ping_external_urls') +class Peer(User): + """Subclass for non-human users""" + def __unicode__(self): + return self.ip - + ip = models.IPAddressField("Peer's IP address") + pkey = models.CharField(("Peer's public-key"), max_length=255) |