From 7114126ba5dcb8b50cc666896e2214a4d0cb278d Mon Sep 17 00:00:00 2001 From: andis Date: Sun, 6 Sep 2020 08:32:28 +0000 Subject: [PATCH 1/3] ep api class --- fet2020/documents/__init__.py | 48 ++++++-------------------------- fet2020/documents/api.py | 37 ++++++++++++++++++++++++ fet2020/documents/etherpadlib.py | 17 ++++++++++- fet2020/fet2020/settings.py | 4 ++- fet2020/members/views.py | 4 +-- fet2020/posts/forms.py | 2 +- fet2020/posts/models.py | 11 +++++--- 7 files changed, 74 insertions(+), 49 deletions(-) create mode 100644 fet2020/documents/api.py diff --git a/fet2020/documents/__init__.py b/fet2020/documents/__init__.py index b592ac86..815ca963 100644 --- a/fet2020/documents/__init__.py +++ b/fet2020/documents/__init__.py @@ -4,50 +4,18 @@ from datetime import datetime, timedelta from django.utils.text import slugify import urllib.parse t = datetime.now() + timedelta(days=1) - - +from django.conf import settings +import os +from .api import ep_api # from .etherpadlib import get_ep_sessionid2, add_ep_cookie - - -SERVER_URL = "https://etherpad2.2020.fet.at/" - -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_sessionid(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 +SERVER_URL = settings.ETHERPAD_CLIENT["exturl"] +ep=ep_api() def get_pad_link(padID): - return urllib.parse.urljoin(SERVER_URL, 'p/' + g["groupID"] + '$' + slugify(padID)) - + if ep.get_epc(): + return urllib.parse.urljoin(SERVER_URL, 'p/' + ep.group["groupID"] + '$' + slugify(padID)) + return "" def add_ep_to_response(request, response): if request.user is None: diff --git a/fet2020/documents/api.py b/fet2020/documents/api.py new file mode 100644 index 00000000..e2c19905 --- /dev/null +++ b/fet2020/documents/api.py @@ -0,0 +1,37 @@ +from django.conf import settings +import os +import urllib.parse +from etherpad_lite import EtherpadLiteClient +class ep_api(): + def __init__(self): + self.group=None + self.epc=None + return + + def load(self): + try: + with open(os.path.abspath(settings.ETHERPAD_CLIENT["apikey"]), "r") as f: + k = f.read() + epc = EtherpadLiteClient( + base_params={'apikey': k, }, + base_url=urllib.parse.urljoin(settings.ETHERPAD_CLIENT["url"], "api") + ) + g = epc.createGroupIfNotExistsFor(groupMapper="fet") + self.group=g + self.epc=epc + except Exception as e: + raise e + self.group=None + self.epc=None + 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) + return padid + def get_epc(self): + if self.epc: + return self.epc + self.load() + return self.epc \ No newline at end of file diff --git a/fet2020/documents/etherpadlib.py b/fet2020/documents/etherpadlib.py index f23610bd..323cad9e 100644 --- a/fet2020/documents/etherpadlib.py +++ b/fet2020/documents/etherpadlib.py @@ -4,7 +4,8 @@ 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() with open("/srv/andis_test/etherpad_test2/etherpad-lite/APIKEY.txt", "r") as f: k = f.read() @@ -51,4 +52,18 @@ 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, + expires=expires, + domain=".2020.fet.at", + path="/p" + ) return response diff --git a/fet2020/fet2020/settings.py b/fet2020/fet2020/settings.py index cc773ddf..e01128cd 100644 --- a/fet2020/fet2020/settings.py +++ b/fet2020/fet2020/settings.py @@ -192,6 +192,8 @@ THUMBNAIL_ALIASES = { } ETHERPAD_CLIENT = { - 'url': "http://localhost:9003" + 'url': "http://localhost:9003", + 'exturl': "https://etherpad2.2020.fet.at/", + 'apikey': "/srv/andis_test/etherpad_test2/etherpad-lite/APIKEY.txt" } diff --git a/fet2020/members/views.py b/fet2020/members/views.py index 3bd506e2..d82db449 100644 --- a/fet2020/members/views.py +++ b/fet2020/members/views.py @@ -41,8 +41,8 @@ def jobs_view(request, slug=None): job_list.append((job_names[idx], active_members[idx], inactive_members[idx])) context = { - "job_group": job_group, - "job_list": job_list, + "job_group": job_group, # Das sind die Tabs + "job_list": job_list, # Das ist die Liste, die dargestellt wird } return render(request, 'members/index.html', context) diff --git a/fet2020/posts/forms.py b/fet2020/posts/forms.py index 77efafa2..ef256577 100644 --- a/fet2020/posts/forms.py +++ b/fet2020/posts/forms.py @@ -52,7 +52,7 @@ class MyEventForm(MyPostForm): class MyFetMeetingForm(MyEventForm): class Meta: model = FetMeeting - fields = ['event_start', 'event_end', 'tags', 'has_agenda'] + fields = ['event_start', 'event_end', 'tags', 'has_agenda','agenda_key'] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # to get the self.fields set diff --git a/fet2020/posts/models.py b/fet2020/posts/models.py index cfb2a6b9..483618cd 100644 --- a/fet2020/posts/models.py +++ b/fet2020/posts/models.py @@ -9,7 +9,7 @@ from django.utils.translation import gettext_lazy as _ from members.models import Member from taggit.managers import TaggableManager # import documents - +from documents import ep # from ckeditor_uploader import RichTextUploadingField # import uuid @@ -200,7 +200,9 @@ class Post(models.Model): if (self.id is None) and (not self.slug): self.slug = slugify(self.public_date.date()) + "-" + slugify(self.title) - if self.has_agenda and (self.agenda_key == "" or self.agenda_key is None): + if self.has_agenda:# and (self.agenda_key == "" or self.agenda_key is None): + self.agenda_key= ep.createPadifNotExists(self.slug+"agenda") + print("AgendaKey: %s" %self.agenda_key) print("should create an agenda document") if self.has_protocol and (self.agenda_key == "" or self.agenda_key is None): @@ -297,8 +299,9 @@ class FetMeeting(Event): slug = slugify(self.event_start.date()) + "-" + slugify("Fachschaftssitzung") - if Post.objects.filter(slug=slug).count() != 0: - raise ValidationError(_('Es existiert bereits eine Sitzung mit demselben Datum.')) + #dieser Check verhindert erneutes speichern + #if Post.objects.filter(slug=slug).count() != 0: + # raise ValidationError(_('Es existiert bereits eine Sitzung mit demselben Datum.')) def save(self, *args, **kwargs): self.title = "Fachschaftssitzung" From 4459e72d9d3d149607b95f5456fd4e8a73be0a31 Mon Sep 17 00:00:00 2001 From: andis Date: Sun, 6 Sep 2020 08:35:59 +0000 Subject: [PATCH 2/3] =?UTF-8?q?if=20mombers=20f=C3=BCr=20job=20list?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fet2020/templates/members/jobs_list.html | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/fet2020/templates/members/jobs_list.html b/fet2020/templates/members/jobs_list.html index 0fafba93..e2514a16 100644 --- a/fet2020/templates/members/jobs_list.html +++ b/fet2020/templates/members/jobs_list.html @@ -1,11 +1,12 @@ - +{% if active_members %} Aktuelle Mitglieder: - {% with job_memberships=active_members %} {% include 'members/partials/_job_membership_grid.html' %} {% endwith %} - +{% endif %} +{% if inactive_members %} Vergangene Mitglieder: {% with job_memberships=inactive_members %} {% include 'members/partials/_job_membership_grid.html' %} {% endwith %} +{% endif %} From f9d8edc81a4da7db2168176f523134f288b2f34a Mon Sep 17 00:00:00 2001 From: andis Date: Mon, 7 Sep 2020 06:32:19 +0000 Subject: [PATCH 3/3] 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)