You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@warble.apache.org by hu...@apache.org on 2018/06/26 15:21:13 UTC
[incubator-warble-server] 06/07: add API endpoint for modifying a
node
This is an automated email from the ASF dual-hosted git repository.
humbedooh pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-warble-server.git
commit 61c81887aca13a6e66f9d319a47415283b0c2c9c
Author: Daniel Gruno <hu...@apache.org>
AuthorDate: Tue Jun 26 10:20:35 2018 -0500
add API endpoint for modifying a node
---
api/pages/node/modify.py | 107 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 107 insertions(+)
diff --git a/api/pages/node/modify.py b/api/pages/node/modify.py
new file mode 100644
index 0000000..de321a6
--- /dev/null
+++ b/api/pages/node/modify.py
@@ -0,0 +1,107 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+########################################################################
+# OPENAPI-URI: /api/node/modify
+########################################################################
+# post:
+# requestBody:
+# content:
+# application/json:
+# schema:
+# $ref: '#/components/schemas/NodeDetails'
+# description: Node details to modify
+# required: true
+# responses:
+# '200':
+# content:
+# application/json:
+# schema:
+# $ref: '#/components/schemas/ActionCompleted'
+# description: Node successfully modified on server
+# default:
+# content:
+# application/json:
+# schema:
+# $ref: '#/components/schemas/Error'
+# description: unexpected error
+# summary: Modifies base data of a node in the registry
+#
+########################################################################
+
+
+
+
+
+"""
+This is the node modification handler for Apache Warble
+"""
+
+import json
+import re
+import time
+import plugins.crypto
+import plugins.registry
+import base64
+
+def run(API, environ, indata, session):
+
+ method = environ['REQUEST_METHOD']
+
+ # Modifying a node?
+ if method == "POST":
+ # Super users only!
+ if not session.user or session.user['userlevel'] != 'superuser':
+ raise API.exception(403, "You need to be logged in as super user to perform this action")
+
+
+ # Try finding the node in the registry
+ nodeid = indata['id']
+ node = None
+ try:
+ node = plugins.registry.node(session, nodeid)
+ except:
+ raise API.exception(404, "Could not find a node by this ID to modify.")
+
+ # Save any changes we get
+ if 'verified' in indata:
+ node.verified = indata['verified']
+ if 'enabled' in indata:
+ node.enabled = indata['enabled']
+ if 'hostname' in indata and indata['hostname']:
+ node.hostname = indata['hostname']
+ if 'pubkey' in indata and indata['pubkey']:
+ # Verify that PEM works:
+ try:
+ plugins.crypto.loads(indata['pubkey'])
+ except:
+ raise API.exception(400, "Could not save changes: Bad PEM payload passed!")
+ node.pubkey = indata['pubkey']
+ if 'description' in indata and indata['description']:
+ node.description = indata['description']
+ if 'location' in indata and indata['location']:
+ node.location = indata['location']
+
+ # All done, save node and exit
+ node.save()
+ del node # just to be sure
+
+ yield json.dumps({"okay": True, "message": "Changes saved"}, indent = 2)
+ return
+
+ # Finally, if we hit a method we don't know, balk!
+ yield API.exception(400, "I don't know this request method!!")
+
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@warble.apache.org
For additional commands, e-mail: commits-help@warble.apache.org