aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/federation/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'mediagoblin/federation/views.py')
-rw-r--r--mediagoblin/federation/views.py46
1 files changed, 36 insertions, 10 deletions
diff --git a/mediagoblin/federation/views.py b/mediagoblin/federation/views.py
index 097dc625..bfd58d27 100644
--- a/mediagoblin/federation/views.py
+++ b/mediagoblin/federation/views.py
@@ -14,21 +14,47 @@
# 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 mediagoblin.tools.json import json_response
+import json
+
+from mediagoblin.meddleware.csrf import csrf_exempt
+from mediagoblin.tools.response import json_response
+from mediagoblin.tools.crypto import random_string
+from mediagoblin.db.models import Client
# possible client types
client_types = ["web", "native"] # currently what pump supports
+@csrf_exempt
def client_register(request):
""" Endpoint for client registration """
- if request.method == "POST":
- # new client registration
-
- return json_response({"dir":dir(request)})
+ data = request.get_data()
+ if request.content_type == "application/json":
+ try:
+ data = json.loads(data)
+ except ValueError:
+ return json_response({"error":"Could not decode JSON"})
+ else:
+ return json_response({"error":"Unknown Content-Type"}, status=400)
- # check they haven't given us client_id or client_type, they're only used for updating
- pass
+ if "type" not in data:
+ return json_response({"error":"No registration type provided"}, status=400)
+
+ # generate the client_id and client_secret
+ client_id = random_string(22) # seems to be what pump uses
+ client_secret = random_string(43) # again, seems to be what pump uses
+ expirey = 0 # for now, lets not have it expire
+ expirey_db = None if expirey == 0 else expirey
+ client = Client(
+ id=client_id,
+ secret=client_secret,
+ expirey=expirey_db,
+ application_type=data["type"]
+ )
+ client.save()
- elif request.method == "PUT":
- # updating client
- pass
+ return json_response(
+ {
+ "client_id":client_id,
+ "client_secret":client_secret,
+ "expires_at":expirey,
+ })