summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Karetnikov <nikita.karetnikov@gmail.com>2012-04-23 15:38:08 +0400
committerNikita Karetnikov <nikita.karetnikov@gmail.com>2012-04-23 15:38:08 +0400
commit1f863847110e1e0b6724280cff1ad3c255dd800f (patch)
treea57a79f31f00daf903e6edabf4578a208ccd46e8
parent850672379e02b758d89ed609e7f8a9c009853104 (diff)
downloadgnowsys-1f863847110e1e0b6724280cff1ad3c255dd800f.tar.gz
Custom manage.py commands for peers. Subclass for non-human users in models.py
-rw-r--r--gstudio/management/commands/peers.py23
-rw-r--r--gstudio/management/commands/register-peer.py52
-rw-r--r--gstudio/models.py7
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 0000000..cb79991
--- /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 0000000..a068b2f
--- /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 d793db0..a9d6928 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)