示例#1
0
def pad(request, pk):
    """Create and session and display an embedded pad
    """

    # Initialize some needed values
    pad = get_object_or_404(Pad, pk=pk)
    padLink = pad.server.url + 'p/' + pad.group.groupID + '$' + \
        urllib.parse.quote_plus(pad.name)
    server = urlparse(pad.server.url)
    author = PadAuthor.objects.get(user=request.user)

    # if author not in pad.group.authors.all():
    #     return render(
    #         request,
    #         'pad.html',
    #         {
    #             'pad': pad,
    #             'link': padLink,
    #             'server': server,
    #             'uname': author.user.__unicode__(),
    #             'error': _('You are not allowed to view or edit this pad')
    #         }
    #     )
    # Create the session on the etherpad-lite side
    expires = datetime.datetime.utcnow() + datetime.timedelta(
        seconds=config.SESSION_LENGTH)
    epclient = EtherpadLiteClient(pad.server.apikey, pad.server.apiurl)

    try:
        result = epclient.createSession(
            pad.group.groupID, author.authorID,
            time.mktime(expires.timetuple()).__str__())
    except Exception as e:
        return render(
            request, 'pad.html', {
                'pad':
                pad,
                'link':
                padLink,
                'server':
                server,
                'uname':
                author.user.__str__(),
                'error':
                _('etherpad-lite session request returned:') + ' "' + str(e) +
                '"'
            })

    response = render(
        request, 'pad.html', {
            'pad': pad,
            'link': padLink,
            'server': server,
            'uname': author.user.__str__(),
            'error': False
        })

    # 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(key='sessionID',
                        value=result['sessionID'],
                        expires=expires,
                        httponly=False)
    response.set_cookie(key='padSessionID',
                        value=result['sessionID'],
                        expires=expires,
                        httponly=False)
    # request.session['sessionID']= result['sessionID']
    # request.session['padSessionID']= result['sessionID']
    # request.set_expiry(expires)
    return response