397 lines
35 KiB
Python
Executable File
397 lines
35 KiB
Python
Executable File
import BaseHTTPServer
|
|
import ClientConstants as CC
|
|
import collections
|
|
import Cookie
|
|
import hashlib
|
|
import httplib
|
|
import HydrusAudioHandling
|
|
import HydrusConstants as HC
|
|
import HydrusDocumentHandling
|
|
import HydrusExceptions
|
|
import HydrusFileHandling
|
|
import HydrusFlashHandling
|
|
import HydrusImageHandling
|
|
import HydrusServerAMP
|
|
import HydrusServerResources
|
|
import os
|
|
import random
|
|
import ServerConstants as SC
|
|
import SocketServer
|
|
import traceback
|
|
import urllib
|
|
import wx
|
|
import yaml
|
|
from twisted.internet import reactor, defer
|
|
from twisted.internet.protocol import ServerFactory
|
|
from twisted.internet.threads import deferToThread
|
|
from twisted.protocols import amp
|
|
from twisted.web.server import Request, Site, NOT_DONE_YET
|
|
from twisted.web.resource import Resource
|
|
from twisted.web.static import File as FileResource, NoRangeStaticProducer
|
|
|
|
eris = '''<html><head><title>hydrus</title></head><body><pre>
|
|
<font color="red">8888 8888888</font>
|
|
<font color="red">888888888888888888888888</font>
|
|
<font color="red">8888</font>:::<font color="red">8888888888888888888888888</font>
|
|
<font color="red">8888</font>::::::<font color="red">8888888888888888888888888888</font>
|
|
<font color="red">88</font>::::::::<font color="red">888</font>:::<font color="red">8888888888888888888888888</font>
|
|
<font color="red">88888888</font>::::<font color="red">8</font>:::::::::::<font color="red">88888888888888888888</font>
|
|
<font color="red">888 8</font>::<font color="red">888888</font>::::::::::::::::::<font color="red">88888888888 888</font>
|
|
<font color="red">88</font>::::<font color="red">88888888</font>::::<font color="gray">m</font>::::::::::<font color="red">88888888888 8</font>
|
|
<font color="red">888888888888888888</font>:<font color="gray">M</font>:::::::::::<font color="red">8888888888888</font>
|
|
<font color="red">88888888888888888888</font>::::::::::::<font color="gray">M</font><font color="red">88888888888888</font>
|
|
<font color="red">8888888888888888888888</font>:::::::::<font color="gray">M</font><font color="red">8888888888888888</font>
|
|
<font color="red">8888888888888888888888</font>:::::::<font color="gray">M</font><font color="red">888888888888888888</font>
|
|
<font color="red">8888888888888888</font>::<font color="red">88888</font>::::::<font color="gray">M</font><font color="red">88888888888888888888</font>
|
|
<font color="red">88888888888888888</font>:::<font color="red">88888</font>:::::<font color="gray">M</font><font color="red">888888888888888 8888</font>
|
|
<font color="red">88888888888888888</font>:::<font color="red">88888</font>::::<font color="gray">M</font>::<font color="black">;o</font><font color="maroon">*</font><font color="green">M</font><font color="maroon">*</font><font color="black">o;</font><font color="red">888888888 88</font>
|
|
<font color="red">88888888888888888</font>:::<font color="red">8888</font>:::::<font color="gray">M</font>:::::::::::<font color="red">88888888 8</font>
|
|
<font color="red">88888888888888888</font>::::<font color="red">88</font>::::::<font color="gray">M</font>:<font color="gray">;</font>:::::::::::<font color="red">888888888</font>
|
|
<font color="red">8888888888888888888</font>:::<font color="red">8</font>::::::<font color="gray">M</font>::<font color="gray">aAa</font>::::::::<font color="gray">M</font><font color="red">8888888888 8</font>
|
|
<font color="red">88 8888888888</font>::<font color="red">88</font>::::<font color="red">8</font>::::<font color="gray">M</font>:::::::::::::<font color="red">888888888888888 8888</font>
|
|
<font color="red">88 88888888888</font>:::<font color="red">8</font>:::::::::<font color="gray">M</font>::::::::::;::<font color="red">88</font><font color="black">:</font><font color="red">88888888888888888</font>
|
|
<font color="red">8 8888888888888</font>:::::::::::<font color="gray">M</font>::<font color="violet">"@@@@@@@"</font>::::<font color="red">8</font><font color="gray">w</font><font color="red">8888888888888888</font>
|
|
<font color="red">88888888888</font>:<font color="red">888</font>::::::::::<font color="gray">M</font>:::::<font color="violet">"@a@"</font>:::::<font color="gray">M</font><font color="red">8</font><font color="gray">i</font><font color="red">888888888888888</font>
|
|
<font color="red">8888888888</font>::::<font color="red">88</font>:::::::::<font color="gray">M</font><font color="red">88</font>:::::::::::::<font color="gray">M</font><font color="red">88</font><font color="gray">z</font><font color="red">88888888888888888</font>
|
|
<font color="red">8888888888</font>:::::<font color="red">8</font>:::::::::<font color="gray">M</font><font color="red">88888</font>:::::::::<font color="gray">MM</font><font color="red">888</font><font color="gray">!</font><font color="red">888888888888888888</font>
|
|
<font color="red">888888888</font>:::::<font color="red">8</font>:::::::::<font color="gray">M</font><font color="red">8888888</font><font color="gray">MAmmmAMVMM</font><font color="red">888</font><font color="gray">*</font><font color="red">88888888 88888888</font>
|
|
<font color="red">888888</font> <font color="gray">M</font>:::::::::::::::<font color="gray">M</font><font color="red">888888888</font>:::::::<font color="gray">MM</font><font color="red">88888888888888 8888888</font>
|
|
<font color="red">8888</font> <font color="gray">M</font>::::::::::::::<font color="gray">M</font><font color="red">88888888888</font>::::::<font color="gray">MM</font><font color="red">888888888888888 88888</font>
|
|
<font color="red">888</font> <font color="gray">M</font>:::::::::::::<font color="gray">M</font><font color="red">8888888888888</font><font color="gray">M</font>:::::<font color="gray">mM</font><font color="red">888888888888888 8888</font>
|
|
<font color="red">888</font> <font color="gray">M</font>::::::::::::<font color="gray">M</font><font color="red">8888</font>:<font color="red">888888888888</font>::::<font color="gray">m</font>::<font color="gray">Mm</font><font color="red">88888 888888 8888</font>
|
|
<font color="red">88</font> <font color="gray">M</font>::::::::::::<font color="red">8888</font>:<font color="red">88888888888888888</font>::::::<font color="gray">Mm</font><font color="red">8 88888 888</font>
|
|
<font color="red">88</font> <font color="gray">M</font>::::::::::<font color="red">8888</font><font color="gray">M</font>::<font color="red">88888</font>::<font color="red">888888888888</font>:::::::<font color="gray">Mm</font><font color="red">88888 88</font>
|
|
<font color="red">8</font> <font color="gray">MM</font>::::::::<font color="red">8888</font><font color="gray">M</font>:::<font color="red">8888</font>:::::<font color="red">888888888888</font>::::::::<font color="gray">Mm</font><font color="red">8 4</font>
|
|
<font color="red">8</font><font color="gray">M</font>:::::::<font color="red">8888</font><font color="gray">M</font>:::::<font color="red">888</font>:::::::<font color="red">88</font>:::<font color="red">8888888</font>::::::::<font color="gray">Mm</font> <font color="red">2</font>
|
|
<font color="red">88</font><font color="gray">MM</font>:::::<font color="red">8888</font><font color="gray">M</font>:::::::<font color="red">88</font>::::::::<font color="red">8</font>:::::<font color="red">888888</font>:::<font color="gray">M</font>:::::<font color="gray">M</font>
|
|
<font color="red">8888</font><font color="gray">M</font>:::::<font color="red">888</font><font color="gray">MM</font>::::::::<font color="red">8</font>:::::::::::<font color="gray">M</font>::::<font color="red">8888</font>::::<font color="gray">M</font>::::<font color="gray">M</font>
|
|
<font color="red">88888</font><font color="gray">M</font>:::::<font color="red">88</font>:<font color="gray">M</font>::::::::::<font color="red">8</font>:::::::::::<font color="gray">M</font>:::<font color="red">8888</font>::::::<font color="gray">M</font>::<font color="gray">M</font>
|
|
<font color="red">88 888</font><font color="gray">MM</font>:::<font color="red">888</font>:<font color="gray">M</font>:::::::::::::::::::::::<font color="gray">M</font>:<font color="red">8888</font>:::::::::<font color="gray">M</font>:
|
|
<font color="red">8 88888</font><font color="gray">M</font>:::<font color="red">88</font>::<font color="gray">M</font>:::::::::::::::::::::::<font color="gray">MM</font>:<font color="red">88</font>::::::::::::<font color="gray">M</font>
|
|
<font color="red">88888</font><font color="gray">M</font>:::<font color="red">88</font>::<font color="gray">M</font>::::::::::<font color="thistle">*88*</font>::::::::::<font color="gray">M</font>:<font color="red">88</font>::::::::::::::<font color="gray">M</font>
|
|
<font color="red">888888</font><font color="gray">M</font>:::<font color="red">88</font>::<font color="gray">M</font>:::::::::<font color="thistle">88@@88</font>:::::::::<font color="gray">M</font>::<font color="red">88</font>::::::::::::::<font color="gray">M</font>
|
|
<font color="red">888888</font><font color="gray">MM</font>::<font color="red">88</font>::<font color="gray">MM</font>::::::::<font color="thistle">88@@88</font>:::::::::<font color="gray">M</font>:::<font color="red">8</font>::::::::::::::<font color="thistle">*8</font>
|
|
<font color="red">88888</font> <font color="gray">M</font>:::<font color="red">8</font>::<font color="gray">MM</font>:::::::::<font color="thistle">*88*</font>::::::::::<font color="gray">M</font>:::::::::::::::::<font color="thistle">88@@</font>
|
|
<font color="red">8888</font> <font color="gray">MM</font>::::::<font color="gray">MM</font>:::::::::::::::::::::<font color="gray">MM</font>:::::::::::::::::<font color="thistle">88@@</font>
|
|
<font color="red">888</font> <font color="gray">M</font>:::::::<font color="gray">MM</font>:::::::::::::::::::<font color="gray">MM</font>::<font color="gray">M</font>::::::::::::::::<font color="thistle">*8</font>
|
|
<font color="red">888</font> <font color="gray">MM</font>:::::::<font color="gray">MMM</font>::::::::::::::::<font color="gray">MM</font>:::<font color="gray">MM</font>:::::::::::::::<font color="gray">M</font>
|
|
<font color="red">88</font> <font color="gray">M</font>::::::::<font color="gray">MMMM</font>:::::::::::<font color="gray">MMMM</font>:::::<font color="gray">MM</font>::::::::::::<font color="gray">MM</font>
|
|
<font color="red">88</font> <font color="gray">MM</font>:::::::::<font color="gray">MMMMMMMMMMMMMMM</font>::::::::<font color="gray">MMM</font>::::::::<font color="gray">MMM</font>
|
|
<font color="red">88</font> <font color="gray">MM</font>::::::::::::<font color="gray">MMMMMMM</font>::::::::::::::<font color="gray">MMMMMMMMMM</font>
|
|
<font color="red">88 8</font><font color="gray">MM</font>::::::::::::::::::::::::::::::::::<font color="gray">MMMMMM</font>
|
|
<font color="red">8 88</font><font color="gray">MM</font>::::::::::::::::::::::<font color="gray">M</font>:::<font color="gray">M</font>::::::::<font color="gray">MM</font>
|
|
<font color="red">888</font><font color="gray">MM</font>::::::::::::::::::<font color="gray">MM</font>::::::<font color="gray">MM</font>::::::<font color="gray">MM</font>
|
|
<font color="red">88888</font><font color="gray">MM</font>:::::::::::::::<font color="gray">MMM</font>:::::::<font color="gray">mM</font>:::::<font color="gray">MM</font>
|
|
<font color="red">888888</font><font color="gray">MM</font>:::::::::::::<font color="gray">MMM</font>:::::::::<font color="gray">MMM</font>:::<font color="gray">M</font>
|
|
<font color="red">88888888</font><font color="gray">MM</font>:::::::::::<font color="gray">MMM</font>:::::::::::<font color="gray">MM</font>:::<font color="gray">M</font>
|
|
<font color="red">88 8888888</font><font color="gray">M</font>:::::::::<font color="gray">MMM</font>::::::::::::::<font color="gray">M</font>:::<font color="gray">M</font>
|
|
<font color="red">8 888888</font> <font color="gray">M</font>:::::::<font color="gray">MM</font>:::::::::::::::::<font color="gray">M</font>:::<font color="gray">M</font>:
|
|
<font color="red">888888</font> <font color="gray">M</font>::::::<font color="gray">M</font>:::::::::::::::::::<font color="gray">M</font>:::<font color="gray">MM</font>
|
|
<font color="red">888888</font> <font color="gray">M</font>:::::<font color="gray">M</font>::::::::::::::::::::::::<font color="gray">M</font>:<font color="gray">M</font>
|
|
<font color="red">888888</font> <font color="gray">M</font>:::::<font color="gray">M</font>:::::::::<font color="gray">@</font>::::::::::::::<font color="gray">M</font>::<font color="gray">M</font>
|
|
<font color="red">88888</font> <font color="gray">M</font>::::::::::::::<font color="gray">@@</font>:::::::::::::::<font color="gray">M</font>::<font color="gray">M</font>
|
|
<font color="red">88888</font> <font color="gray">M</font>::::::::::::::<font color="gray">@@@</font>::::::::::::::::<font color="gray">M</font>::<font color="gray">M</font>
|
|
<font color="red">88888</font> <font color="gray">M</font>:::::::::::::::<font color="gray">@@</font>::::::::::::::::::<font color="gray">M</font>::<font color="gray">M</font>
|
|
<font color="red">88888</font> <font color="gray">M</font>:::::<font color="gray">m</font>::::::::::<font color="gray">@</font>::::::::::<font color="gray">Mm</font>:::::::<font color="gray">M</font>:::<font color="gray">M</font>
|
|
<font color="red">8888</font> <font color="gray">M</font>:::::<font color="gray">M</font>:::::::::::::::::::::::<font color="gray">MM</font>:::::::<font color="gray">M</font>:::<font color="gray">M</font>
|
|
<font color="red">8888</font> <font color="gray">M</font>:::::<font color="gray">M</font>:::::::::::::::::::::::<font color="gray">MMM</font>::::::::<font color="gray">M</font>:::<font color="gray">M</font>
|
|
<font color="red">888</font> <font color="gray">M</font>:::::<font color="gray">Mm</font>::::::::::::::::::::::<font color="gray">MMM</font>:::::::::<font color="gray">M</font>::::<font color="gray">M</font>
|
|
<font color="red">8888</font> <font color="gray">MM</font>::::<font color="gray">Mm</font>:::::::::::::::::::::<font color="gray">MMMM</font>:::::::::<font color="gray">m</font>::<font color="gray">m</font>:::<font color="gray">M</font>
|
|
<font color="red">888</font> <font color="gray">M</font>:::::<font color="gray">M</font>::::::::::::::::::::<font color="gray">MMM</font>::::::::::::<font color="gray">M</font>::<font color="gray">mm</font>:::<font color="gray">M</font>
|
|
<font color="red">8888</font> <font color="gray">MM</font>:::::::::::::::::::::::::<font color="gray">MM</font>:::::::::::::<font color="gray">mM</font>::<font color="gray">MM</font>:::<font color="gray">M</font>:
|
|
<font color="gray">M</font>:::::::::::::::::::::::::<font color="gray">M</font>:::::::::::::::<font color="gray">mM</font>::<font color="gray">MM</font>:::<font color="gray">Mm</font>
|
|
<font color="gray">MM</font>::::::<font color="gray">m</font>:::::::::::::::::::::::::::::::::::<font color="gray">M</font>::<font color="gray">MM</font>:::<font color="gray">MM</font>
|
|
<font color="gray">M</font>::::::::<font color="gray">M</font>:::::::::::::::::::::::::::::::::::<font color="gray">M</font>::<font color="gray">M</font>:::<font color="gray">MM</font>
|
|
<font color="gray">MM</font>:::::::::<font color="gray">M</font>:::::::::::::<font color="gray">M</font>:::::::::::::::::::::<font color="gray">M</font>:<font color="gray">M</font>:::<font color="gray">MM</font>
|
|
<font color="gray">M</font>:::::::::::<font color="gray">M</font><font color="maroon">88</font>:::::::::<font color="gray">M</font>:::::::::::::::::::::::<font color="gray">MM</font>::<font color="gray">MMM</font>
|
|
<font color="gray">M</font>::::::::::::<font color="maroon">8888888888</font><font color="gray">M</font>::::::::::::::::::::::::<font color="gray">MM</font>::<font color="gray">MM</font>
|
|
<font color="gray">M</font>:::::::::::::<font color="maroon">88888888</font><font color="gray">M</font>:::::::::::::::::::::::::<font color="gray">M</font>::<font color="gray">MM</font>
|
|
<font color="gray">M</font>::::::::::::::<font color="maroon">888888</font><font color="gray">M</font>:::::::::::::::::::::::::<font color="gray">M</font>::<font color="gray">MM</font>
|
|
<font color="gray">M</font>:::::::::::::::<font color="maroon">88888</font><font color="gray">M</font>:::::::::::::::::::::::::<font color="gray">M</font>:<font color="gray">MM</font>
|
|
<font color="gray">M</font>:::::::::::::::::<font color="maroon">88</font><font color="gray">M</font>::::::::::::::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">M</font>:::::::::::::::::::<font color="gray">M</font>::::::::::::::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">MM</font>:::::::::::::::::<font color="gray">M</font>::::::::::::::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">M</font>:::::::::::::::::<font color="gray">M</font>::::::::::::::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">MM</font>:::::::::::::::<font color="gray">M</font>::::::::::::::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">M</font>:::::::::::::::<font color="gray">M</font>:::::::::::::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">MM</font>:::::::::::::<font color="gray">M</font>:::::::::::::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">M</font>:::::::::::::<font color="gray">M</font>::::::::::::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">MM</font>:::::::::::<font color="gray">M</font>::::::::::::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">M</font>:::::::::::<font color="gray">M</font>:::::::::::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">MM</font>:::::::::<font color="gray">M</font>:::::::::::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">M</font>:::::::::<font color="gray">M</font>::::::::::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">MM</font>:::::::<font color="gray">M</font>::::::::::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">MM</font>::::::<font color="gray">M</font>:::::::::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">MM</font>:::::<font color="gray">M</font>:::::::::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">MM</font>::::<font color="gray">M</font>::::::::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">MM</font>:::<font color="gray">M</font>::::::::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">MM</font>::<font color="gray">M</font>:::::::::::::::::::<font color="gray">MMM</font> THIS IS THE HYDRUS SERVER ADMIN SERVICE, VERSION ''' + HC.u( HC.SOFTWARE_VERSION ) + '''
|
|
<font color="gray">MM</font>:<font color="gray">M</font>:::::::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">MMM</font>::::::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">MM</font>::::::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">M</font>:::::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">MM</font>::::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">MM</font>:::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">MM</font>::::<font color="gray">M</font>:::::::::<font color="gray">MMM</font>:
|
|
<font color="gray">mMM</font>::::<font color="gray">MM</font>:::::::<font color="gray">MMMM</font>
|
|
<font color="gray">MMM</font>:::::::::::<font color="gray">MMM</font>:<font color="gray">M</font>
|
|
<font color="gray">mMM</font>:::<font color="gray">M</font>:::::::<font color="gray">M</font>:<font color="gray">M</font>:<font color="gray">M</font>
|
|
<font color="gray">MM</font>::<font color="gray">MMMM</font>:::::::<font color="gray">M</font>:<font color="gray">M</font>
|
|
<font color="gray">MM</font>::<font color="gray">MMM</font>::::::::<font color="gray">M</font>:<font color="gray">M</font>
|
|
<font color="gray">mMM</font>::<font color="gray">MM</font>::::::::<font color="gray">M</font>:<font color="gray">M</font>
|
|
<font color="gray">MM</font>::<font color="gray">MM</font>:::::::::<font color="gray">M</font>:<font color="gray">M</font>
|
|
<font color="gray">MM</font>::<font color="gray">MM</font>::::::::::<font color="gray">M</font>:<font color="gray">m</font>
|
|
<font color="gray">MM</font>:::<font color="gray">M</font>:::::::::::<font color="gray">MM</font>
|
|
<font color="gray">MMM</font>:::::::::::::::<font color="gray">M</font>:
|
|
<font color="gray">MMM</font>:::::::::::::::<font color="gray">M</font>:
|
|
<font color="gray">MMM</font>::::::::::::::::<font color="gray">M</font>
|
|
<font color="gray">MMM</font>::::::::::::::::<font color="gray">M</font>
|
|
<font color="gray">MMM</font>::::::::::::::::<font color="gray">Mm</font>
|
|
<font color="gray">MM</font>::::::::::::::::<font color="gray">MM</font>
|
|
<font color="gray">MMM</font>:::::::::::::::<font color="gray">MM</font>
|
|
<font color="gray">MMM</font>:::::::::::::::<font color="gray">MM</font>
|
|
<font color="gray">MMM</font>:::::::::::::::<font color="gray">MM</font>
|
|
<font color="gray">MMM</font>:::::::::::::::<font color="gray">MM</font>
|
|
<font color="gray">MM</font>::::::::::::::<font color="gray">MMM</font>
|
|
<font color="gray">MMM</font>:::::::::::::<font color="gray">MM</font>
|
|
<font color="gray">MMM</font>:::::::::::::<font color="gray">MM</font>
|
|
<font color="gray">MMM</font>::::::::::::<font color="gray">MM</font>
|
|
<font color="gray">MM</font>::::::::::::<font color="gray">MM</font>
|
|
<font color="gray">MM</font>::::::::::::<font color="gray">MM</font>
|
|
<font color="gray">MM</font>:::::::::::<font color="gray">MM</font>
|
|
<font color="gray">MMM</font>::::::::::<font color="gray">MM</font>
|
|
<font color="gray">MMM</font>::::::::::<font color="gray">MM</font>
|
|
<font color="gray">MM</font>:::::::::<font color="gray">MM</font>
|
|
<font color="gray">MMM</font>::::::::<font color="gray">MM</font>
|
|
<font color="gray">MMM</font>::::::::<font color="gray">MM</font>
|
|
<font color="gray">MM</font>::::::::<font color="gray">MM</font>
|
|
<font color="gray">MMM</font>::::::<font color="gray">MM</font>
|
|
<font color="gray">MMM</font>::::::<font color="gray">MM</font>
|
|
<font color="gray">MM</font>::::::<font color="gray">MM</font>
|
|
<font color="gray">MM</font>::::::<font color="gray">MM</font>
|
|
<font color="gray">MM</font>:::::<font color="gray">MM</font>
|
|
<font color="gray">MM</font>:::::<font color="gray">MM</font>:
|
|
<font color="gray">MM</font>:::::<font color="gray">M</font>:<font color="gray">M</font>
|
|
<font color="gray">MM</font>:::::<font color="gray">M</font>:<font color="gray">M</font>
|
|
:<font color="gray">M</font>::::::<font color="gray">M</font>:
|
|
<font color="gray">M</font>:<font color="gray">M</font>:::::::<font color="gray">M</font>
|
|
<font color="gray">M</font>:::<font color="gray">M</font>::::::<font color="gray">M</font>
|
|
<font color="gray">M</font>::::<font color="gray">M</font>::::::<font color="gray">M</font>
|
|
<font color="gray">M</font>:::::<font color="gray">M</font>:::::::<font color="gray">M</font>
|
|
<font color="gray">M</font>::::::<font color="gray">MM</font>:::::::<font color="gray">M</font>
|
|
<font color="gray">M</font>:::::::<font color="gray">M</font>::::::::<font color="gray">M</font>
|
|
<font color="gray">M;</font>:<font color="gray">;</font>::::<font color="gray">M</font>:::::::::<font color="gray">M</font>
|
|
<font color="gray">M</font>:<font color="gray">m</font>:<font color="gray">;</font>:::<font color="gray">M</font>::::::::::<font color="gray">M</font>
|
|
<font color="gray">MM</font>:<font color="gray">m</font>:<font color="gray">m</font>::<font color="gray">M</font>::::::::<font color="gray">;</font>:<font color="gray">M</font>
|
|
<font color="gray">MM</font>:<font color="gray">m</font>::<font color="gray">MM</font>:::::::<font color="gray">;</font>:<font color="gray">;M</font>
|
|
<font color="gray">MM</font>::<font color="gray">MMM</font>::::::<font color="gray">;</font>:<font color="gray">m</font>:<font color="gray">M</font>
|
|
<font color="gray">MMMM MM</font>::::<font color="gray">m</font>:<font color="gray">m</font>:<font color="gray">MM</font>
|
|
<font color="gray">MM</font>::::<font color="gray">m</font>:<font color="gray">MM</font>
|
|
<font color="gray">MM</font>::::<font color="gray">MM</font>
|
|
<font color="gray">MM</font>::<font color="gray">MM</font>
|
|
<font color="gray">MMMM</font>
|
|
</pre></body></html>'''
|
|
|
|
CLIENT_ROOT_MESSAGE = '''<html>
|
|
<head>
|
|
<title>hydrus client</title>
|
|
</head>
|
|
<body>
|
|
<p>This hydrus client uses software version ''' + HC.u( HC.SOFTWARE_VERSION ) + ''' and network version ''' + HC.u( HC.NETWORK_VERSION ) + '''.</p>
|
|
<p>It only serves requests from 127.0.0.1.</p>
|
|
</body>
|
|
</html>'''
|
|
|
|
ROOT_MESSAGE_BEGIN = '''<html>
|
|
<head>
|
|
<title>hydrus service</title>
|
|
</head>
|
|
<body>
|
|
<p>This hydrus service uses software version ''' + HC.u( HC.SOFTWARE_VERSION ) + ''' and network version ''' + HC.u( HC.NETWORK_VERSION ) + '''.</p>
|
|
<p>'''
|
|
|
|
ROOT_MESSAGE_END = '''</p>
|
|
</body>
|
|
</html>'''
|
|
|
|
LOCAL_DOMAIN = HydrusServerResources.HydrusDomain( True )
|
|
REMOTE_DOMAIN = HydrusServerResources.HydrusDomain( False )
|
|
|
|
class HydrusRequest( Request ):
|
|
|
|
def __init__( self, *args, **kwargs ):
|
|
|
|
Request.__init__( self, *args, **kwargs )
|
|
|
|
self.is_hydrus_client = True
|
|
self.hydrus_args = None
|
|
self.hydrus_response_context = None
|
|
self.hydrus_request_data_usage = 0
|
|
|
|
|
|
class HydrusRequestRestricted( HydrusRequest ):
|
|
|
|
def __init__( self, *args, **kwargs ):
|
|
|
|
HydrusRequest.__init__( self, *args, **kwargs )
|
|
|
|
self.hydrus_account = None
|
|
|
|
|
|
class HydrusService( Site ):
|
|
|
|
def __init__( self, service_key, service_type, message ):
|
|
|
|
self._service_key = service_key
|
|
self._service_type = service_type
|
|
self._message = message
|
|
|
|
root = self._InitRoot()
|
|
|
|
Site.__init__( self, root )
|
|
|
|
self.requestFactory = HydrusRequest
|
|
|
|
|
|
def _InitRoot( self ):
|
|
|
|
root = Resource()
|
|
|
|
root.putChild( '', HydrusServerResources.HydrusResourceWelcome( self._service_key, self._service_type, self._message ) )
|
|
root.putChild( 'favicon.ico', HydrusServerResources.hydrus_favicon )
|
|
|
|
return root
|
|
|
|
|
|
class HydrusServiceBooru( HydrusService ):
|
|
|
|
def _InitRoot( self ):
|
|
|
|
root = HydrusService._InitRoot( self )
|
|
|
|
root.putChild( 'gallery', HydrusServerResources.HydrusResourceCommandBooruGallery( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
root.putChild( 'page', HydrusServerResources.HydrusResourceCommandBooruPage( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
root.putChild( 'file', HydrusServerResources.HydrusResourceCommandBooruFile( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
root.putChild( 'thumbnail', HydrusServerResources.HydrusResourceCommandBooruThumbnail( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
root.putChild( 'style.css', HydrusServerResources.local_booru_css )
|
|
|
|
return root
|
|
|
|
|
|
class HydrusServiceLocal( HydrusService ):
|
|
|
|
def _InitRoot( self ):
|
|
|
|
root = HydrusService._InitRoot( self )
|
|
|
|
root.putChild( 'file', HydrusServerResources.HydrusResourceCommandLocalFile( self._service_key, self._service_type, LOCAL_DOMAIN ) )
|
|
root.putChild( 'thumbnail', HydrusServerResources.HydrusResourceCommandLocalThumbnail( self._service_key, self._service_type, LOCAL_DOMAIN ) )
|
|
|
|
return root
|
|
|
|
|
|
class HydrusServiceRestricted( HydrusService ):
|
|
|
|
def __init__( self, service_key, service_type, message ):
|
|
|
|
HydrusService.__init__( self, service_key, service_type, message )
|
|
|
|
self.requestFactory = HydrusRequestRestricted
|
|
|
|
|
|
def _InitRoot( self ):
|
|
|
|
root = HydrusService._InitRoot( self )
|
|
|
|
root.putChild( 'access_key', HydrusServerResources.HydrusResourceCommandAccessKey( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
root.putChild( 'access_key_verification', HydrusServerResources.HydrusResourceCommandAccessKeyVerification( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
root.putChild( 'session_key', HydrusServerResources.HydrusResourceCommandSessionKey( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
|
|
root.putChild( 'account', HydrusServerResources.HydrusResourceCommandRestrictedAccount( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
root.putChild( 'account_info', HydrusServerResources.HydrusResourceCommandRestrictedAccountInfo( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
root.putChild( 'account_types', HydrusServerResources.HydrusResourceCommandRestrictedAccountTypes( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
root.putChild( 'registration_keys', HydrusServerResources.HydrusResourceCommandRestrictedRegistrationKeys( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
root.putChild( 'stats', HydrusServerResources.HydrusResourceCommandRestrictedStats( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
|
|
return root
|
|
|
|
|
|
class HydrusServiceAdmin( HydrusServiceRestricted ):
|
|
|
|
def _InitRoot( self ):
|
|
|
|
root = HydrusServiceRestricted._InitRoot( self )
|
|
|
|
root.putChild( 'backup', HydrusServerResources.HydrusResourceCommandRestrictedBackup( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
root.putChild( 'init', HydrusServerResources.HydrusResourceCommandInit( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
root.putChild( 'services', HydrusServerResources.HydrusResourceCommandRestrictedServices( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
root.putChild( 'services_info', HydrusServerResources.HydrusResourceCommandRestrictedServicesInfo( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
|
|
return root
|
|
|
|
|
|
class HydrusServiceRepository( HydrusServiceRestricted ):
|
|
|
|
def _InitRoot( self ):
|
|
|
|
root = HydrusServiceRestricted._InitRoot( self )
|
|
|
|
root.putChild( 'news', HydrusServerResources.HydrusResourceCommandRestrictedNews( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
root.putChild( 'num_petitions', HydrusServerResources.HydrusResourceCommandRestrictedNumPetitions( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
root.putChild( 'petition', HydrusServerResources.HydrusResourceCommandRestrictedPetition( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
root.putChild( 'update', HydrusServerResources.HydrusResourceCommandRestrictedUpdate( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
|
|
return root
|
|
|
|
|
|
class HydrusServiceRepositoryFile( HydrusServiceRepository ):
|
|
|
|
def _InitRoot( self ):
|
|
|
|
root = HydrusServiceRepository._InitRoot( self )
|
|
|
|
root.putChild( 'file', HydrusServerResources.HydrusResourceCommandRestrictedRepositoryFile( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
root.putChild( 'ip', HydrusServerResources.HydrusResourceCommandRestrictedIP( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
root.putChild( 'thumbnail', HydrusServerResources.HydrusResourceCommandRestrictedRepositoryThumbnail( self._service_key, self._service_type, REMOTE_DOMAIN ) )
|
|
|
|
return root
|
|
|
|
|
|
class HydrusServiceRepositoryTag( HydrusServiceRepository ): pass
|
|
|
|
class MessagingServiceFactory( ServerFactory ):
|
|
|
|
protocol = HydrusServerAMP.MessagingServiceProtocol
|
|
|
|
def __init__( self, service_key ):
|
|
|
|
self.service_key = service_key
|
|
|
|
self._persistent_connections = collections.defaultdict( dict )
|
|
self._temporary_connections = collections.defaultdict( dict )
|
|
|
|
|
|
def AddConnection( self, persistent, identifier, name, connection ):
|
|
|
|
if persistent: self._persistent_connections[ identifier ][ name ] = connection
|
|
else: self._temporary_connections[ identifier ][ name ] = connection
|
|
|
|
|
|
def GetConnection( self, identifier, name ):
|
|
|
|
if name in self._persistent_connections[ identifier ]: return self._persistent_connections[ identifier ][ name ]
|
|
elif name in self._temporary_connections[ identifier ]: return self._temporary_connections[ identifier ][ name ]
|
|
else:
|
|
|
|
raise Exception() # make this better, obviously
|
|
|
|
|
|
|
|
def GetOnlineNames( self, identifier ): return self._persistent_connections[ identifier ].keys()
|
|
|
|
def RemoveConnection( self, identifier, name ):
|
|
|
|
if name in self._temporary_connections[ identifier ]: del self._temporary_connections[ identifier ][ name ]
|
|
elif name in self._persistent_connections[ identifier ]: del self._persistent_connections[ identifier ][ name ]
|
|
|