From 84d6e50820f189d5f36c2e044ed93472470f44e0 Mon Sep 17 00:00:00 2001
From: Bob Mottram <bob@freedombone.net>
Date: Mon, 7 Jun 2021 18:49:10 +0100
Subject: [PATCH] Move function out of daemon

---
 city.py   |  12 ++++++
 daemon.py | 123 +++++++++++++++++++++++++++++-------------------------
 inbox.py  |   2 +-
 3 files changed, 80 insertions(+), 57 deletions(-)

diff --git a/city.py b/city.py
index f4f2c0484..2eb04fe9e 100644
--- a/city.py
+++ b/city.py
@@ -217,3 +217,15 @@ def spoofGeolocation(baseDir: str,
     return (default_latitude, default_longitude,
             default_latdirection, default_longdirection,
             "", "", 0)
+
+
+def getSpoofedCity(city: str, baseDir: str, nickname: str, domain: str) -> str:
+    """Returns the name of the city to use as a GPS spoofing location for
+    image metadata
+    """
+    cityFilename = baseDir + '/accounts/' + \
+        nickname + '@' + domain + '/city.txt'
+    if os.path.isfile(cityFilename):
+        with open(cityFilename, 'r') as fp:
+            city = fp.read().replace('\n', '')
+    return city
diff --git a/daemon.py b/daemon.py
index 67c761bd7..aca161e07 100644
--- a/daemon.py
+++ b/daemon.py
@@ -290,6 +290,7 @@ from filters import addGlobalFilter
 from filters import removeGlobalFilter
 from context import hasValidContext
 from speaker import getSSMLbox
+from city import getSpoofedCity
 import os
 
 
@@ -327,18 +328,6 @@ def saveDomainQrcode(baseDir: str, httpPrefix: str,
 class PubServer(BaseHTTPRequestHandler):
     protocol_version = 'HTTP/1.1'
 
-    def _getSpoofedCity(self, baseDir: str, nickname: str, domain: str) -> str:
-        """Returns the name of the city to use as a GPS spoofing location for
-        image metadata
-        """
-        city = self.server.city
-        cityFilename = baseDir + '/accounts/' + \
-            nickname + '@' + domain + '/city.txt'
-        if os.path.isfile(cityFilename):
-            with open(cityFilename, 'r') as fp:
-                city = fp.read().replace('\n', '')
-        return city
-
     def _getInstalceUrl(self, callingDomain: str) -> str:
         """Returns the URL for this instance
         """
@@ -447,8 +436,9 @@ class PubServer(BaseHTTPRequestHandler):
         eventDate = None
         eventTime = None
         location = None
-        city = self._getSpoofedCity(self.server.baseDir,
-                                    nickname, self.server.domain)
+        city = getSpoofedCity(self.server.city,
+                              self.server.baseDir,
+                              nickname, self.server.domain)
 
         messageJson = \
             createPublicPost(self.server.baseDir,
@@ -1197,8 +1187,9 @@ class PubServer(BaseHTTPRequestHandler):
         if postToNickname:
             print('Posting to nickname ' + postToNickname)
             self.postToNickname = postToNickname
-            city = self._getSpoofedCity(self.server.baseDir,
-                                        postToNickname, self.server.domain)
+            city = getSpoofedCity(self.server.city,
+                                  self.server.baseDir,
+                                  postToNickname, self.server.domain)
 
         return postMessageToOutbox(self.server.session,
                                    self.server.translate,
@@ -4184,7 +4175,8 @@ class PubServer(BaseHTTPRequestHandler):
                     except BaseException:
                         pass
 
-                city = self._getSpoofedCity(baseDir, nickname, domain)
+                city = getSpoofedCity(self.server.city,
+                                      baseDir, nickname, domain)
 
                 processMetaData(baseDir, nickname, domain,
                                 filename, postImageFilename, city)
@@ -7585,7 +7577,9 @@ class PubServer(BaseHTTPRequestHandler):
                         accessKeys = self.server.keyShortcuts[nickname]
 
                     rolesList = getActorRolesList(actorJson)
-                    city = self._getSpoofedCity(baseDir, nickname, domain)
+                    city = \
+                        getSpoofedCity(self.server.city,
+                                       baseDir, nickname, domain)
                     msg = \
                         htmlProfile(self.server.rssIconAtTop,
                                     self.server.cssCache,
@@ -7683,8 +7677,9 @@ class PubServer(BaseHTTPRequestHandler):
                                 actorSkillsList = \
                                     getOccupationSkills(actorJson)
                                 skills = getSkillsFromList(actorSkillsList)
-                                city = self._getSpoofedCity(baseDir,
-                                                            nickname, domain)
+                                city = getSpoofedCity(self.server.city,
+                                                      baseDir,
+                                                      nickname, domain)
                                 msg = \
                                     htmlProfile(self.server.rssIconAtTop,
                                                 self.server.cssCache,
@@ -9582,7 +9577,8 @@ class PubServer(BaseHTTPRequestHandler):
                             accessKeys = \
                                 self.server.keyShortcuts[nickname]
 
-                    city = self._getSpoofedCity(baseDir, nickname, domain)
+                    city = getSpoofedCity(self.server.city,
+                                          baseDir, nickname, domain)
                     msg = \
                         htmlProfile(self.server.rssIconAtTop,
                                     self.server.cssCache,
@@ -9694,7 +9690,8 @@ class PubServer(BaseHTTPRequestHandler):
                             accessKeys = \
                                 self.server.keyShortcuts[nickname]
 
-                        city = self._getSpoofedCity(baseDir, nickname, domain)
+                        city = getSpoofedCity(self.server.city,
+                                              baseDir, nickname, domain)
                     msg = \
                         htmlProfile(self.server.rssIconAtTop,
                                     self.server.cssCache,
@@ -9805,7 +9802,8 @@ class PubServer(BaseHTTPRequestHandler):
                             accessKeys = \
                                 self.server.keyShortcuts[nickname]
 
-                        city = self._getSpoofedCity(baseDir, nickname, domain)
+                        city = getSpoofedCity(self.server.city,
+                                              baseDir, nickname, domain)
                     msg = \
                         htmlProfile(self.server.rssIconAtTop,
                                     self.server.cssCache,
@@ -9940,7 +9938,8 @@ class PubServer(BaseHTTPRequestHandler):
                     accessKeys = \
                         self.server.keyShortcuts[nickname]
 
-                city = self._getSpoofedCity(baseDir, nickname, domain)
+                city = getSpoofedCity(self.server.city,
+                                      baseDir, nickname, domain)
             msg = \
                 htmlProfile(self.server.rssIconAtTop,
                             self.server.cssCache,
@@ -10542,7 +10541,8 @@ class PubServer(BaseHTTPRequestHandler):
             peertubeInstances = self.server.peertubeInstances
             nickname = getNicknameFromActor(path)
             if nickname:
-                city = self._getSpoofedCity(baseDir, nickname, domain)
+                city = getSpoofedCity(self.server.city,
+                                      baseDir, nickname, domain)
             else:
                 city = self.server.city
 
@@ -13335,8 +13335,9 @@ class PubServer(BaseHTTPRequestHandler):
                    filename.endswith('.gif'):
                     postImageFilename = filename.replace('.temp', '')
                     print('Removing metadata from ' + postImageFilename)
-                    city = self._getSpoofedCity(self.server.baseDir,
-                                                nickname, self.server.domain)
+                    city = getSpoofedCity(self.server.city,
+                                          self.server.baseDir,
+                                          nickname, self.server.domain)
                     processMetaData(self.server.baseDir,
                                     nickname, self.server.domain,
                                     filename, postImageFilename, city)
@@ -13448,8 +13449,9 @@ class PubServer(BaseHTTPRequestHandler):
                                        nickname, self.server.domain)
                         return 1
 
-                city = self._getSpoofedCity(self.server.baseDir,
-                                            nickname, self.server.domain)
+                city = getSpoofedCity(self.server.city,
+                                      self.server.baseDir,
+                                      nickname, self.server.domain)
                 messageJson = \
                     createPublicPost(self.server.baseDir,
                                      nickname,
@@ -13597,9 +13599,10 @@ class PubServer(BaseHTTPRequestHandler):
                             imgDescription = fields['imageDescription']
 
                         if filename:
-                            city = self._getSpoofedCity(self.server.baseDir,
-                                                        nickname,
-                                                        self.server.domain)
+                            city = getSpoofedCity(self.server.city,
+                                                  self.server.baseDir,
+                                                  nickname,
+                                                  self.server.domain)
                             postJsonObject['object'] = \
                                 attachMedia(self.server.baseDir,
                                             self.server.httpPrefix,
@@ -13632,9 +13635,10 @@ class PubServer(BaseHTTPRequestHandler):
                           str(fields['postUrl']))
                 return -1
             elif postType == 'newunlisted':
-                city = self._getSpoofedCity(self.server.baseDir,
-                                            nickname,
-                                            self.server.domain)
+                city = getSpoofedCity(self.server.city,
+                                      self.server.baseDir,
+                                      nickname,
+                                      self.server.domain)
                 messageJson = \
                     createUnlistedPost(self.server.baseDir,
                                        nickname,
@@ -13666,9 +13670,10 @@ class PubServer(BaseHTTPRequestHandler):
                     else:
                         return -1
             elif postType == 'newfollowers':
-                city = self._getSpoofedCity(self.server.baseDir,
-                                            nickname,
-                                            self.server.domain)
+                city = getSpoofedCity(self.server.city,
+                                      self.server.baseDir,
+                                      nickname,
+                                      self.server.domain)
                 messageJson = \
                     createFollowersOnlyPost(self.server.baseDir,
                                             nickname,
@@ -13722,9 +13727,10 @@ class PubServer(BaseHTTPRequestHandler):
                     maximumAttendeeCapacity = \
                         int(fields['maximumAttendeeCapacity'])
 
-                city = self._getSpoofedCity(self.server.baseDir,
-                                            nickname,
-                                            self.server.domain)
+                city = getSpoofedCity(self.server.city,
+                                      self.server.baseDir,
+                                      nickname,
+                                      self.server.domain)
                 messageJson = \
                     createEventPost(self.server.baseDir,
                                     nickname,
@@ -13762,9 +13768,10 @@ class PubServer(BaseHTTPRequestHandler):
                 messageJson = None
                 print('A DM was posted')
                 if '@' in mentionsStr:
-                    city = self._getSpoofedCity(self.server.baseDir,
-                                                nickname,
-                                                self.server.domain)
+                    city = getSpoofedCity(self.server.city,
+                                          self.server.baseDir,
+                                          nickname,
+                                          self.server.domain)
                     messageJson = \
                         createDirectMessagePost(self.server.baseDir,
                                                 nickname,
@@ -13806,9 +13813,10 @@ class PubServer(BaseHTTPRequestHandler):
                 print('A reminder was posted for ' + handle)
                 if '@' + handle not in mentionsStr:
                     mentionsStr = '@' + handle + ' ' + mentionsStr
-                city = self._getSpoofedCity(self.server.baseDir,
-                                            nickname,
-                                            self.server.domain)
+                city = getSpoofedCity(self.server.city,
+                                      self.server.baseDir,
+                                      nickname,
+                                      self.server.domain)
                 messageJson = \
                     createDirectMessagePost(self.server.baseDir,
                                             nickname,
@@ -13843,9 +13851,10 @@ class PubServer(BaseHTTPRequestHandler):
                 # and not accounts being reported we disable any
                 # included fediverse addresses by replacing '@' with '-at-'
                 fields['message'] = fields['message'].replace('@', '-at-')
-                city = self._getSpoofedCity(self.server.baseDir,
-                                            nickname,
-                                            self.server.domain)
+                city = getSpoofedCity(self.server.city,
+                                      self.server.baseDir,
+                                      nickname,
+                                      self.server.domain)
                 messageJson = \
                     createReportPost(self.server.baseDir,
                                      nickname,
@@ -13875,9 +13884,10 @@ class PubServer(BaseHTTPRequestHandler):
                                                str(questionCtr)])
                 if not qOptions:
                     return -1
-                city = self._getSpoofedCity(self.server.baseDir,
-                                            nickname,
-                                            self.server.domain)
+                city = getSpoofedCity(self.server.city,
+                                      self.server.baseDir,
+                                      nickname,
+                                      self.server.domain)
                 messageJson = \
                     createQuestionPost(self.server.baseDir,
                                        nickname,
@@ -13914,9 +13924,10 @@ class PubServer(BaseHTTPRequestHandler):
                 if durationStr:
                     if ' ' not in durationStr:
                         durationStr = durationStr + ' days'
-                city = self._getSpoofedCity(self.server.baseDir,
-                                            nickname,
-                                            self.server.domain)
+                city = getSpoofedCity(self.server.city,
+                                      self.server.baseDir,
+                                      nickname,
+                                      self.server.domain)
                 addShare(self.server.baseDir,
                          self.server.httpPrefix,
                          nickname,
diff --git a/inbox.py b/inbox.py
index c5c15e7e2..82061bc45 100644
--- a/inbox.py
+++ b/inbox.py
@@ -2246,7 +2246,7 @@ def _isValidDM(baseDir: str, nickname: str, domain: str, port: int,
         _dmNotify(baseDir, handle,
                   httpPrefix + '://' + domain + '/users/' + nickname + '/dm')
         return True
-        
+
     # get the file containing following handles
     followingFilename = \
         baseDir + '/accounts/' + \