diff --git a/templates/wiki.html b/templates/wiki.html
index 34735c5..f535c68 100644
--- a/templates/wiki.html
+++ b/templates/wiki.html
@@ -1,6 +1,10 @@
{% extends "layout.html" %}
-{% block content %}
-
{{ slug }}
-{{ content }}
-asdf
+{% block content %}
+ edit
+
+{{ page.id }}
+{{page.content | safe}}
+
+
+
{% endblock %}
\ No newline at end of file
diff --git a/wiki/__init__.py b/wiki/__init__.py
index 0e47001..de1843c 100644
--- a/wiki/__init__.py
+++ b/wiki/__init__.py
@@ -1,7 +1,78 @@
-from misc import SaveFileMapping, SaveFileObject
+#from misc import SaveFileMapping, SaveFileObject
+from .api import EtherpadLiteLazyAPI
+from slugify import slugify
+from lazymappingstorage import LazyMappingStorage, LazyStorageObject
+from flask import Blueprint, make_response, render_template
+import bs4
+import re
+from dataclasses import dataclass
+from anytree import NodeMixin
-class Page(SaveFileObject):
- pass
+ep=EtherpadLiteLazyAPI(
+ url="http://etherpad:9101",
+ exturl="https://bot.2020.fet.at/etherpad/",
+ keyfile="services/etherpad/APIKEY.txt",
+ groupmapper="fetwiki"
+ )
-class PageManager(SaveFileMapping):
- pass
\ No newline at end of file
+
+
+def clean_path(path):
+ path = path.split("/")
+ return "/".join([slugify(p) for p in path])
+
+
+def parse_intern_page(text):
+ if not text: return text
+ soup = bs4.BeautifulSoup(text, "html.parser")
+ textNodes = soup.findAll(text=True)
+ if not textNodes: return text
+ for textNode in textNodes:
+ text = re.sub('\[(\w+)\]','replaced!!!: - \g<1> - ',textNode)
+ text = re.sub('^(\w+)\:\s?(.+)$','config param - \g<1> : \g<2> ',text)
+ text = re.sub('(#[\w-]+)\s$','TAG( \g<1> ) ',text)
+ print(text)
+ textNode.replaceWith(text)
+
+ return str(soup)
+
+@dataclass
+class Page(LazyStorageObject, NodeMixin):
+ path: str=None
+ count: int=1
+ @property
+ def id(self):
+ return slugify(self.path)
+ @property
+ def editlink(self):
+ return ep.getPadLink(self.id)
+ @property
+ def content(self):
+ return parse_intern_page(ep.getPadHTML(self.id))
+
+class PageManager(LazyMappingStorage):
+ filename="pages.yaml"
+ object_class=Page
+ def __getitem__(self,key):
+ o = super().__getitem__(clean_path(key))
+ o.path = clean_path(key)
+ if not o.path=="":
+ o.parent=self["/".join(o.path.split("/")[:-1])]
+
+ return o
+ def __setitem__(self,key,value):
+ super().__setitem__(clean_path(key),value)
+
+pages=PageManager()
+bp = Blueprint('wiki', __name__, url_prefix='/wiki')
+
+@bp.route('/')
+@bp.route('/')
+def web(path=""):
+
+ page=pages[path]
+ pages.to_file()
+
+ response=make_response(render_template("wiki.html", page=page))
+ response.set_cookie("sessionID",str(ep.getSessionID("andis")),path="/etherpad")
+ return response
\ No newline at end of file
diff --git a/wiki/api.py b/wiki/api.py
index 990e012..306cdde 100644
--- a/wiki/api.py
+++ b/wiki/api.py
@@ -3,9 +3,11 @@ import urllib.parse
from etherpad_lite import EtherpadLiteClient, EtherpadException
import logging
logger = logging.getLogger(__name__)
+from datetime import datetime, timedelta
#SERVER_URL = settings.ETHERPAD_CLIENT["exturl"]
logger.info("loading api.py")
+
class EtherpadLiteLazyAPI():
"""This is a small wrapper for EtherpadLiteClient
url is the url with port the client should connect to.
@@ -99,3 +101,23 @@ class EtherpadLiteLazyAPI():
if padID is None: return "#"
if not self.connect(): return "#"
return urllib.parse.urljoin(self.exturl, 'p/' + self.group["groupID"] + '$' + str(padID))
+
+ def getSessionID(self, username):
+ if not self.connect(): return "#"
+ author = self.epc.createAuthorIfNotExistsFor(
+ name=str(username),
+ authorMapper=str(username)
+ )['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
+ return result['sessionID']#, expires
+
diff --git a/wiki/etherpadlib.py b/wiki/etherpadlib.py
deleted file mode 100644
index 9014d8b..0000000
--- a/wiki/etherpadlib.py
+++ /dev/null
@@ -1,65 +0,0 @@
-from datetime import datetime, timedelta
-
-from .api import get_ep_client
-from authentications.decorators import ep_authenticated_user
-
-
-@ep_authenticated_user
-def __get_ep_sessionid(request):
- epc, group = get_ep_client()
- if not epc or not group:
- return None, None
-
- author = epc.createAuthorIfNotExistsFor(
- name=str(request.user),
- authorMapper=str(request.user)
- )['authorID']
-
- expires = datetime.utcnow() + timedelta(hours=3)
- try:
- result = epc.createSession(
- groupID=str(group['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):
- ep_sessid, expires = __get_ep_sessionid(request)
-
- if ep_sessid:
- response.set_cookie(
- "sessionID",
- ep_sessid,
- expires=expires,
- domain=".2020.fet.at",
- path="/"
- )
- response.set_cookie(
- "sessionID",
- ep_sessid,
- expires=expires,
- path="/etherpad"
- )
- return response
-
-
-def del_ep_cookie(request, response):
-
- if 'sessionID' in request.COOKIES:
- ep_sessionID = request.COOKIES['sessionID']
-
- epc, group = get_ep_client()
- epc.deleteSession(sessionID=ep_sessionID)
-
- response.delete_cookie(
- "sessionID",
- domain=".2020.fet.at",
- path="/"
- )
- return response