diff --git a/fet2020/documents/__init__.py b/fet2020/documents/__init__.py index b592ac86..94d1ce48 100644 --- a/fet2020/documents/__init__.py +++ b/fet2020/documents/__init__.py @@ -1,94 +1,19 @@ -from etherpad_lite import EtherpadLiteClient +# from etherpad_lite import EtherpadLiteClient # from django.conf import settings from datetime import datetime, timedelta -from django.utils.text import slugify +# from django.utils.text import slugify import urllib.parse +from django.conf import settings +# import os +from .api import ep +# from .etherpadlib import get_ep_sessionid2, add_ep_cookie +SERVER_URL = settings.ETHERPAD_CLIENT["exturl"] t = datetime.now() + timedelta(days=1) -# 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 - - def get_pad_link(padID): - return urllib.parse.urljoin(SERVER_URL, 'p/' + g["groupID"] + '$' + slugify(padID)) - - -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 + if padID is None: + return "#" + if ep.get_epc(): + return urllib.parse.urljoin(SERVER_URL, 'p/' + ep.group["groupID"] + '$' + str(padID)) + return "" diff --git a/fet2020/documents/api.py b/fet2020/documents/api.py new file mode 100644 index 00000000..3f0f63a7 --- /dev/null +++ b/fet2020/documents/api.py @@ -0,0 +1,83 @@ +from django.conf import settings +import os +import urllib.parse + +from datetime import datetime, timedelta +from etherpad_lite import EtherpadLiteClient, EtherpadException + + +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 checkPadExists(self, padID=None): + print(self.epc.listPads(groupID=self.group["groupID"])) + if not padID: + return False + try: + self.epc.getRevisionsCount(padID=self.group["groupID"] + "$" + padID) + except EtherpadException as e: + print(e) + return False + return True + + def createPadifNotExists(self, padid): + self.get_epc() + 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 + + 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() diff --git a/fet2020/documents/etherpadlib.py b/fet2020/documents/etherpadlib.py index f23610bd..7f7fb709 100644 --- a/fet2020/documents/etherpadlib.py +++ b/fet2020/documents/etherpadlib.py @@ -1,49 +1,24 @@ -from etherpad_lite import EtherpadLiteClient +# from etherpad_lite import EtherpadLiteClient -from datetime import datetime, timedelta +# from datetime import datetime, timedelta # from django.utils.text import slugify -import urllib.parse +# import urllib.parse # from django.conf import settings - - -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 +from .api import ep 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, @@ -51,4 +26,11 @@ def add_ep_cookie(request, response): domain=".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 7a64d094..00164d21 100644 --- a/fet2020/members/views.py +++ b/fet2020/members/views.py @@ -40,8 +40,8 @@ def jobs_view(request, slug=None): ) 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 d96e06bb..838a976d 100644 --- a/fet2020/posts/forms.py +++ b/fet2020/posts/forms.py @@ -90,6 +90,7 @@ class MyEventForm(MyPostForm): class MyFetMeetingForm(MyEventForm): class Meta: model = FetMeeting + fields = ['event_start', 'event_end', 'tags', 'has_agenda', 'has_protocol'] labels = { 'event_start': _('Start der Sitzung'), diff --git a/fet2020/posts/models.py b/fet2020/posts/models.py index f7012bfa..23673dd2 100644 --- a/fet2020/posts/models.py +++ b/fet2020/posts/models.py @@ -7,11 +7,13 @@ from django.utils.text import slugify from django.utils.translation import gettext_lazy as _ from taggit.managers import TaggableManager +# import documents +from documents import ep + from .managers import ( PostManager, ArticleManager, NewsManager, AllEventManager, EventManager, FetMeetingManager ) - # from ckeditor_uploader import RichTextUploadingField # import uuid import re @@ -145,7 +147,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): diff --git a/fet2020/posts/views.py b/fet2020/posts/views.py index 95af1ae0..db6a3c25 100644 --- a/fet2020/posts/views.py +++ b/fet2020/posts/views.py @@ -75,7 +75,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)