From e52739890e3756812f57a3764012cc658abdd84b Mon Sep 17 00:00:00 2001 From: andis Date: Thu, 23 Jul 2020 07:44:21 +0000 Subject: [PATCH] added documents as a app and model --- fet2020/documents/__init__.py | 12 +++ fet2020/documents/admin.py | 23 +++++ fet2020/documents/apps.py | 7 ++ fet2020/documents/migrations/__init__.py | 0 fet2020/documents/models.py | 8 ++ fet2020/documents/tests.py | 3 + fet2020/documents/urls.py | 6 ++ fet2020/documents/views.py | 91 +++++++++++++++++++ fet2020/fet2020/settings.py | 2 + fet2020/fet2020/urls.py | 1 + .../templates/admin/documents/app_index.html | 7 ++ .../admin/documents/change_list.html | 7 ++ .../templates/admin/documents/preview.html | 5 + fet2020/templates/admin/index.html | 7 ++ fet2020/templates/documents/base.html | 50 ++++++++++ fet2020/templates/documents/pad.html | 34 +++++++ 16 files changed, 263 insertions(+) create mode 100644 fet2020/documents/__init__.py create mode 100644 fet2020/documents/admin.py create mode 100644 fet2020/documents/apps.py create mode 100644 fet2020/documents/migrations/__init__.py create mode 100644 fet2020/documents/models.py create mode 100644 fet2020/documents/tests.py create mode 100644 fet2020/documents/urls.py create mode 100644 fet2020/documents/views.py create mode 100644 fet2020/templates/admin/documents/app_index.html create mode 100644 fet2020/templates/admin/documents/change_list.html create mode 100644 fet2020/templates/admin/documents/preview.html create mode 100644 fet2020/templates/admin/index.html create mode 100644 fet2020/templates/documents/base.html create mode 100644 fet2020/templates/documents/pad.html diff --git a/fet2020/documents/__init__.py b/fet2020/documents/__init__.py new file mode 100644 index 00000000..ae69a266 --- /dev/null +++ b/fet2020/documents/__init__.py @@ -0,0 +1,12 @@ +from etherpad_lite import EtherpadLiteClient +from django.conf import settings +from datetime import datetime, timedelta + +t=datetime.now() + timedelta(days=1) + +with open("/srv/andis_test/etherpad-lite/etherpad-lite/APIKEY.txt","r") as f: + k=f.read() + epc=EtherpadLiteClient( base_params={'apikey':k,}, base_url="http://localhost:9001/api") + a=epc.createAuthorIfNotExistsFor(name="andis", authorMapper="andis") + g=epc.createGroupIfNotExistsFor(groupMapper="fet") + diff --git a/fet2020/documents/admin.py b/fet2020/documents/admin.py new file mode 100644 index 00000000..e7e1916d --- /dev/null +++ b/fet2020/documents/admin.py @@ -0,0 +1,23 @@ +from django.contrib import admin +from .models import Document +from django.urls import path +from django.contrib.auth import views as auth_views +from django.shortcuts import render + + +@admin.register(Document) +class DocumentModelAdmin(admin.ModelAdmin): + def my_view(self,request, extra_context=None): + return render(request,"admin/documents/preview.html") + + def get_urls(self): + urls = super().get_urls() + select_list_url = [ path("/preview", self.admin_site.admin_view(self.my_view), + name='preview'), + path("preview", self.admin_site.admin_view(self.my_view), + name='preview') + + ] + return select_list_url #+ urls + +#admin.site.register(Document,DocumentModelAdmin) diff --git a/fet2020/documents/apps.py b/fet2020/documents/apps.py new file mode 100644 index 00000000..4cf9904d --- /dev/null +++ b/fet2020/documents/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class DocumentsConfig(AppConfig): + name = 'documents' +from django.contrib.admin.apps import AdminConfig + diff --git a/fet2020/documents/migrations/__init__.py b/fet2020/documents/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/fet2020/documents/models.py b/fet2020/documents/models.py new file mode 100644 index 00000000..bdfa2db8 --- /dev/null +++ b/fet2020/documents/models.py @@ -0,0 +1,8 @@ +from django.db import models + +# Create your models here. +class Document(models.Model): + key = models.CharField(max_length=200, primary_key=True) + + + diff --git a/fet2020/documents/tests.py b/fet2020/documents/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/fet2020/documents/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/fet2020/documents/urls.py b/fet2020/documents/urls.py new file mode 100644 index 00000000..3bb2a3a6 --- /dev/null +++ b/fet2020/documents/urls.py @@ -0,0 +1,6 @@ +import documents.views as views +from django.urls import path + +urlpatterns=[ + path("document/", views.document) +] \ No newline at end of file diff --git a/fet2020/documents/views.py b/fet2020/documents/views.py new file mode 100644 index 00000000..dd61aa26 --- /dev/null +++ b/fet2020/documents/views.py @@ -0,0 +1,91 @@ +from django.shortcuts import render + +# Create your views here. + + +from django.http import HttpResponseRedirect +from django.template import RequestContext +from django.contrib.auth.decorators import login_required +from django.utils.translation import ugettext_lazy as _ +import urllib +from urllib.parse import urlparse +from .models import Document +from documents import epc +from documents import g as group +SERVER_URL="http://etherpad.2020.fet.at/" + +import datetime +@login_required +def document(request, id=None): + """Create and session and display an embedded pad + """ + + # Initialize some needed values + #pad = Document.objects.get(key=id) + padID=id + padLink = SERVER_URL + 'p/' + group["groupID"] + '$' + \ + padID + server = urlparse(SERVER_URL) + author = epc.createAuthorIfNotExistsFor(name=str(request.user), authorMapper=str(request.user))['authorID'] + + + # Create the session on the etherpad-lite side + expires = datetime.datetime.utcnow() + datetime.timedelta( + hours=3 + ) + epclient = epc + + try: + result = epclient.createSession( + groupID=str(group['groupID']), + authorID=str(author), + validUntil=str(int(expires.timestamp())) + ) + except Exception as e: + response = render( + 'etherpad-lite/pad.html', + { + 'pad': padID, + 'link': padLink, + 'server': str(server), + 'uname': str(request.user), + 'error': 'etherpad-lite session request returned:' + + '"' + str(e) + '"' + } + + ) + return response + + # Set up the response + response = render(request, + 'documents/pad.html', + { + 'pad': padID, + 'link': padLink, + 'server': str(server), + 'uname': str(request.user), + 'error': False + }#, context=(request) + ) + + # Delete the existing session first + if ('padSessionID' in request.COOKIES): + epclient.deleteSession(request.COOKIES['sessionID']) + response.delete_cookie('sessionID', server.hostname) + response.delete_cookie('padSessionID') + + # Set the new session cookie for both the server and the local site + response.set_cookie( + 'sessionID', + value=result['sessionID'], + expires=expires, + domain=server.hostname, + httponly=False + ) + response.set_cookie( + 'padSessionID', + value=result['sessionID'], + expires=expires, + httponly=False + ) + return response \ No newline at end of file diff --git a/fet2020/fet2020/settings.py b/fet2020/fet2020/settings.py index 765869d3..06d273d8 100644 --- a/fet2020/fet2020/settings.py +++ b/fet2020/fet2020/settings.py @@ -15,6 +15,7 @@ import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +SESSION_COOKIE_DOMAIN =".2020.fet.at" # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/ @@ -34,6 +35,7 @@ CKEDITOR_UPLOAD_PATH = 'upload' INSTALLED_APPS = [ 'posts.apps.PostsConfig', 'members.apps.MembersConfig', + 'documents.apps.DocumentsConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', diff --git a/fet2020/fet2020/urls.py b/fet2020/fet2020/urls.py index 0c186aad..f9ab1f0a 100644 --- a/fet2020/fet2020/urls.py +++ b/fet2020/fet2020/urls.py @@ -28,6 +28,7 @@ router.register(r'members', MemberViewSet) urlpatterns = [ path('posts/', include('posts.urls')), + path('documents/', include('documents.urls')), path('admin/doc/', include('django.contrib.admindocs.urls')), path('admin/', admin.site.urls), path('', views.index, name='home'), diff --git a/fet2020/templates/admin/documents/app_index.html b/fet2020/templates/admin/documents/app_index.html new file mode 100644 index 00000000..d2d9d268 --- /dev/null +++ b/fet2020/templates/admin/documents/app_index.html @@ -0,0 +1,7 @@ +{% extends "admin/app_index.html" %} + +{% block sidebar %} +

Hello

+
  • asdf
+ +{% endblock %} \ No newline at end of file diff --git a/fet2020/templates/admin/documents/change_list.html b/fet2020/templates/admin/documents/change_list.html new file mode 100644 index 00000000..4ef01650 --- /dev/null +++ b/fet2020/templates/admin/documents/change_list.html @@ -0,0 +1,7 @@ +{% extends "admin/change_list.html" %} + +{% block object-tools-items %} + +{{ block.super }} +
  • sdf
  • +{% endblock %} \ No newline at end of file diff --git a/fet2020/templates/admin/documents/preview.html b/fet2020/templates/admin/documents/preview.html new file mode 100644 index 00000000..8e44b01d --- /dev/null +++ b/fet2020/templates/admin/documents/preview.html @@ -0,0 +1,5 @@ + +{% extends "admin/base_site.html" %} +{% block content %} +

    Preview

    +{% endblock %} \ No newline at end of file diff --git a/fet2020/templates/admin/index.html b/fet2020/templates/admin/index.html new file mode 100644 index 00000000..6d98ad89 --- /dev/null +++ b/fet2020/templates/admin/index.html @@ -0,0 +1,7 @@ +{% extends "admin/index.html" %} +{% block content%} +
    +{{block.super}} +Hello +
    +{% endblock %} \ No newline at end of file diff --git a/fet2020/templates/documents/base.html b/fet2020/templates/documents/base.html new file mode 100644 index 00000000..a7a7b388 --- /dev/null +++ b/fet2020/templates/documents/base.html @@ -0,0 +1,50 @@ + + +{% load i18n %} + + + + + {% block title %}{% endblock %} + + + + + + +
    + {% block wrapper %} +
    +
    + {% if messages %} +
    + {% block messages %} + {% for message in messages %} +
    + !{{ message.text }}! +
    + {% endfor %} + {% endblock %} +
    + {% endif %} + {% block content %}{% endblock %} +
    + + +
    + {% endblock %} +
    + + + + diff --git a/fet2020/templates/documents/pad.html b/fet2020/templates/documents/pad.html new file mode 100644 index 00000000..bc342cf1 --- /dev/null +++ b/fet2020/templates/documents/pad.html @@ -0,0 +1,34 @@ +{% extends "documents/base.html" %} + + +{% block title %}{{pad.name}}{% endblock %} + +{% block wrapper %} + {% if error %} +
    +
    +

    Errors:

    +

    {{error}}

    +
    +
    + {% else %} + + + + {% endif %} + +{% endblock %} \ No newline at end of file