mirror of https://gitlab.com/bashrc2/epicyon
Setting values from theme designer screen
parent
17eb7e0db4
commit
62ff00401a
101
daemon.py
101
daemon.py
|
|
@ -317,6 +317,7 @@ from cache import storePersonInCache
|
||||||
from cache import getPersonFromCache
|
from cache import getPersonFromCache
|
||||||
from cache import getPersonPubKey
|
from cache import getPersonPubKey
|
||||||
from httpsig import verifyPostHeaders
|
from httpsig import verifyPostHeaders
|
||||||
|
from theme import setThemeFromDesigner
|
||||||
from theme import scanThemesForScripts
|
from theme import scanThemesForScripts
|
||||||
from theme import importTheme
|
from theme import importTheme
|
||||||
from theme import exportTheme
|
from theme import exportTheme
|
||||||
|
|
@ -2110,6 +2111,77 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.POSTbusy = False
|
self.server.POSTbusy = False
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def _themeDesigner(self, path: str,
|
||||||
|
callingDomain: str, cookie: str,
|
||||||
|
baseDir: str, httpPrefix: str, nickname: str,
|
||||||
|
domain: str, domainFull: str, port: int,
|
||||||
|
onionDomain: str, i2pDomain: str,
|
||||||
|
debug: bool, accessKeys: {},
|
||||||
|
defaultTimeline: str, themeName: str,
|
||||||
|
allowLocalNetworkAccess: bool) -> None:
|
||||||
|
"""Receive POST from webapp_themeDesigner
|
||||||
|
"""
|
||||||
|
usersPath = '/users/' + nickname
|
||||||
|
originPathStr = \
|
||||||
|
httpPrefix + '://' + domainFull + usersPath + '/' + defaultTimeline
|
||||||
|
length = int(self.headers['Content-length'])
|
||||||
|
|
||||||
|
try:
|
||||||
|
themeParams = self.rfile.read(length).decode('utf-8')
|
||||||
|
except SocketError as e:
|
||||||
|
if e.errno == errno.ECONNRESET:
|
||||||
|
print('WARN: POST accessKeysParams ' +
|
||||||
|
'connection reset by peer')
|
||||||
|
else:
|
||||||
|
print('WARN: POST themeParams socket error')
|
||||||
|
self.send_response(400)
|
||||||
|
self.end_headers()
|
||||||
|
self.server.POSTbusy = False
|
||||||
|
return
|
||||||
|
except ValueError as e:
|
||||||
|
print('ERROR: POST themeParams rfile.read failed, ' + str(e))
|
||||||
|
self.send_response(400)
|
||||||
|
self.end_headers()
|
||||||
|
self.server.POSTbusy = False
|
||||||
|
return
|
||||||
|
themeParams = \
|
||||||
|
urllib.parse.unquote_plus(themeParams)
|
||||||
|
|
||||||
|
# theme designer screen, back button
|
||||||
|
# See htmlThemeDesigner
|
||||||
|
if 'submitThemeDesignerCancel=' in themeParams or \
|
||||||
|
'submitThemeDesigner=' not in themeParams:
|
||||||
|
if callingDomain.endswith('.onion') and onionDomain:
|
||||||
|
originPathStr = \
|
||||||
|
'http://' + onionDomain + usersPath + '/' + defaultTimeline
|
||||||
|
elif callingDomain.endswith('.i2p') and i2pDomain:
|
||||||
|
originPathStr = \
|
||||||
|
'http://' + i2pDomain + usersPath + '/' + defaultTimeline
|
||||||
|
self._redirect_headers(originPathStr, cookie, callingDomain)
|
||||||
|
self.server.POSTbusy = False
|
||||||
|
return
|
||||||
|
|
||||||
|
# get the parameters from the theme designer screen
|
||||||
|
themeDesignerParams = {}
|
||||||
|
for variableName, key in themeParams.items():
|
||||||
|
if variableName.startswith('themeSetting_'):
|
||||||
|
variableName = variableName.replace('themeSetting_', '')
|
||||||
|
themeDesignerParams[variableName] = key
|
||||||
|
|
||||||
|
setThemeFromDesigner(baseDir, themeName, themeDesignerParams,
|
||||||
|
allowLocalNetworkAccess)
|
||||||
|
|
||||||
|
# redirect back from theme designer screen
|
||||||
|
if callingDomain.endswith('.onion') and onionDomain:
|
||||||
|
originPathStr = \
|
||||||
|
'http://' + onionDomain + usersPath + '/' + defaultTimeline
|
||||||
|
elif callingDomain.endswith('.i2p') and i2pDomain:
|
||||||
|
originPathStr = \
|
||||||
|
'http://' + i2pDomain + usersPath + '/' + defaultTimeline
|
||||||
|
self._redirect_headers(originPathStr, cookie, callingDomain)
|
||||||
|
self.server.POSTbusy = False
|
||||||
|
return
|
||||||
|
|
||||||
def _personOptions(self, path: str,
|
def _personOptions(self, path: str,
|
||||||
callingDomain: str, cookie: str,
|
callingDomain: str, cookie: str,
|
||||||
baseDir: str, httpPrefix: str,
|
baseDir: str, httpPrefix: str,
|
||||||
|
|
@ -17757,6 +17829,35 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.server.defaultTimeline)
|
self.server.defaultTimeline)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# theme designer submit/cancel button
|
||||||
|
if usersInPath and \
|
||||||
|
self.path.endswith('/changeThemeSettings'):
|
||||||
|
nickname = self.path.split('/users/')[1]
|
||||||
|
if '/' in nickname:
|
||||||
|
nickname = nickname.split('/')[0]
|
||||||
|
|
||||||
|
if not self.server.keyShortcuts.get(nickname):
|
||||||
|
accessKeys = self.server.accessKeys
|
||||||
|
self.server.keyShortcuts[nickname] = accessKeys.copy()
|
||||||
|
accessKeys = self.server.keyShortcuts[nickname]
|
||||||
|
|
||||||
|
self._themeDesigner(self.path,
|
||||||
|
callingDomain, cookie,
|
||||||
|
self.server.baseDir,
|
||||||
|
self.server.httpPrefix,
|
||||||
|
nickname,
|
||||||
|
self.server.domain,
|
||||||
|
self.server.domainFull,
|
||||||
|
self.server.port,
|
||||||
|
self.server.onionDomain,
|
||||||
|
self.server.i2pDomain,
|
||||||
|
self.server.debug,
|
||||||
|
accessKeys,
|
||||||
|
self.server.defaultTimeline,
|
||||||
|
self.server.themeName,
|
||||||
|
self.server.allowLocalNetworkAccess)
|
||||||
|
return
|
||||||
|
|
||||||
# update the shared item federation token for the calling domain
|
# update the shared item federation token for the calling domain
|
||||||
# if it is within the permitted federation
|
# if it is within the permitted federation
|
||||||
if self.headers.get('Origin') and \
|
if self.headers.get('Origin') and \
|
||||||
|
|
|
||||||
24
theme.py
24
theme.py
|
|
@ -492,14 +492,9 @@ def _setCustomFont(baseDir: str):
|
||||||
cssfile.write(css)
|
cssfile.write(css)
|
||||||
|
|
||||||
|
|
||||||
def _readVariablesFile(baseDir: str, themeName: str,
|
def setThemeFromDesigner(baseDir: str, themeName: str,
|
||||||
variablesFile: str,
|
themeParams: {},
|
||||||
allowLocalNetworkAccess: bool) -> None:
|
allowLocalNetworkAccess: bool):
|
||||||
"""Reads variables from a file in the theme directory
|
|
||||||
"""
|
|
||||||
themeParams = loadJson(variablesFile, 0)
|
|
||||||
if not themeParams:
|
|
||||||
return
|
|
||||||
bgParams = {
|
bgParams = {
|
||||||
"login": "jpg",
|
"login": "jpg",
|
||||||
"follow": "jpg",
|
"follow": "jpg",
|
||||||
|
|
@ -510,6 +505,19 @@ def _readVariablesFile(baseDir: str, themeName: str,
|
||||||
allowLocalNetworkAccess)
|
allowLocalNetworkAccess)
|
||||||
|
|
||||||
|
|
||||||
|
def _readVariablesFile(baseDir: str, themeName: str,
|
||||||
|
variablesFile: str,
|
||||||
|
allowLocalNetworkAccess: bool) -> None:
|
||||||
|
"""Reads variables from a file in the theme directory
|
||||||
|
"""
|
||||||
|
themeParams = loadJson(variablesFile, 0)
|
||||||
|
if not themeParams:
|
||||||
|
return
|
||||||
|
setThemeFromDesigner(baseDir, themeName,
|
||||||
|
themeParams,
|
||||||
|
allowLocalNetworkAccess)
|
||||||
|
|
||||||
|
|
||||||
def _setThemeDefault(baseDir: str, allowLocalNetworkAccess: bool):
|
def _setThemeDefault(baseDir: str, allowLocalNetworkAccess: bool):
|
||||||
name = 'default'
|
name = 'default'
|
||||||
_removeTheme(baseDir)
|
_removeTheme(baseDir)
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,8 @@ def htmlThemeDesigner(cssCache: {}, baseDir: str,
|
||||||
themeForm += \
|
themeForm += \
|
||||||
' <center>\n' + \
|
' <center>\n' + \
|
||||||
' <button type="submit" class="button" ' + \
|
' <button type="submit" class="button" ' + \
|
||||||
'name="submitThemeDesignerCancel" accesskey="' + timelineKey + '">' + \
|
'name="submitThemeDesignerCancel" ' + \
|
||||||
|
'accesskey="' + timelineKey + '">' + \
|
||||||
translate['Go Back'] + '</button>\n' + \
|
translate['Go Back'] + '</button>\n' + \
|
||||||
' <button type="submit" class="button" ' + \
|
' <button type="submit" class="button" ' + \
|
||||||
'name="submitThemeDesigner" accesskey="' + submitKey + '">' + \
|
'name="submitThemeDesigner" accesskey="' + submitKey + '">' + \
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue