Mercurial > prosody-modules
annotate mod_rest/example/app.py @ 5256:44f7edd4f845
mod_http_oauth2: Reject non-local hosts in more code paths
We're not issuing tokens for users on remote hosts, we can't even
authenticate them since they're remote. Thus the host is always the
local module.host so no need to pass around the host in most cases or
use it for anything but enforcing the same host.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 16 Mar 2023 17:52:10 +0100 |
parents | f3fbfde9683d |
children |
rev | line source |
---|---|
3853 | 1 from flask import Flask, Response, request, jsonify |
2 | |
3 app = Flask("echobot") | |
4 | |
5 | |
3861
ede3d1724dd1
mod_rest: Attempt to auto-discover data type wanted by callback
Kim Alvefur <zash@zash.se>
parents:
3854
diff
changeset
|
6 @app.route("/api", methods=["OPTIONS"]) |
ede3d1724dd1
mod_rest: Attempt to auto-discover data type wanted by callback
Kim Alvefur <zash@zash.se>
parents:
3854
diff
changeset
|
7 def options(): |
3863
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
8 """ |
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
9 Startup check. Return an appropriate Accept header to confirm the |
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
10 data type to use. |
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
11 """ |
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
12 |
3861
ede3d1724dd1
mod_rest: Attempt to auto-discover data type wanted by callback
Kim Alvefur <zash@zash.se>
parents:
3854
diff
changeset
|
13 return Response(status=200, headers={"accept": "application/json"}) |
ede3d1724dd1
mod_rest: Attempt to auto-discover data type wanted by callback
Kim Alvefur <zash@zash.se>
parents:
3854
diff
changeset
|
14 |
ede3d1724dd1
mod_rest: Attempt to auto-discover data type wanted by callback
Kim Alvefur <zash@zash.se>
parents:
3854
diff
changeset
|
15 |
3853 | 16 @app.route("/api", methods=["POST"]) |
17 def hello(): | |
3863
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
18 """ |
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
19 Example RESTful JSON format stanza handler. |
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
20 """ |
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
21 |
3853 | 22 print(request.data) |
23 if request.is_json: | |
24 data = request.get_json() | |
25 | |
26 if "kind" not in data: | |
27 return Response(status=400) | |
28 | |
29 if data["kind"] == "message" and "body" in data: | |
3863
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
30 # Reply to a message |
3853 | 31 return jsonify({"body": "Yes this is flask app"}) |
32 | |
33 elif data["kind"] == "iq" and data["type"] == "get": | |
4248
f3fbfde9683d
mod_rest/example: Reorder things to match the disco#info feature order
Kim Alvefur <zash@zash.se>
parents:
4246
diff
changeset
|
34 if "disco" in data: |
3863
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
35 # Return supported features |
3853 | 36 return jsonify( |
37 { | |
38 "disco": { | |
39 "identities": [ | |
40 { | |
41 "category": "component", | |
42 "type": "generic", | |
43 "name": "Flask app", | |
44 } | |
45 ], | |
46 "features": [ | |
47 "http://jabber.org/protocol/disco#info", | |
48 "http://jabber.org/protocol/disco#items", | |
4246
53ae1df31950
mod_rest/example: Advertise version query support
Kim Alvefur <zash@zash.se>
parents:
3863
diff
changeset
|
49 "jabber:iq:version", |
3853 | 50 "urn:xmpp:ping", |
51 ], | |
52 } | |
53 } | |
54 ) | |
55 | |
56 elif "items" in data: | |
3863
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
57 # Disco items |
3853 | 58 return jsonify( |
59 {"items": [{"jid": "example.org", "name": "Example Dot Org"}]} | |
60 ) | |
61 | |
3854
25c34c9f755c
mod_rest: Add mapping of XEP-0092: Software Version
Kim Alvefur <zash@zash.se>
parents:
3853
diff
changeset
|
62 elif "version" in data: |
3863
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3861
diff
changeset
|
63 # Version info |
3854
25c34c9f755c
mod_rest: Add mapping of XEP-0092: Software Version
Kim Alvefur <zash@zash.se>
parents:
3853
diff
changeset
|
64 return jsonify({"version": {"name": "app.py", "version": "0"}}) |
25c34c9f755c
mod_rest: Add mapping of XEP-0092: Software Version
Kim Alvefur <zash@zash.se>
parents:
3853
diff
changeset
|
65 |
4248
f3fbfde9683d
mod_rest/example: Reorder things to match the disco#info feature order
Kim Alvefur <zash@zash.se>
parents:
4246
diff
changeset
|
66 elif "ping" in data: |
f3fbfde9683d
mod_rest/example: Reorder things to match the disco#info feature order
Kim Alvefur <zash@zash.se>
parents:
4246
diff
changeset
|
67 # Respond to ping |
f3fbfde9683d
mod_rest/example: Reorder things to match the disco#info feature order
Kim Alvefur <zash@zash.se>
parents:
4246
diff
changeset
|
68 return Response(status=204) |
f3fbfde9683d
mod_rest/example: Reorder things to match the disco#info feature order
Kim Alvefur <zash@zash.se>
parents:
4246
diff
changeset
|
69 |
3853 | 70 return Response(status=501) |
71 | |
72 | |
73 if __name__ == "__main__": | |
74 app.run() |