Add SSL support

This commit is contained in:
jdoe0 2016-06-25 23:59:59 +07:00
parent e093e3981e
commit 1678890d3d
3 changed files with 22 additions and 8 deletions

View File

@ -21,7 +21,7 @@ this is just a matter of:
install some of the dependencies we need there: install some of the dependencies we need there:
$ virtualenv ankisyncd.env $ virtualenv ankisyncd.env
$ ankisyncd.env/bin/easy_install webob simplejson $ ankisyncd.env/bin/easy_install webob simplejson eventlet
3. Download and install libanki. You can find the latest release of Anki here: 3. Download and install libanki. You can find the latest release of Anki here:
@ -38,7 +38,8 @@ install some of the dependencies we need there:
b. Copy the entire directory to /usr/share/anki b. Copy the entire directory to /usr/share/anki
4. Copy the example.ini to production.ini and edit for your needs. 4. Copy the example.ini to production.ini and edit for your needs. Warning: If
you disable SSL, login credentials will be transported in plain text!
5. Create authentication database: 5. Create authentication database:
@ -63,9 +64,11 @@ To make Anki use ankisyncd as its sync server, create a file (name it something
like ankisyncd.py) containing the code below and put it in ~/Anki/addons. like ankisyncd.py) containing the code below and put it in ~/Anki/addons.
import anki.sync import anki.sync
import httplib2
anki.sync.SYNC_BASE = 'http://127.0.0.1:27701/' anki.sync.SYNC_BASE = 'http://127.0.0.1:27701/'
anki.sync.SYNC_MEDIA_BASE = 'http://127.0.0.1:27701/msync/' anki.sync.SYNC_MEDIA_BASE = 'http://127.0.0.1:27701/msync/'
anki.sync.httpCon = lambda: httplib2.Http()
Replace 127.0.0.1 with the IP address or the domain name of your server if Replace 127.0.0.1 with the IP address or the domain name of your server if
ankisyncd is not running on the same machine as Anki. ankisyncd is not running on the same machine as Anki.

View File

@ -1,6 +1,9 @@
[sync_app] [sync_app]
host = 127.0.0.1 host = 127.0.0.1
port = 27701 port = 27701
ssl = true
certfile = /etc/ssl/certs/server.pem
keyfile = /etc/ssl/private/privkey.pem
data_root = ./collections data_root = ./collections
base_url = /sync/ base_url = /sync/
base_media_url = /msync/ base_media_url = /msync/

View File

@ -737,20 +737,28 @@ def make_app(global_conf, **local_conf):
return SyncApp(**local_conf) return SyncApp(**local_conf)
def main(): def main():
from wsgiref.simple_server import make_server from eventlet import wsgi,wrap_ssl,listen
from ankisyncd.thread import shutdown from ankisyncd.thread import shutdown
config = SafeConfigParser() config = SafeConfigParser()
config.read("ankisyncd.conf") config.read("ankisyncd.conf")
ankiserver = SyncApp(config) ankiserver = SyncApp(config)
httpd = make_server('', config.getint("sync_app", "port"), ankiserver) host = config.get("sync_app", "host")
port = config.getint("sync_app", "port")
if(config.getboolean("sync_app", "ssl")):
certfile = config.get("sync_app", "certfile")
keyfile = config.get("sync_app", "keyfile")
socket = wrap_ssl( listen((host, port)),
certfile=certfile,
keyfile=keyfile,
server_side=True )
else:
socket = listen((host, port))
try: try:
print "Starting..." wsgi.server(socket, ankiserver)
httpd.serve_forever()
except KeyboardInterrupt:
print "Exiting ..."
finally: finally:
shutdown() shutdown()