From f54112a15cf2432a71412a83e16b45523b4cd6be Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 6 Dec 2021 10:15:49 +0000 Subject: [PATCH 1/7] Use a single function for resetting theme designer changes --- daemon.py | 1 + theme.py | 14 +++++++------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/daemon.py b/daemon.py index dc1f274bb..8b2f7764f 100644 --- a/daemon.py +++ b/daemon.py @@ -2204,6 +2204,7 @@ class PubServer(BaseHTTPRequestHandler): allowLocalNetworkAccess, systemLanguage) + # set boolean values if 'rss-icon-at-top' in themeDesignerParams: if themeDesignerParams['rss-icon-at-top'].lower() == 'true': self.server.rssIconAtTop = True diff --git a/theme.py b/theme.py index 25ec9407e..9b34280ae 100644 --- a/theme.py +++ b/theme.py @@ -516,6 +516,10 @@ def resetThemeDesignerSettings(baseDir: str, themeName: str, domain: str, setTheme(baseDir, themeName, domain, allowLocalNetworkAccess, systemLanguage) + customIconsDir = baseDir + '/accounts/customIcons' + if os.path.isdir(customIconsDir): + rmtree(customIconsDir, ignore_errors=False, onerror=None) + def _readVariablesFile(baseDir: str, themeName: str, variablesFile: str, @@ -826,13 +830,9 @@ def setTheme(baseDir: str, name: str, domain: str, # if the theme has changed then remove any custom settings if prevThemeName != name: - customVariablesFile = baseDir + '/accounts/theme.json' - if os.path.isfile(customVariablesFile): - print('Removing theme designer settings') - try: - os.remove(customVariablesFile) - except OSError: - print('EX: removing theme designer settings') + resetThemeDesignerSettings(baseDir, name, domain, + allowLocalNetworkAccess, + systemLanguage) _removeTheme(baseDir) From 88cc541f5940695e80a47255f2e0c9d61c110b10 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 6 Dec 2021 10:21:37 +0000 Subject: [PATCH 2/7] Less indentation --- daemon.py | 92 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 47 insertions(+), 45 deletions(-) diff --git a/daemon.py b/daemon.py index 8b2f7764f..c0244a4fd 100644 --- a/daemon.py +++ b/daemon.py @@ -7299,55 +7299,57 @@ class PubServer(BaseHTTPRequestHandler): baseDir: str, GETstartTime) -> None: """Shows an icon """ - if path.endswith('.png'): - mediaStr = path.split('/icons/')[1] - if '/' not in mediaStr: - if not self.server.themeName: - theme = 'default' - else: - theme = self.server.themeName - iconFilename = mediaStr + if not path.endswith('.png'): + self._404() + return + mediaStr = path.split('/icons/')[1] + if '/' not in mediaStr: + if not self.server.themeName: + theme = 'default' else: - theme = mediaStr.split('/')[0] - iconFilename = mediaStr.split('/')[1] - mediaFilename = \ - baseDir + '/theme/' + theme + '/icons/' + iconFilename - if self._etag_exists(mediaFilename): - # The file has not changed - self._304() - return - if self.server.iconsCache.get(mediaStr): - mediaBinary = self.server.iconsCache[mediaStr] - mimeTypeStr = mediaFileMimeType(mediaFilename) - self._set_headers_etag(mediaFilename, - mimeTypeStr, - mediaBinary, None, - self.server.domainFull, - False, None) - self._write(mediaBinary) + theme = self.server.themeName + iconFilename = mediaStr + else: + theme = mediaStr.split('/')[0] + iconFilename = mediaStr.split('/')[1] + mediaFilename = \ + baseDir + '/theme/' + theme + '/icons/' + iconFilename + if self._etag_exists(mediaFilename): + # The file has not changed + self._304() + return + if self.server.iconsCache.get(mediaStr): + mediaBinary = self.server.iconsCache[mediaStr] + mimeTypeStr = mediaFileMimeType(mediaFilename) + self._set_headers_etag(mediaFilename, + mimeTypeStr, + mediaBinary, None, + self.server.domainFull, + False, None) + self._write(mediaBinary) + fitnessPerformance(GETstartTime, self.server.fitness, + '_GET', '_showIcon', self.server.debug) + return + else: + if os.path.isfile(mediaFilename): + mediaBinary = None + try: + with open(mediaFilename, 'rb') as avFile: + mediaBinary = avFile.read() + except OSError: + print('EX: unable to read icon image ' + mediaFilename) + if mediaBinary: + mimeType = mediaFileMimeType(mediaFilename) + self._set_headers_etag(mediaFilename, + mimeType, + mediaBinary, None, + self.server.domainFull, + False, None) + self._write(mediaBinary) + self.server.iconsCache[mediaStr] = mediaBinary fitnessPerformance(GETstartTime, self.server.fitness, '_GET', '_showIcon', self.server.debug) return - else: - if os.path.isfile(mediaFilename): - mediaBinary = None - try: - with open(mediaFilename, 'rb') as avFile: - mediaBinary = avFile.read() - except OSError: - print('EX: unable to read icon image ' + mediaFilename) - if mediaBinary: - mimeType = mediaFileMimeType(mediaFilename) - self._set_headers_etag(mediaFilename, - mimeType, - mediaBinary, None, - self.server.domainFull, - False, None) - self._write(mediaBinary) - self.server.iconsCache[mediaStr] = mediaBinary - fitnessPerformance(GETstartTime, self.server.fitness, - '_GET', '_showIcon', self.server.debug) - return self._404() def _showHelpScreenImage(self, callingDomain: str, path: str, From 395891dd1f273ba3bdc190bb54bfc1ca765245c0 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 6 Dec 2021 10:38:20 +0000 Subject: [PATCH 3/7] No custom icons directory --- theme.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/theme.py b/theme.py index 9b34280ae..b6a02d679 100644 --- a/theme.py +++ b/theme.py @@ -516,10 +516,6 @@ def resetThemeDesignerSettings(baseDir: str, themeName: str, domain: str, setTheme(baseDir, themeName, domain, allowLocalNetworkAccess, systemLanguage) - customIconsDir = baseDir + '/accounts/customIcons' - if os.path.isdir(customIconsDir): - rmtree(customIconsDir, ignore_errors=False, onerror=None) - def _readVariablesFile(baseDir: str, themeName: str, variablesFile: str, From b3e57c5fdeaa52e7b267e91a1362cf2e22d31d8c Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 6 Dec 2021 11:12:06 +0000 Subject: [PATCH 4/7] Remove bookmark endings from post ids --- daemon.py | 2 ++ theme.py | 2 -- utils.py | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/daemon.py b/daemon.py index c0244a4fd..a5a50f493 100644 --- a/daemon.py +++ b/daemon.py @@ -2157,6 +2157,8 @@ class PubServer(BaseHTTPRequestHandler): resetThemeDesignerSettings(baseDir, themeName, domain, allowLocalNetworkAccess, systemLanguage) + setTheme(baseDir, themeName, domain, + allowLocalNetworkAccess, systemLanguage) if callingDomain.endswith('.onion') and onionDomain: originPathStr = \ diff --git a/theme.py b/theme.py index b6a02d679..cf8cb00bb 100644 --- a/theme.py +++ b/theme.py @@ -513,8 +513,6 @@ def resetThemeDesignerSettings(baseDir: str, themeName: str, domain: str, os.remove(customVariablesFile) except OSError: print('EX: unable to remove theme designer settings on reset') - setTheme(baseDir, themeName, domain, - allowLocalNetworkAccess, systemLanguage) def _readVariablesFile(baseDir: str, themeName: str, diff --git a/utils.py b/utils.py index 077839ef0..60852f336 100644 --- a/utils.py +++ b/utils.py @@ -595,6 +595,8 @@ def removeIdEnding(idStr: str) -> str: idStr = idStr[:-len('/event')] elif idStr.endswith('/replies'): idStr = idStr[:-len('/replies')] + if '#' in idStr: + idStr = idStr.split('#')[0] return idStr From 9daad0bd5ce6cbe92250a9e7d907a434a0338ea1 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 6 Dec 2021 11:15:35 +0000 Subject: [PATCH 5/7] Remove Create from ending --- utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils.py b/utils.py index 60852f336..98814262d 100644 --- a/utils.py +++ b/utils.py @@ -595,8 +595,8 @@ def removeIdEnding(idStr: str) -> str: idStr = idStr[:-len('/event')] elif idStr.endswith('/replies'): idStr = idStr[:-len('/replies')] - if '#' in idStr: - idStr = idStr.split('#')[0] + if idStr.endswith('#Create'): + idStr = idStr.split('#Create')[0] return idStr From 709e2803d194a58df0a0187d3ccfa8937dbfa250 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 6 Dec 2021 11:30:52 +0000 Subject: [PATCH 6/7] Avoid probably invalid postId from creating bad icon links --- webapp_post.py | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/webapp_post.py b/webapp_post.py index 649f97d66..b6e7f5839 100644 --- a/webapp_post.py +++ b/webapp_post.py @@ -390,7 +390,11 @@ def _getReplyIconHtml(baseDir: str, nickname: str, domain: str, return replyStr # reply is permitted - create reply icon - replyToLink = removeIdEnding(postJsonObject['object']['id']) + if '#' not in postJsonObject['object']['id']: + replyToLink = removeIdEnding(postJsonObject['object']['id']) + else: + replyToLink = \ + removeIdEnding(postJsonObject['object']['id'].split('#')[0]) # see Mike MacGirvin's replyTo suggestion if postJsonObject['object'].get('replyTo'): @@ -639,7 +643,10 @@ def _getLikeIconHtml(nickname: str, domainFull: str, likeStr += '\n' - likePostId = removeIdEnding(postJsonObject['id']) + if '#' not in postJsonObject['id']: + likePostId = removeIdEnding(postJsonObject['id']) + else: + likePostId = removeIdEnding(postJsonObject['id'].split('#')[0]) likeStr += \ '