major upgrade for etherpad

This commit is contained in:
2020-09-07 06:32:19 +00:00
parent b91869b11d
commit f9d8edc81a
4 changed files with 68 additions and 99 deletions

View File

@@ -6,57 +6,13 @@ import urllib.parse
t = datetime.now() + timedelta(days=1) t = datetime.now() + timedelta(days=1)
from django.conf import settings from django.conf import settings
import os import os
from .api import ep_api from .api import ep
# from .etherpadlib import get_ep_sessionid2, add_ep_cookie # from .etherpadlib import get_ep_sessionid2, add_ep_cookie
SERVER_URL = settings.ETHERPAD_CLIENT["exturl"] SERVER_URL = settings.ETHERPAD_CLIENT["exturl"]
ep=ep_api()
def get_pad_link(padID): def get_pad_link(padID):
if padID is None:
return "#"
if ep.get_epc(): 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 "" 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

View File

@@ -1,7 +1,11 @@
from django.conf import settings from django.conf import settings
import os import os
import urllib.parse import urllib.parse
from etherpad_lite import EtherpadLiteClient
from datetime import datetime, timedelta
from etherpad_lite import EtherpadLiteClient, EtherpadException
class ep_api(): class ep_api():
def __init__(self): def __init__(self):
self.group=None self.group=None
@@ -23,15 +27,56 @@ class ep_api():
raise e raise e
self.group=None self.group=None
self.epc=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() self.get_epc()
#if not self.epc: if not self.epc:
# return None return None
if self.epc.getRevisionsCount(padID=padid)["code"] == 1: # Pad doesn't exist if not self.checkPadExists(padID=padid): # Pad doesn't exist
self.epc.createPad(padid) self.epc.createGroupPad(groupID=self.group["groupID"],padName=padid,text="helloworld")
return padid return padid
def get_epc(self): def get_epc(self):
if self.epc: if self.epc:
return self.epc return self.epc
self.load() self.load()
return self.epc 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()

View File

@@ -4,47 +4,22 @@ from datetime import datetime, timedelta
# from django.utils.text import slugify # from django.utils.text import slugify
import urllib.parse import urllib.parse
# from django.conf import settings # from django.conf import settings
from .api import ep_api from .api import ep
ep=ep_api()
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): def add_ep_cookie(request, response):
response.set_cookie("HILib", "TestWert", domain="https://andis.2020.fet.at") 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( response.set_cookie(
"sessionID", "sessionID",
ep_sessid, ep_sessid,
@@ -52,13 +27,6 @@ def add_ep_cookie(request, response):
domain=".2020.fet.at", domain=".2020.fet.at",
path="/" path="/"
) )
response.set_cookie(
"sessionID",
ep_sessid,
expires=expires,
domain="etherpad2.2020.fet.at",
path="/"
)
response.set_cookie( response.set_cookie(
"sessionID", "sessionID",
ep_sessid, ep_sessid,

View File

@@ -62,7 +62,7 @@ def show(request, id=None):
"author_image": author_image, "author_image": author_image,
"next": get_next_dict(p), "next": get_next_dict(p),
"related_posts": p.tags.similar_objects(), "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) response = render(request, 'posts/show.html', context)