summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKristofer Hallin <kristofer@sunet.se>2021-10-06 08:43:07 +0200
committerKristofer Hallin <kristofer@sunet.se>2021-10-06 08:43:07 +0200
commit0dac1d1f4138419fbf4d0ff65a0ecad1b8220920 (patch)
tree8122acc889b539725d2a8e23988912c01609c246 /src
parente65ebe9010f618dfa81d7d26d8bad456accfcd6e (diff)
Now easier to put UWSGI and NGINX in front of the API.
Diffstat (limited to 'src')
-rwxr-xr-xsrc/wsgi.py64
1 files changed, 26 insertions, 38 deletions
diff --git a/src/wsgi.py b/src/wsgi.py
index 3c3d363..b7de59f 100755
--- a/src/wsgi.py
+++ b/src/wsgi.py
@@ -10,6 +10,16 @@ from db import DictDB
from base64 import b64decode
from wsgiref.simple_server import make_server
+try:
+ database = os.environ['COUCHDB_NAME']
+ hostname = os.environ['COUCHDB_HOSTNAME']
+ username = os.environ['COUCHDB_USER']
+ password = os.environ['COUCHDB_PASSWORD']
+except KeyError:
+ print('The environment variables COUCHDB_NAME, COUCHDB_HOSTNAME,' +
+ ' COUCHDB_USER and COUCHDB_PASSWORD must be set.')
+ sys.exit(-1)
+
class CollectorResource():
def __init__(self, db, users):
@@ -103,49 +113,27 @@ class EPAdd(CollectorResource):
resp.text = repr(keys) + '\n'
-def init(url_res_map, addr='', port=8000):
+def main(port=8000, wsgi_helper=False):
+ db = DictDB(database, hostname, username, password)
+ users = authn.UserDB('wsgi_demo_users.yaml')
+ resources_map = [
+ ('/sc/v0/add', EPAdd(db, users)),
+ ('/sc/v0/get', EPGet(db, users))
+ ]
app = falcon.App(cors_enable=True)
- for url, res in url_res_map:
+
+ for url, res in resources_map:
app.add_route(url, res)
- return make_server(addr, port, app)
-
-
-def main():
- # Simple demo. Run it from the demo directory where a sample user
- # database can be found:
- #
- # $ cd demo && ../src/wsgi.py
- # Serving on port 8000...
- #
- # 1. Try adding some observations, basic auth user:pw from
- # wsgi_demo_users.yaml, including {"domain": "sunet.se"} in at
- # least one of them:
- #
- # $ echo '[{"ip": "192.168.0.1", "port": 80, "domain": "sunet.se"}]' | curl -s -u user3:pw3 --data-binary @- http://localhost:8000/sc/v0/add
- #
- # 2. Try retreiving all observations for a user with read access
- # to 'sunet.se':
- #
- # $ curl -s -u user1:pw1 http://localhost:8000/sc/v0/get | json_pp -json_opt utf8,pretty
-
- try:
- database = os.environ['DB_NAME']
- hostname = os.environ['DB_HOSTNAME']
- username = os.environ['DB_USERNAME']
- password = os.environ['DB_PASSWORD']
- except KeyError:
- print('The environment variables DB_NAME, DB_HOSTNAME, DB_USERNAME ' +
- 'and DB_PASSWORD must be set.')
- sys.exit(-1)
- db = DictDB(database, hostname, username, password)
- users = authn.UserDB('wsgi_demo_users.yaml')
+ if not wsgi_helper:
+ print('Serving on port 8000...')
+ httpd = make_server('', port, app)
+ httpd.serve_forever()
- httpd = init([('/sc/v0/add', EPAdd(db, users)),
- ('/sc/v0/get', EPGet(db, users))])
- print('Serving on port 8000...')
- httpd.serve_forever()
+ return app
if __name__ == '__main__':
sys.exit(main())
+else:
+ app = main(port=8000, wsgi_helper=True)