From f9d8edc81a4da7db2168176f523134f288b2f34a Mon Sep 17 00:00:00 2001 From: andis Date: Mon, 7 Sep 2020 06:32:19 +0000 Subject: [PATCH] major upgrade for etherpad --- fet2020/documents/__init__.py | 52 +++------------------------- fet2020/documents/api.py | 59 ++++++++++++++++++++++++++++---- fet2020/documents/etherpadlib.py | 54 ++++++----------------------- fet2020/posts/views.py | 2 +- 4 files changed, 68 insertions(+), 99 deletions(-) diff --git a/fet2020/documents/__init__.py b/fet2020/documents/__init__.py index 815ca963..946e5ff4 100644 --- a/fet2020/documents/__init__.py +++ b/fet2020/documents/__init__.py @@ -6,57 +6,13 @@ import urllib.parse t = datetime.now() + timedelta(days=1) from django.conf import settings import os -from .api import ep_api +from .api import ep # from .etherpadlib import get_ep_sessionid2, add_ep_cookie SERVER_URL = settings.ETHERPAD_CLIENT["exturl"] -ep=ep_api() - def get_pad_link(padID): + if padID is None: + return "#" if ep.get_epc(): - return urllib.parse.urljoin(SERVER_URL, 'p/' + ep.group["groupID"] + '$' + slugify(padID)) + return urllib.parse.urljoin(SERVER_URL, 'p/' + ep.group["groupID"] + '$' + str(padID)) return "" - -def add_ep_to_response(request, response): - if request.user is None: - return response - # padID = id - server = SERVER_URL - # padLink = urllib.parse.urljoin(SERVER_URL , 'p/' + g["groupID"] + '$' + padID) - author = epc.createAuthorIfNotExistsFor( - name=str(request.user), - authorMapper=str(request.user) - )['authorID'] - expires = datetime.utcnow() + timedelta(hours=3) - - try: - result = epc.createSession( - groupID=str(g['groupID']), - authorID=str(author), - validUntil=str(int(expires.timestamp())) - ) - except Exception as e: - print(e) - return response - - if ('padSessionID' in request.COOKIES): - # TODO - fix it: epclient.deleteSession(request.COOKIES['sessionID']) - response.delete_cookie('sessionID', server.hostname) - response.delete_cookie('padSessionID') - - response = response.set_cookie( - 'sessionID', - value=result['sessionID'], - expires=expires, - domain="https://etherpad2.2020.fet.at", - httponly=False - ) - - response.set_cookie( - 'padSessionID', - value=result['sessionID'], - expires=expires, - httponly=False - ) - - return response diff --git a/fet2020/documents/api.py b/fet2020/documents/api.py index e2c19905..c5bc5bd3 100644 --- a/fet2020/documents/api.py +++ b/fet2020/documents/api.py @@ -1,7 +1,11 @@ from django.conf import settings import os import urllib.parse -from etherpad_lite import EtherpadLiteClient + +from datetime import datetime, timedelta +from etherpad_lite import EtherpadLiteClient, EtherpadException + + class ep_api(): def __init__(self): self.group=None @@ -23,15 +27,56 @@ class ep_api(): raise e self.group=None self.epc=None - def createPadifNotExists(self,padid): + + def checkPadExists(self,padID=None): + print( self.epc.listPads(groupID=self.group["groupID"])) + if not padID: + return False + try: + r=self.epc.getRevisionsCount(padID=self.group["groupID"]+"$"+padID) + except EtherpadException as e: + return False + return True + + def createPadifNotExists(self, padid): self.get_epc() - #if not self.epc: - # return None - if self.epc.getRevisionsCount(padID=padid)["code"] == 1: # Pad doesn't exist - self.epc.createPad(padid) + if not self.epc: + return None + if not self.checkPadExists(padID=padid): # Pad doesn't exist + self.epc.createGroupPad(groupID=self.group["groupID"],padName=padid,text="helloworld") return padid def get_epc(self): if self.epc: return self.epc self.load() - return self.epc \ No newline at end of file + return self.epc + + def get_ep_sessionid2(self,request): + if request.user is None: + return None, None + if not request.user.is_authenticated: + return None,None + # server = SERVER_URL + ep.get_epc() + author = self.epc.createAuthorIfNotExistsFor( + name=str(request.user), + authorMapper=str(request.user) + )['authorID'] + expires = datetime.utcnow() + timedelta( + hours=3 + ) + try: + result = self.epc.createSession( + groupID=str(self.group['groupID']), + authorID=str(author), + validUntil=str(int(expires.timestamp())) + ) + except Exception as e: + raise e + return None, None + + return result['sessionID'], expires + + + +ep=ep_api() \ No newline at end of file diff --git a/fet2020/documents/etherpadlib.py b/fet2020/documents/etherpadlib.py index 323cad9e..96459179 100644 --- a/fet2020/documents/etherpadlib.py +++ b/fet2020/documents/etherpadlib.py @@ -4,47 +4,22 @@ from datetime import datetime, timedelta # from django.utils.text import slugify import urllib.parse # from django.conf import settings -from .api import ep_api -ep=ep_api() +from .api import ep -with open("/srv/andis_test/etherpad_test2/etherpad-lite/APIKEY.txt", "r") as f: - k = f.read() - epc = EtherpadLiteClient( - base_params={'apikey': k, }, - base_url=urllib.parse.urljoin("http://localhost:9003", "api") - ) -# a = epc.createAuthorIfNotExistsFor(name="andis", authorMapper="andis") - g = epc.createGroupIfNotExistsFor(groupMapper="fet") - - -def get_ep_sessionid2(request): - if request.user is None: - return "NoUser", None - # server = SERVER_URL - - author = epc.createAuthorIfNotExistsFor( - name=str(request.user), - authorMapper=str(request.user) - )['authorID'] - expires = datetime.utcnow() + timedelta( - hours=3 - ) - try: - result = epc.createSession( - groupID=str(g['groupID']), - authorID=str(author), - validUntil=str(int(expires.timestamp())) - ) - except Exception as e: - raise e - return None, None - - return result['sessionID'], expires def add_ep_cookie(request, response): response.set_cookie("HILib", "TestWert", domain="https://andis.2020.fet.at") - ep_sessid, expires = get_ep_sessionid2(request) + ep_sessid, expires = ep.get_ep_sessionid2(request) + if ep_sessid is None: + response.set_cookie( + "sessionID", + "NOTAUTHENTICATED", + expires=expires, + domain=".2020.fet.at", + path="/" + ) + return response response.set_cookie( "sessionID", ep_sessid, @@ -52,13 +27,6 @@ def add_ep_cookie(request, response): domain=".2020.fet.at", path="/" ) - response.set_cookie( - "sessionID", - ep_sessid, - expires=expires, - domain="etherpad2.2020.fet.at", - path="/" - ) response.set_cookie( "sessionID", ep_sessid, diff --git a/fet2020/posts/views.py b/fet2020/posts/views.py index 40eb18f4..94df5125 100644 --- a/fet2020/posts/views.py +++ b/fet2020/posts/views.py @@ -62,7 +62,7 @@ def show(request, id=None): "author_image": author_image, "next": get_next_dict(p), "related_posts": p.tags.similar_objects(), - "ep_link": get_pad_link(p.slug + "-agenda"), + "ep_link": get_pad_link(p.agenda_key), } response = render(request, 'posts/show.html', context)