diff --git a/basic_ap.py b/basic_ap.py
new file mode 100644
index 0000000..f39041b
--- /dev/null
+++ b/basic_ap.py
@@ -0,0 +1,76 @@
+# This is a simple python flask implementation of 'How To Implement A Basic ActivityPub Server'
+# https://blog.joinmastodon.org/2018/06/how-to-implement-a-basic-activitypub-server/
+# © 2018 homebrewserver.club contributors
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU 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 General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+import flask, os
+from flask import request
+from flask import Response
+
+#Config
+DOMAIN = 'https://my-example.com'
+USERNAME = 'alice'
+
+def public_key():
+ """
+ Use commandline openssl to generate a public and private key
+ """
+ if not os.path.exists('public.pem'):
+ os.system('openssl genrsa -out private.pem 2048')
+ os.system('openssl rsa -in private.pem -outform PEM -pubout -out public.pem')
+ else:
+ public_key = open('public.pem').read()
+ public_key = public_key.replace('\n','\\n') #public key shouldn't contain verbatim linebreaks in json
+ return public_key
+
+public_key() #generate public_key on first launch
+
+#Flask
+app = flask.Flask(__name__)
+
+@app.route('/')
+def index():
+ return 'It works! Now try to look for a user@my-example.com via the mastodon interface'
+
+@app.route('/.well-known/webfinger')
+def finger():
+ """
+ Respond to webfinger queries (GET /.well-known/webfinger?resource=acct:alice@my-example.com) with a json object pointing to the actor
+ see templates/webfinger.json
+
+ """
+ if request.args.get('resource'):
+ query = request.args.get('resource')
+
+ actor = query.split(':')[1].split('@')[0] # from 'acct:alice@my-example.com' to 'alice'
+
+ json = flask.render_template('webfinger.json', query=query, actor=actor, domain=DOMAIN) # render our ActivityPub answer
+
+ return Response(response=json, status=200, mimetype="application/json") # return that answer as a json object
+
+@app.route('/users/')
+def profile(actor):
+ """
+ Return an Actor object
+ see templates/actor.json
+ """
+ json = flask.render_template('actor.json', preferred_username=USERNAME, actor=actor, domain=DOMAIN, public_key=public_key()) # render our ActivityPub answer
+ return Response(response=json, status=200, mimetype="application/json") # return that answer as a json object
+
+
+if __name__ == '__main__':
+ app.debug =True
+ app.run()
+
diff --git a/start.py b/start.py
deleted file mode 100644
index 651e6d3..0000000
--- a/start.py
+++ /dev/null
@@ -1,61 +0,0 @@
-import flask, os
-from flask import request
-from flask import Response
-
-
-# 51.15.76.123 - - [13/Nov/2018:21:06:48 +0100] "GET /.well-known/webfinger?resource=acct:r@roelof.info HTTP/1.1" 404 4021 "-" "http.rb/3.3.0 (Mastodon/2.6.1; +https://post.lurk.org/)"
-# 51.15.76.123 - - [13/Nov/2018:21:06:48 +0100] "GET /.well-known/host-meta HTTP/1.1" 404 4021 "-" "http.rb/3.3.0 (Mastodon/2.6.1; +https://post.lurk.org/)
-
-#https://blog.joinmastodon.org/2018/06/how-to-implement-a-basic-activitypub-server/
-
-#https://blog.joinmastodon.org/2018/07/how-to-make-friends-and-verify-requests/
-
-
-#Config
-DOMAIN = 'https://poep.club'
-USERNAME = 'The Username'
-
-def public_key():
- if not os.path.exists('public.pem'):
- os.system('openssl genrsa -out private.pem 2048')
- os.system('openssl rsa -in private.pem -outform PEM -pubout -out public.pem')
- else:
- public_key = open('public.pem').read()
- public_key = public_key.replace('\n','\\n') #public key shouldn't contain verbatim linebreaks
- return public_key
-
-public_key() #generate public_key on first launch
-
-#Flask
-app = flask.Flask(__name__)
-
-@app.route('/')
-def index():
- return 'test'
-
-@app.route('/.well-known/webfinger')
-def finger():
- """
- Respond to webfinger queries with a json object pointing at the actor
- """
- if request.args.get('resource'):
- query = request.args.get('resource')
-
- actor = query.split(':')[1].split('@')[0] # from 'acct:alice@my-example.com' to 'alice'
-
- #"subject": "acct:alice@my-example.com",
-
- json = flask.render_template('webfinger.json', query=query, actor=actor, domain=DOMAIN) # render our ActivityPub answer
-
- return Response(response=json, status=200, mimetype="application/json") # return that as a json object
-
-@app.route('/users/')
-def profile(actor):
- json = flask.render_template('actor.json', username=USERNAME, actor=actor, domain=DOMAIN, public_key=public_key()) # render our ActivityPub answer
- return Response(response=json, status=200, mimetype="application/json") # return that as a json object
-
-
-if __name__ == '__main__':
- app.debug =True
- app.run()
-