mirror of https://gitlab.com/bashrc2/epicyon
				
				
				
			
							parent
							
								
									ee0ffade9d
								
							
						
					
					
						commit
						cd008c3013
					
				
							
								
								
									
										6
									
								
								blog.py
								
								
								
								
							
							
						
						
									
										6
									
								
								blog.py
								
								
								
								
							| 
						 | 
					@ -28,7 +28,6 @@ from utils import firstParagraphFromString
 | 
				
			||||||
from posts import createBlogsTimeline
 | 
					from posts import createBlogsTimeline
 | 
				
			||||||
from newswire import rss2Header
 | 
					from newswire import rss2Header
 | 
				
			||||||
from newswire import rss2Footer
 | 
					from newswire import rss2Footer
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def _noOfBlogReplies(baseDir: str, httpPrefix: str, translate: {},
 | 
					def _noOfBlogReplies(baseDir: str, httpPrefix: str, translate: {},
 | 
				
			||||||
| 
						 | 
					@ -745,9 +744,8 @@ def htmlEditBlog(mediaInstance: bool, translate: {},
 | 
				
			||||||
    editBlogText = '<h1">' + translate['Write your post text below.'] + '</h1>'
 | 
					    editBlogText = '<h1">' + translate['Write your post text below.'] + '</h1>'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if os.path.isfile(baseDir + '/accounts/newpost.txt'):
 | 
					    if os.path.isfile(baseDir + '/accounts/newpost.txt'):
 | 
				
			||||||
        newPostStr = readWholeFile(baseDir + '/accounts/newpost.txt')
 | 
					        with open(baseDir + '/accounts/newpost.txt', 'r') as file:
 | 
				
			||||||
        if newPostStr:
 | 
					            editBlogText = '<p>' + file.read() + '</p>'
 | 
				
			||||||
            editBlogText = '<p>' + newPostStr + '</p>'
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    cssFilename = baseDir + '/epicyon-profile.css'
 | 
					    cssFilename = baseDir + '/epicyon-profile.css'
 | 
				
			||||||
    if os.path.isfile(baseDir + '/epicyon.css'):
 | 
					    if os.path.isfile(baseDir + '/epicyon.css'):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,6 @@ from utils import saveJson
 | 
				
			||||||
from posts import getPersonBox
 | 
					from posts import getPersonBox
 | 
				
			||||||
from session import postJson
 | 
					from session import postJson
 | 
				
			||||||
from storage import storeValue
 | 
					from storage import storeValue
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def undoBookmarksCollectionEntry(recentPostsCache: {},
 | 
					def undoBookmarksCollectionEntry(recentPostsCache: {},
 | 
				
			||||||
| 
						 | 
					@ -60,9 +59,10 @@ def undoBookmarksCollectionEntry(recentPostsCache: {},
 | 
				
			||||||
    bookmarkIndex = bookmarkIndex.replace('\n', '').replace('\r', '')
 | 
					    bookmarkIndex = bookmarkIndex.replace('\n', '').replace('\r', '')
 | 
				
			||||||
    if bookmarkIndex not in open(bookmarksIndexFilename).read():
 | 
					    if bookmarkIndex not in open(bookmarksIndexFilename).read():
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
    indexStr = readWholeFile(bookmarksIndexFilename)
 | 
					    indexStr = ''
 | 
				
			||||||
    indexStr = indexStr.replace(bookmarkIndex + '\n', '')
 | 
					    with open(bookmarksIndexFilename, 'r') as indexFile:
 | 
				
			||||||
    storeValue(bookmarksIndexFilename, indexStr, 'writeonly')
 | 
					        indexStr = indexFile.read().replace(bookmarkIndex + '\n', '')
 | 
				
			||||||
 | 
					        storeValue(bookmarksIndexFilename, indexStr, 'writeonly')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if not postJsonObject.get('type'):
 | 
					    if not postJsonObject.get('type'):
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,7 +10,6 @@ __module_group__ = "RSS Feeds"
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
import datetime
 | 
					import datetime
 | 
				
			||||||
from storage import storeValue
 | 
					from storage import storeValue
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def getHashtagCategory(baseDir: str, hashtag: str) -> str:
 | 
					def getHashtagCategory(baseDir: str, hashtag: str) -> str:
 | 
				
			||||||
| 
						 | 
					@ -25,9 +24,10 @@ def getHashtagCategory(baseDir: str, hashtag: str) -> str:
 | 
				
			||||||
            if not os.path.isfile(categoryFilename):
 | 
					            if not os.path.isfile(categoryFilename):
 | 
				
			||||||
                return ''
 | 
					                return ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    categoryStr = readWholeFile(categoryFilename)
 | 
					    with open(categoryFilename, 'r') as fp:
 | 
				
			||||||
    if categoryStr:
 | 
					        categoryStr = fp.read()
 | 
				
			||||||
        return categoryStr
 | 
					        if categoryStr:
 | 
				
			||||||
 | 
					            return categoryStr
 | 
				
			||||||
    return ''
 | 
					    return ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -53,10 +53,12 @@ def getHashtagCategories(baseDir: str,
 | 
				
			||||||
            hashtag = f.split('.')[0]
 | 
					            hashtag = f.split('.')[0]
 | 
				
			||||||
            if len(hashtag) > maxTagLength:
 | 
					            if len(hashtag) > maxTagLength:
 | 
				
			||||||
                continue
 | 
					                continue
 | 
				
			||||||
            categoryStr = readWholeFile(categoryFilename)
 | 
					            with open(categoryFilename, 'r') as fp:
 | 
				
			||||||
            if not categoryStr:
 | 
					                categoryStr = fp.read()
 | 
				
			||||||
                continue
 | 
					
 | 
				
			||||||
            if categoryStr:
 | 
					                if not categoryStr:
 | 
				
			||||||
 | 
					                    continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if category:
 | 
					                if category:
 | 
				
			||||||
                    # only return a dictionary for a specific category
 | 
					                    # only return a dictionary for a specific category
 | 
				
			||||||
                    if categoryStr != category:
 | 
					                    if categoryStr != category:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										4
									
								
								city.py
								
								
								
								
							
							
						
						
									
										4
									
								
								city.py
								
								
								
								
							| 
						 | 
					@ -12,7 +12,6 @@ import datetime
 | 
				
			||||||
import random
 | 
					import random
 | 
				
			||||||
import math
 | 
					import math
 | 
				
			||||||
from random import randint
 | 
					from random import randint
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# states which the simulated city dweller can be in
 | 
					# states which the simulated city dweller can be in
 | 
				
			||||||
PERSON_SLEEP = 0
 | 
					PERSON_SLEEP = 0
 | 
				
			||||||
| 
						 | 
					@ -295,7 +294,8 @@ def getSpoofedCity(city: str, baseDir: str, nickname: str, domain: str) -> str:
 | 
				
			||||||
    cityFilename = baseDir + '/accounts/' + \
 | 
					    cityFilename = baseDir + '/accounts/' + \
 | 
				
			||||||
        nickname + '@' + domain + '/city.txt'
 | 
					        nickname + '@' + domain + '/city.txt'
 | 
				
			||||||
    if os.path.isfile(cityFilename):
 | 
					    if os.path.isfile(cityFilename):
 | 
				
			||||||
        city = readWholeFile(cityFilename).replace('\n', '')
 | 
					        with open(cityFilename, 'r') as fp:
 | 
				
			||||||
 | 
					            city = fp.read().replace('\n', '')
 | 
				
			||||||
    return city
 | 
					    return city
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,7 +19,6 @@ from utils import dangerousMarkup
 | 
				
			||||||
from utils import isPGPEncrypted
 | 
					from utils import isPGPEncrypted
 | 
				
			||||||
from utils import containsPGPPublicKey
 | 
					from utils import containsPGPPublicKey
 | 
				
			||||||
from petnames import getPetName
 | 
					from petnames import getPetName
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def removeHtmlTag(htmlStr: str, tag: str) -> str:
 | 
					def removeHtmlTag(htmlStr: str, tag: str) -> str:
 | 
				
			||||||
| 
						 | 
					@ -170,9 +169,8 @@ def dangerousCSS(filename: str, allowLocalNetworkAccess: bool) -> bool:
 | 
				
			||||||
    if not os.path.isfile(filename):
 | 
					    if not os.path.isfile(filename):
 | 
				
			||||||
        return False
 | 
					        return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    content = readWholeFile(filename)
 | 
					    with open(filename, 'r') as fp:
 | 
				
			||||||
    if content:
 | 
					        content = fp.read().lower()
 | 
				
			||||||
        content = content.lower()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        cssMatches = ('behavior:', ':expression', '?php', '.php',
 | 
					        cssMatches = ('behavior:', ':expression', '?php', '.php',
 | 
				
			||||||
                      'google', 'regexp', 'localhost',
 | 
					                      'google', 'regexp', 'localhost',
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										35
									
								
								daemon.py
								
								
								
								
							
							
						
						
									
										35
									
								
								daemon.py
								
								
								
								
							| 
						 | 
					@ -301,7 +301,6 @@ from speaker import getSSMLbox
 | 
				
			||||||
from city import getSpoofedCity
 | 
					from city import getSpoofedCity
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
from storage import storeValue
 | 
					from storage import storeValue
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# maximum number of posts to list in outbox feed
 | 
					# maximum number of posts to list in outbox feed
 | 
				
			||||||
| 
						 | 
					@ -666,7 +665,11 @@ class PubServer(BaseHTTPRequestHandler):
 | 
				
			||||||
        # self.send_header('Cache-Control', 'public, max-age=86400')
 | 
					        # self.send_header('Cache-Control', 'public, max-age=86400')
 | 
				
			||||||
        etag = None
 | 
					        etag = None
 | 
				
			||||||
        if os.path.isfile(mediaFilename + '.etag'):
 | 
					        if os.path.isfile(mediaFilename + '.etag'):
 | 
				
			||||||
            etag = readWholeFile(mediaFilename + '.etag')
 | 
					            try:
 | 
				
			||||||
 | 
					                with open(mediaFilename + '.etag', 'r') as etagFile:
 | 
				
			||||||
 | 
					                    etag = etagFile.read()
 | 
				
			||||||
 | 
					            except BaseException:
 | 
				
			||||||
 | 
					                pass
 | 
				
			||||||
        if not etag:
 | 
					        if not etag:
 | 
				
			||||||
            etag = sha1(data).hexdigest()  # nosec
 | 
					            etag = sha1(data).hexdigest()  # nosec
 | 
				
			||||||
            storeValue(mediaFilename + '.etag', etag, 'writeonly')
 | 
					            storeValue(mediaFilename + '.etag', etag, 'writeonly')
 | 
				
			||||||
| 
						 | 
					@ -687,7 +690,12 @@ class PubServer(BaseHTTPRequestHandler):
 | 
				
			||||||
            oldEtag = self.headers['If-None-Match']
 | 
					            oldEtag = self.headers['If-None-Match']
 | 
				
			||||||
            if os.path.isfile(mediaFilename + '.etag'):
 | 
					            if os.path.isfile(mediaFilename + '.etag'):
 | 
				
			||||||
                # load the etag from file
 | 
					                # load the etag from file
 | 
				
			||||||
                currEtag = readWholeFile(mediaFilename)
 | 
					                currEtag = ''
 | 
				
			||||||
 | 
					                try:
 | 
				
			||||||
 | 
					                    with open(mediaFilename, 'r') as etagFile:
 | 
				
			||||||
 | 
					                        currEtag = etagFile.read()
 | 
				
			||||||
 | 
					                except BaseException:
 | 
				
			||||||
 | 
					                    pass
 | 
				
			||||||
                if oldEtag == currEtag:
 | 
					                if oldEtag == currEtag:
 | 
				
			||||||
                    # The file has not changed
 | 
					                    # The file has not changed
 | 
				
			||||||
                    return True
 | 
					                    return True
 | 
				
			||||||
| 
						 | 
					@ -1524,7 +1532,12 @@ class PubServer(BaseHTTPRequestHandler):
 | 
				
			||||||
                    loginNickname + '@' + domain + '/.salt'
 | 
					                    loginNickname + '@' + domain + '/.salt'
 | 
				
			||||||
                salt = createPassword(32)
 | 
					                salt = createPassword(32)
 | 
				
			||||||
                if os.path.isfile(saltFilename):
 | 
					                if os.path.isfile(saltFilename):
 | 
				
			||||||
                    salt = readWholeFile(saltFilename)
 | 
					                    try:
 | 
				
			||||||
 | 
					                        with open(saltFilename, 'r') as fp:
 | 
				
			||||||
 | 
					                            salt = fp.read()
 | 
				
			||||||
 | 
					                    except Exception as e:
 | 
				
			||||||
 | 
					                        print('WARN: Unable to read salt for ' +
 | 
				
			||||||
 | 
					                              loginNickname + ' ' + str(e))
 | 
				
			||||||
                else:
 | 
					                else:
 | 
				
			||||||
                    storeValue(saltFilename, salt, 'writeonly')
 | 
					                    storeValue(saltFilename, salt, 'writeonly')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13095,7 +13108,11 @@ class PubServer(BaseHTTPRequestHandler):
 | 
				
			||||||
                    fileLength = os.path.getsize(mediaFilename)
 | 
					                    fileLength = os.path.getsize(mediaFilename)
 | 
				
			||||||
                    mediaTagFilename = mediaFilename + '.etag'
 | 
					                    mediaTagFilename = mediaFilename + '.etag'
 | 
				
			||||||
                    if os.path.isfile(mediaTagFilename):
 | 
					                    if os.path.isfile(mediaTagFilename):
 | 
				
			||||||
                        etag = readWholeFile(mediaTagFilename)
 | 
					                        try:
 | 
				
			||||||
 | 
					                            with open(mediaTagFilename, 'r') as etagFile:
 | 
				
			||||||
 | 
					                                etag = etagFile.read()
 | 
				
			||||||
 | 
					                        except BaseException:
 | 
				
			||||||
 | 
					                            pass
 | 
				
			||||||
                    else:
 | 
					                    else:
 | 
				
			||||||
                        with open(mediaFilename, 'rb') as avFile:
 | 
					                        with open(mediaFilename, 'rb') as avFile:
 | 
				
			||||||
                            mediaBinary = avFile.read()
 | 
					                            mediaBinary = avFile.read()
 | 
				
			||||||
| 
						 | 
					@ -14839,7 +14856,13 @@ def loadTokens(baseDir: str, tokensDict: {}, tokensLookup: {}) -> None:
 | 
				
			||||||
                if not os.path.isfile(tokenFilename):
 | 
					                if not os.path.isfile(tokenFilename):
 | 
				
			||||||
                    continue
 | 
					                    continue
 | 
				
			||||||
                nickname = handle.split('@')[0]
 | 
					                nickname = handle.split('@')[0]
 | 
				
			||||||
                token = readWholeFile(tokenFilename)
 | 
					                token = None
 | 
				
			||||||
 | 
					                try:
 | 
				
			||||||
 | 
					                    with open(tokenFilename, 'r') as fp:
 | 
				
			||||||
 | 
					                        token = fp.read()
 | 
				
			||||||
 | 
					                except Exception as e:
 | 
				
			||||||
 | 
					                    print('WARN: Unable to read token for ' +
 | 
				
			||||||
 | 
					                          nickname + ' ' + str(e))
 | 
				
			||||||
                if not token:
 | 
					                if not token:
 | 
				
			||||||
                    continue
 | 
					                    continue
 | 
				
			||||||
                tokensDict[nickname] = token
 | 
					                tokensDict[nickname] = token
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -57,7 +57,6 @@ from bookmarks import sendUndoBookmarkViaServer
 | 
				
			||||||
from delete import sendDeleteViaServer
 | 
					from delete import sendDeleteViaServer
 | 
				
			||||||
from person import getActorJson
 | 
					from person import getActorJson
 | 
				
			||||||
from storage import storeValue
 | 
					from storage import storeValue
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def _desktopHelp() -> None:
 | 
					def _desktopHelp() -> None:
 | 
				
			||||||
| 
						 | 
					@ -285,9 +284,10 @@ def _desktopShowBanner() -> None:
 | 
				
			||||||
        bannerFilename = 'theme/' + bannerTheme + '/banner.txt'
 | 
					        bannerFilename = 'theme/' + bannerTheme + '/banner.txt'
 | 
				
			||||||
        if not os.path.isfile(bannerFilename):
 | 
					        if not os.path.isfile(bannerFilename):
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
    banner = readWholeFile(bannerFilename)
 | 
					    with open(bannerFilename, 'r') as bannerFile:
 | 
				
			||||||
    if banner:
 | 
					        banner = bannerFile.read()
 | 
				
			||||||
        print(banner + '\n')
 | 
					        if banner:
 | 
				
			||||||
 | 
					            print(banner + '\n')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def _desktopWaitForCmd(timeout: int, debug: bool) -> str:
 | 
					def _desktopWaitForCmd(timeout: int, debug: bool) -> str:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										14
									
								
								follow.py
								
								
								
								
							
							
						
						
									
										14
									
								
								follow.py
								
								
								
								
							| 
						 | 
					@ -31,8 +31,6 @@ from auth import createBasicAuthHeader
 | 
				
			||||||
from session import getJson
 | 
					from session import getJson
 | 
				
			||||||
from session import postJson
 | 
					from session import postJson
 | 
				
			||||||
from storage import storeValue
 | 
					from storage import storeValue
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
from storage import readFileLines
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def createInitialLastSeen(baseDir: str, httpPrefix: str) -> None:
 | 
					def createInitialLastSeen(baseDir: str, httpPrefix: str) -> None:
 | 
				
			||||||
| 
						 | 
					@ -51,8 +49,8 @@ def createInitialLastSeen(baseDir: str, httpPrefix: str) -> None:
 | 
				
			||||||
            lastSeenDir = accountDir + '/lastseen'
 | 
					            lastSeenDir = accountDir + '/lastseen'
 | 
				
			||||||
            if not os.path.isdir(lastSeenDir):
 | 
					            if not os.path.isdir(lastSeenDir):
 | 
				
			||||||
                os.mkdir(lastSeenDir)
 | 
					                os.mkdir(lastSeenDir)
 | 
				
			||||||
            followingHandles = readFileLines(followingFilename)
 | 
					            with open(followingFilename, 'r') as fp:
 | 
				
			||||||
            if followingHandles:
 | 
					                followingHandles = fp.readlines()
 | 
				
			||||||
                for handle in followingHandles:
 | 
					                for handle in followingHandles:
 | 
				
			||||||
                    if '#' in handle:
 | 
					                    if '#' in handle:
 | 
				
			||||||
                        continue
 | 
					                        continue
 | 
				
			||||||
| 
						 | 
					@ -216,7 +214,9 @@ def isFollowerOfPerson(baseDir: str, nickname: str, domain: str,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    alreadyFollowing = False
 | 
					    alreadyFollowing = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    followersStr = readWholeFile(followersFile)
 | 
					    followersStr = ''
 | 
				
			||||||
 | 
					    with open(followersFile, 'r') as fpFollowers:
 | 
				
			||||||
 | 
					        followersStr = fpFollowers.read()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if handle in followersStr:
 | 
					    if handle in followersStr:
 | 
				
			||||||
        alreadyFollowing = True
 | 
					        alreadyFollowing = True
 | 
				
			||||||
| 
						 | 
					@ -556,7 +556,9 @@ def _storeFollowRequest(baseDir: str,
 | 
				
			||||||
    if os.path.isfile(followersFilename):
 | 
					    if os.path.isfile(followersFilename):
 | 
				
			||||||
        alreadyFollowing = False
 | 
					        alreadyFollowing = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        followersStr = readWholeFile(followersFilename)
 | 
					        followersStr = ''
 | 
				
			||||||
 | 
					        with open(followersFilename, 'r') as fpFollowers:
 | 
				
			||||||
 | 
					            followersStr = fpFollowers.read()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if approveHandle in followersStr:
 | 
					        if approveHandle in followersStr:
 | 
				
			||||||
            alreadyFollowing = True
 | 
					            alreadyFollowing = True
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,6 @@ __status__ = "Production"
 | 
				
			||||||
__module_group__ = "Calendar"
 | 
					__module_group__ = "Calendar"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
from storage import storeValue
 | 
					from storage import storeValue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,8 +29,9 @@ def receivingCalendarEvents(baseDir: str, nickname: str, domain: str,
 | 
				
			||||||
        if not os.path.isfile(followingFilename):
 | 
					        if not os.path.isfile(followingFilename):
 | 
				
			||||||
            return False
 | 
					            return False
 | 
				
			||||||
        # create a new calendar file from the following file
 | 
					        # create a new calendar file from the following file
 | 
				
			||||||
        followingHandles = readWholeFile(followingFilename)
 | 
					        with open(followingFilename, 'r') as followingFile:
 | 
				
			||||||
        storeValue(calendarFilename, followingHandles, 'writeonly')
 | 
					            followingHandles = followingFile.read()
 | 
				
			||||||
 | 
					            storeValue(calendarFilename, followingHandles, 'writeonly')
 | 
				
			||||||
    return handle + '\n' in open(calendarFilename).read()
 | 
					    return handle + '\n' in open(calendarFilename).read()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -66,11 +66,14 @@ def _receiveCalendarEvents(baseDir: str, nickname: str, domain: str,
 | 
				
			||||||
    followingHandles = ''
 | 
					    followingHandles = ''
 | 
				
			||||||
    if os.path.isfile(calendarFilename):
 | 
					    if os.path.isfile(calendarFilename):
 | 
				
			||||||
        print('Calendar file exists')
 | 
					        print('Calendar file exists')
 | 
				
			||||||
        followingHandles = readWholeFile(calendarFilename)
 | 
					        with open(calendarFilename, 'r') as calendarFile:
 | 
				
			||||||
 | 
					            followingHandles = calendarFile.read()
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        # create a new calendar file from the following file
 | 
					        # create a new calendar file from the following file
 | 
				
			||||||
        print('Creating calendar file ' + calendarFilename)
 | 
					        print('Creating calendar file ' + calendarFilename)
 | 
				
			||||||
        followingHandles = readWholeFile(followingFilename)
 | 
					        followingHandles = ''
 | 
				
			||||||
 | 
					        with open(followingFilename, 'r') as followingFile:
 | 
				
			||||||
 | 
					            followingHandles = followingFile.read()
 | 
				
			||||||
        if add:
 | 
					        if add:
 | 
				
			||||||
            storeValue(calendarFilename, followingHandles + handle, 'write')
 | 
					            storeValue(calendarFilename, followingHandles + handle, 'write')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,7 +17,6 @@ from utils import loadJson
 | 
				
			||||||
from utils import saveJson
 | 
					from utils import saveJson
 | 
				
			||||||
from utils import locatePost
 | 
					from utils import locatePost
 | 
				
			||||||
from storage import storeValue
 | 
					from storage import storeValue
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def _validUuid(testUuid: str, version=4):
 | 
					def _validUuid(testUuid: str, version=4):
 | 
				
			||||||
| 
						 | 
					@ -36,9 +35,9 @@ def _removeEventFromTimeline(eventId: str, tlEventsFilename: str) -> None:
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    if eventId + '\n' not in open(tlEventsFilename).read():
 | 
					    if eventId + '\n' not in open(tlEventsFilename).read():
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
    eventsTimeline = readWholeFile(tlEventsFilename)
 | 
					    with open(tlEventsFilename, 'r') as fp:
 | 
				
			||||||
    eventsTimeline = eventsTimeline.replace(eventId + '\n', '')
 | 
					        eventsTimeline = fp.read().replace(eventId + '\n', '')
 | 
				
			||||||
    storeValue(tlEventsFilename, eventsTimeline, 'writeonly')
 | 
					        storeValue(tlEventsFilename, eventsTimeline, 'writeonly')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def saveEventPost(baseDir: str, handle: str, postId: str,
 | 
					def saveEventPost(baseDir: str, handle: str, postId: str,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										12
									
								
								inbox.py
								
								
								
								
							
							
						
						
									
										12
									
								
								inbox.py
								
								
								
								
							| 
						 | 
					@ -84,7 +84,6 @@ from context import hasValidContext
 | 
				
			||||||
from speaker import updateSpeaker
 | 
					from speaker import updateSpeaker
 | 
				
			||||||
from announce import isSelfAnnounce
 | 
					from announce import isSelfAnnounce
 | 
				
			||||||
from storage import storeValue
 | 
					from storage import storeValue
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def storeHashTags(baseDir: str, nickname: str, postJsonObject: {}) -> None:
 | 
					def storeHashTags(baseDir: str, nickname: str, postJsonObject: {}) -> None:
 | 
				
			||||||
| 
						 | 
					@ -1880,9 +1879,10 @@ def _likeNotify(baseDir: str, domain: str, onionDomain: str,
 | 
				
			||||||
        # was there a previous like notification?
 | 
					        # was there a previous like notification?
 | 
				
			||||||
        if os.path.isfile(prevLikeFile):
 | 
					        if os.path.isfile(prevLikeFile):
 | 
				
			||||||
            # is it the same as the current notification ?
 | 
					            # is it the same as the current notification ?
 | 
				
			||||||
            prevLikeStr = readWholeFile(prevLikeFile)
 | 
					            with open(prevLikeFile, 'r') as fp:
 | 
				
			||||||
            if prevLikeStr == likeStr:
 | 
					                prevLikeStr = fp.read()
 | 
				
			||||||
                return
 | 
					                if prevLikeStr == likeStr:
 | 
				
			||||||
 | 
					                    return
 | 
				
			||||||
        storeValue(prevLikeFile, likeStr, 'writeonly')
 | 
					        storeValue(prevLikeFile, likeStr, 'writeonly')
 | 
				
			||||||
        storeValue(likeFile, likeStr, 'writeonly')
 | 
					        storeValue(likeFile, likeStr, 'writeonly')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2108,8 +2108,8 @@ def _updateLastSeen(baseDir: str, handle: str, actor: str) -> None:
 | 
				
			||||||
    daysSinceEpoch = (currTime - datetime.datetime(1970, 1, 1)).days
 | 
					    daysSinceEpoch = (currTime - datetime.datetime(1970, 1, 1)).days
 | 
				
			||||||
    # has the value changed?
 | 
					    # has the value changed?
 | 
				
			||||||
    if os.path.isfile(lastSeenFilename):
 | 
					    if os.path.isfile(lastSeenFilename):
 | 
				
			||||||
        daysSinceEpochFile = readWholeFile(lastSeenFilename)
 | 
					        with open(lastSeenFilename, 'r') as lastSeenFile:
 | 
				
			||||||
        if daysSinceEpochFile:
 | 
					            daysSinceEpochFile = lastSeenFile.read()
 | 
				
			||||||
            if int(daysSinceEpochFile) == daysSinceEpoch:
 | 
					            if int(daysSinceEpochFile) == daysSinceEpoch:
 | 
				
			||||||
                # value hasn't changed, so we can save writing anything to file
 | 
					                # value hasn't changed, so we can save writing anything to file
 | 
				
			||||||
                return
 | 
					                return
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,6 @@ from follow import followedAccountAccepts
 | 
				
			||||||
from follow import followedAccountRejects
 | 
					from follow import followedAccountRejects
 | 
				
			||||||
from follow import removeFromFollowRequests
 | 
					from follow import removeFromFollowRequests
 | 
				
			||||||
from utils import loadJson
 | 
					from utils import loadJson
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
from storage import storeValue
 | 
					from storage import storeValue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -97,7 +96,9 @@ def manualApproveFollowRequest(session, baseDir: str,
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # is the handle in the requests file?
 | 
					    # is the handle in the requests file?
 | 
				
			||||||
    approveFollowsStr = readWholeFile(approveFollowsFilename)
 | 
					    approveFollowsStr = ''
 | 
				
			||||||
 | 
					    with open(approveFollowsFilename, 'r') as fpFollowers:
 | 
				
			||||||
 | 
					        approveFollowsStr = fpFollowers.read()
 | 
				
			||||||
    exists = False
 | 
					    exists = False
 | 
				
			||||||
    approveHandleFull = approveHandle
 | 
					    approveHandleFull = approveHandle
 | 
				
			||||||
    if approveHandle in approveFollowsStr:
 | 
					    if approveHandle in approveFollowsStr:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										7
									
								
								media.py
								
								
								
								
							
							
						
						
									
										7
									
								
								media.py
								
								
								
								
							| 
						 | 
					@ -21,7 +21,6 @@ from shutil import copyfile
 | 
				
			||||||
from shutil import rmtree
 | 
					from shutil import rmtree
 | 
				
			||||||
from shutil import move
 | 
					from shutil import move
 | 
				
			||||||
from city import spoofGeolocation
 | 
					from city import spoofGeolocation
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
from storage import storeValue
 | 
					from storage import storeValue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -71,10 +70,8 @@ def _spoofMetaData(baseDir: str, nickname: str, domain: str,
 | 
				
			||||||
        baseDir + '/accounts/' + nickname + '@' + domain + '/decoyseed'
 | 
					        baseDir + '/accounts/' + nickname + '@' + domain + '/decoyseed'
 | 
				
			||||||
    decoySeed = 63725
 | 
					    decoySeed = 63725
 | 
				
			||||||
    if os.path.isfile(decoySeedFilename):
 | 
					    if os.path.isfile(decoySeedFilename):
 | 
				
			||||||
        decoySeedStr = readWholeFile(decoySeedFilename)
 | 
					        with open(decoySeedFilename, 'r') as fp:
 | 
				
			||||||
        if decoySeedStr:
 | 
					            decoySeed = int(fp.read())
 | 
				
			||||||
            if decoySeedStr.isdigit():
 | 
					 | 
				
			||||||
                decoySeed = int(decoySeedStr)
 | 
					 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        decoySeed = randint(10000, 10000000000000000)
 | 
					        decoySeed = randint(10000, 10000000000000000)
 | 
				
			||||||
        decoySeedStr = str(decoySeed)
 | 
					        decoySeedStr = str(decoySeed)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,7 +34,6 @@ from utils import clearFromPostCaches
 | 
				
			||||||
from utils import dangerousMarkup
 | 
					from utils import dangerousMarkup
 | 
				
			||||||
from inbox import storeHashTags
 | 
					from inbox import storeHashTags
 | 
				
			||||||
from session import createSession
 | 
					from session import createSession
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
from storage import storeValue
 | 
					from storage import storeValue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -399,8 +398,9 @@ def _createNewsMirror(baseDir: str, domain: str,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # remove the corresponding index entries
 | 
					        # remove the corresponding index entries
 | 
				
			||||||
        if removals:
 | 
					        if removals:
 | 
				
			||||||
            indexContent = readWholeFile(mirrorIndexFilename)
 | 
					            indexContent = ''
 | 
				
			||||||
            if indexContent:
 | 
					            with open(mirrorIndexFilename, 'r') as indexFile:
 | 
				
			||||||
 | 
					                indexContent = indexFile.read()
 | 
				
			||||||
                for removePostId in removals:
 | 
					                for removePostId in removals:
 | 
				
			||||||
                    indexContent = \
 | 
					                    indexContent = \
 | 
				
			||||||
                        indexContent.replace(removePostId + '\n', '')
 | 
					                        indexContent.replace(removePostId + '\n', '')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										10
									
								
								newswire.py
								
								
								
								
							
							
						
						
									
										10
									
								
								newswire.py
								
								
								
								
							| 
						 | 
					@ -29,8 +29,6 @@ from utils import removeHtml
 | 
				
			||||||
from blocking import isBlockedDomain
 | 
					from blocking import isBlockedDomain
 | 
				
			||||||
from blocking import isBlockedHashtag
 | 
					from blocking import isBlockedHashtag
 | 
				
			||||||
from filters import isFiltered
 | 
					from filters import isFiltered
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
from storage import readFileLines
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def _removeCDATA(text: str) -> str:
 | 
					def _removeCDATA(text: str) -> str:
 | 
				
			||||||
| 
						 | 
					@ -221,8 +219,8 @@ def loadHashtagCategories(baseDir: str, language: str) -> None:
 | 
				
			||||||
        if not os.path.isfile(hashtagCategoriesFilename):
 | 
					        if not os.path.isfile(hashtagCategoriesFilename):
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    xmlStr = readWholeFile(hashtagCategoriesFilename)
 | 
					    with open(hashtagCategoriesFilename, 'r') as fp:
 | 
				
			||||||
    if xmlStr:
 | 
					        xmlStr = fp.read()
 | 
				
			||||||
        _xml2StrToHashtagCategories(baseDir, xmlStr, 1024, True)
 | 
					        _xml2StrToHashtagCategories(baseDir, xmlStr, 1024, True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1016,7 +1014,9 @@ def getDictFromNewswire(session, baseDir: str, domain: str,
 | 
				
			||||||
    maxPostsPerSource = 5
 | 
					    maxPostsPerSource = 5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # add rss feeds
 | 
					    # add rss feeds
 | 
				
			||||||
    rssFeed = readFileLines(subscriptionsFilename)
 | 
					    rssFeed = []
 | 
				
			||||||
 | 
					    with open(subscriptionsFilename, 'r') as fp:
 | 
				
			||||||
 | 
					        rssFeed = fp.readlines()
 | 
				
			||||||
    result = {}
 | 
					    result = {}
 | 
				
			||||||
    for url in rssFeed:
 | 
					    for url in rssFeed:
 | 
				
			||||||
        url = url.strip()
 | 
					        url = url.strip()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -52,7 +52,6 @@ from session import createSession
 | 
				
			||||||
from session import getJson
 | 
					from session import getJson
 | 
				
			||||||
from webfinger import webfingerHandle
 | 
					from webfinger import webfingerHandle
 | 
				
			||||||
from pprint import pprint
 | 
					from pprint import pprint
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
from storage import storeValue
 | 
					from storage import storeValue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1122,7 +1121,9 @@ def isPersonSnoozed(baseDir: str, nickname: str, domain: str,
 | 
				
			||||||
                    replaceStr = line
 | 
					                    replaceStr = line
 | 
				
			||||||
                break
 | 
					                break
 | 
				
			||||||
    if replaceStr:
 | 
					    if replaceStr:
 | 
				
			||||||
        content = readWholeFile(snoozedFilename).replace(replaceStr, '')
 | 
					        content = None
 | 
				
			||||||
 | 
					        with open(snoozedFilename, 'r') as snoozedFile:
 | 
				
			||||||
 | 
					            content = snoozedFile.read().replace(replaceStr, '')
 | 
				
			||||||
        if content:
 | 
					        if content:
 | 
				
			||||||
            storeValue(snoozedFilename, content, 'writeonly')
 | 
					            storeValue(snoozedFilename, content, 'writeonly')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1167,7 +1168,9 @@ def personUnsnooze(baseDir: str, nickname: str, domain: str,
 | 
				
			||||||
                replaceStr = line
 | 
					                replaceStr = line
 | 
				
			||||||
                break
 | 
					                break
 | 
				
			||||||
    if replaceStr:
 | 
					    if replaceStr:
 | 
				
			||||||
        content = readWholeFile(snoozedFilename).replace(replaceStr, '')
 | 
					        content = None
 | 
				
			||||||
 | 
					        with open(snoozedFilename, 'r') as snoozedFile:
 | 
				
			||||||
 | 
					            content = snoozedFile.read().replace(replaceStr, '')
 | 
				
			||||||
        if content:
 | 
					        if content:
 | 
				
			||||||
            storeValue(snoozedFilename, content, 'writeonly')
 | 
					            storeValue(snoozedFilename, content, 'writeonly')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										13
									
								
								petnames.py
								
								
								
								
							
							
						
						
									
										13
									
								
								petnames.py
								
								
								
								
							| 
						 | 
					@ -7,7 +7,6 @@ __email__ = "bob@freedombone.net"
 | 
				
			||||||
__status__ = "Production"
 | 
					__status__ = "Production"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
from storage import storeValue
 | 
					from storage import storeValue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,8 +28,8 @@ def setPetName(baseDir: str, nickname: str, domain: str,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # does this entry already exist?
 | 
					    # does this entry already exist?
 | 
				
			||||||
    if os.path.isfile(petnamesFilename):
 | 
					    if os.path.isfile(petnamesFilename):
 | 
				
			||||||
        petnamesStr = readWholeFile(petnamesFilename)
 | 
					        with open(petnamesFilename, 'r') as petnamesFile:
 | 
				
			||||||
        if petnamesStr:
 | 
					            petnamesStr = petnamesFile.read()
 | 
				
			||||||
            if entry in petnamesStr:
 | 
					            if entry in petnamesStr:
 | 
				
			||||||
                return True
 | 
					                return True
 | 
				
			||||||
            if ' ' + handle + '\n' in petnamesStr:
 | 
					            if ' ' + handle + '\n' in petnamesStr:
 | 
				
			||||||
| 
						 | 
					@ -66,8 +65,8 @@ def getPetName(baseDir: str, nickname: str, domain: str,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if not os.path.isfile(petnamesFilename):
 | 
					    if not os.path.isfile(petnamesFilename):
 | 
				
			||||||
        return ''
 | 
					        return ''
 | 
				
			||||||
    petnamesStr = readWholeFile(petnamesFilename)
 | 
					    with open(petnamesFilename, 'r') as petnamesFile:
 | 
				
			||||||
    if petnamesStr:
 | 
					        petnamesStr = petnamesFile.read()
 | 
				
			||||||
        if ' ' + handle + '\n' in petnamesStr:
 | 
					        if ' ' + handle + '\n' in petnamesStr:
 | 
				
			||||||
            petnamesList = petnamesStr.split('\n')
 | 
					            petnamesList = petnamesStr.split('\n')
 | 
				
			||||||
            for pet in petnamesList:
 | 
					            for pet in petnamesList:
 | 
				
			||||||
| 
						 | 
					@ -87,8 +86,8 @@ def _getPetNameHandle(baseDir: str, nickname: str, domain: str,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if not os.path.isfile(petnamesFilename):
 | 
					    if not os.path.isfile(petnamesFilename):
 | 
				
			||||||
        return ''
 | 
					        return ''
 | 
				
			||||||
    petnamesStr = readWholeFile(petnamesFilename)
 | 
					    with open(petnamesFilename, 'r') as petnamesFile:
 | 
				
			||||||
    if petnamesStr:
 | 
					        petnamesStr = petnamesFile.read()
 | 
				
			||||||
        if petname + ' ' in petnamesStr:
 | 
					        if petname + ' ' in petnamesStr:
 | 
				
			||||||
            petnamesList = petnamesStr.split('\n')
 | 
					            petnamesList = petnamesStr.split('\n')
 | 
				
			||||||
            for pet in petnamesList:
 | 
					            for pet in petnamesList:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										13
									
								
								posts.py
								
								
								
								
							
							
						
						
									
										13
									
								
								posts.py
								
								
								
								
							| 
						 | 
					@ -72,7 +72,6 @@ from git import convertPostToPatch
 | 
				
			||||||
from linked_data_sig import generateJsonSignature
 | 
					from linked_data_sig import generateJsonSignature
 | 
				
			||||||
from petnames import resolvePetnames
 | 
					from petnames import resolvePetnames
 | 
				
			||||||
from storage import storeValue
 | 
					from storage import storeValue
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def isModerator(baseDir: str, nickname: str) -> bool:
 | 
					def isModerator(baseDir: str, nickname: str) -> bool:
 | 
				
			||||||
| 
						 | 
					@ -3023,8 +3022,9 @@ def _addPostToTimeline(filePath: str, boxname: str,
 | 
				
			||||||
                       postsInBox: [], boxActor: str) -> bool:
 | 
					                       postsInBox: [], boxActor: str) -> bool:
 | 
				
			||||||
    """ Reads a post from file and decides whether it is valid
 | 
					    """ Reads a post from file and decides whether it is valid
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    postStr = readWholeFile(filePath)
 | 
					    with open(filePath, 'r') as postFile:
 | 
				
			||||||
    if postStr:
 | 
					        postStr = postFile.read()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if filePath.endswith('.json'):
 | 
					        if filePath.endswith('.json'):
 | 
				
			||||||
            repliesFilename = filePath.replace('.json', '.replies')
 | 
					            repliesFilename = filePath.replace('.json', '.replies')
 | 
				
			||||||
            if os.path.isfile(repliesFilename):
 | 
					            if os.path.isfile(repliesFilename):
 | 
				
			||||||
| 
						 | 
					@ -3715,7 +3715,9 @@ def getPublicPostDomainsBlocked(session, baseDir: str,
 | 
				
			||||||
        return []
 | 
					        return []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # read the blocked domains as a single string
 | 
					    # read the blocked domains as a single string
 | 
				
			||||||
    blockedStr = readWholeFile(blockingFilename)
 | 
					    blockedStr = ''
 | 
				
			||||||
 | 
					    with open(blockingFilename, 'r') as fp:
 | 
				
			||||||
 | 
					        blockedStr = fp.read()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    blockedDomains = []
 | 
					    blockedDomains = []
 | 
				
			||||||
    for domainName in postDomains:
 | 
					    for domainName in postDomains:
 | 
				
			||||||
| 
						 | 
					@ -3764,7 +3766,8 @@ def checkDomains(session, baseDir: str,
 | 
				
			||||||
    updateFollowerWarnings = False
 | 
					    updateFollowerWarnings = False
 | 
				
			||||||
    followerWarningStr = ''
 | 
					    followerWarningStr = ''
 | 
				
			||||||
    if os.path.isfile(followerWarningFilename):
 | 
					    if os.path.isfile(followerWarningFilename):
 | 
				
			||||||
        followerWarningStr = readWholeFile(followerWarningFilename)
 | 
					        with open(followerWarningFilename, 'r') as fp:
 | 
				
			||||||
 | 
					            followerWarningStr = fp.read()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if singleCheck:
 | 
					    if singleCheck:
 | 
				
			||||||
        # checks a single random non-mutual
 | 
					        # checks a single random non-mutual
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										13
									
								
								speaker.py
								
								
								
								
							
							
						
						
									
										13
									
								
								speaker.py
								
								
								
								
							| 
						 | 
					@ -22,8 +22,6 @@ from utils import loadJson
 | 
				
			||||||
from utils import saveJson
 | 
					from utils import saveJson
 | 
				
			||||||
from utils import isPGPEncrypted
 | 
					from utils import isPGPEncrypted
 | 
				
			||||||
from content import htmlReplaceQuoteMarks
 | 
					from content import htmlReplaceQuoteMarks
 | 
				
			||||||
from storage import readFileLines
 | 
					 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
speakerRemoveChars = ('.\n', '. ', ',', ';', '?', '!')
 | 
					speakerRemoveChars = ('.\n', '. ', ',', ';', '?', '!')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -137,8 +135,8 @@ def _speakerPronounce(baseDir: str, sayText: str, translate: {}) -> str:
 | 
				
			||||||
            ")": ","
 | 
					            ")": ","
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    if os.path.isfile(pronounceFilename):
 | 
					    if os.path.isfile(pronounceFilename):
 | 
				
			||||||
        pronounceList = readFileLines(pronounceFilename)
 | 
					        with open(pronounceFilename, 'r') as fp:
 | 
				
			||||||
        if pronounceList:
 | 
					            pronounceList = fp.readlines()
 | 
				
			||||||
            for conversion in pronounceList:
 | 
					            for conversion in pronounceList:
 | 
				
			||||||
                separator = None
 | 
					                separator = None
 | 
				
			||||||
                if '->' in conversion:
 | 
					                if '->' in conversion:
 | 
				
			||||||
| 
						 | 
					@ -496,8 +494,8 @@ def _postToSpeakerJson(baseDir: str, httpPrefix: str,
 | 
				
			||||||
    accountsDir = baseDir + '/accounts/' + nickname + '@' + domainFull
 | 
					    accountsDir = baseDir + '/accounts/' + nickname + '@' + domainFull
 | 
				
			||||||
    approveFollowsFilename = accountsDir + '/followrequests.txt'
 | 
					    approveFollowsFilename = accountsDir + '/followrequests.txt'
 | 
				
			||||||
    if os.path.isfile(approveFollowsFilename):
 | 
					    if os.path.isfile(approveFollowsFilename):
 | 
				
			||||||
        follows = readFileLines(approveFollowsFilename)
 | 
					        with open(approveFollowsFilename, 'r') as fp:
 | 
				
			||||||
        if follows:
 | 
					            follows = fp.readlines()
 | 
				
			||||||
            if len(follows) > 0:
 | 
					            if len(follows) > 0:
 | 
				
			||||||
                followRequestsExist = True
 | 
					                followRequestsExist = True
 | 
				
			||||||
                for i in range(len(follows)):
 | 
					                for i in range(len(follows)):
 | 
				
			||||||
| 
						 | 
					@ -514,7 +512,8 @@ def _postToSpeakerJson(baseDir: str, httpPrefix: str,
 | 
				
			||||||
    likedBy = ''
 | 
					    likedBy = ''
 | 
				
			||||||
    likeFilename = accountsDir + '/.newLike'
 | 
					    likeFilename = accountsDir + '/.newLike'
 | 
				
			||||||
    if os.path.isfile(likeFilename):
 | 
					    if os.path.isfile(likeFilename):
 | 
				
			||||||
        likedBy = readWholeFile(likeFilename)
 | 
					        with open(likeFilename, 'r') as fp:
 | 
				
			||||||
 | 
					            likedBy = fp.read()
 | 
				
			||||||
    calendarFilename = accountsDir + '/.newCalendar'
 | 
					    calendarFilename = accountsDir + '/.newCalendar'
 | 
				
			||||||
    postCal = os.path.isfile(calendarFilename)
 | 
					    postCal = os.path.isfile(calendarFilename)
 | 
				
			||||||
    shareFilename = accountsDir + '/.newShare'
 | 
					    shareFilename = accountsDir + '/.newShare'
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										16
									
								
								storage.py
								
								
								
								
							
							
						
						
									
										16
									
								
								storage.py
								
								
								
								
							| 
						 | 
					@ -54,19 +54,3 @@ def storeValue(filename: str, lineStr: str, storeType: str) -> bool:
 | 
				
			||||||
                print('WARN: Unable to prepend to ' +
 | 
					                print('WARN: Unable to prepend to ' +
 | 
				
			||||||
                      filename + ' ' + str(e))
 | 
					                      filename + ' ' + str(e))
 | 
				
			||||||
    return False
 | 
					    return False
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def readWholeFile(filename: str) -> str:
 | 
					 | 
				
			||||||
    """Returns the entire contents of a file
 | 
					 | 
				
			||||||
    """
 | 
					 | 
				
			||||||
    with open(filename, 'r') as fp:
 | 
					 | 
				
			||||||
        return fp.read()
 | 
					 | 
				
			||||||
    return ''
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def readFileLines(filename: str) -> []:
 | 
					 | 
				
			||||||
    """Returns a list of lines from a file
 | 
					 | 
				
			||||||
    """
 | 
					 | 
				
			||||||
    with open(filename, 'r') as fp:
 | 
					 | 
				
			||||||
        return fp.readlines()
 | 
					 | 
				
			||||||
    return []
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										41
									
								
								theme.py
								
								
								
								
							
							
						
						
									
										41
									
								
								theme.py
								
								
								
								
							| 
						 | 
					@ -17,7 +17,6 @@ from shutil import unpack_archive
 | 
				
			||||||
from shutil import rmtree
 | 
					from shutil import rmtree
 | 
				
			||||||
from content import dangerousCSS
 | 
					from content import dangerousCSS
 | 
				
			||||||
from storage import storeValue
 | 
					from storage import storeValue
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def importTheme(baseDir: str, filename: str) -> bool:
 | 
					def importTheme(baseDir: str, filename: str) -> bool:
 | 
				
			||||||
| 
						 | 
					@ -36,9 +35,9 @@ def importTheme(baseDir: str, filename: str) -> bool:
 | 
				
			||||||
            print('WARN: ' + themeFile +
 | 
					            print('WARN: ' + themeFile +
 | 
				
			||||||
                  ' missing from imported theme')
 | 
					                  ' missing from imported theme')
 | 
				
			||||||
            return False
 | 
					            return False
 | 
				
			||||||
    newThemeName = readWholeFile(tempThemeDir + '/name.txt')
 | 
					    newThemeName = None
 | 
				
			||||||
    if newThemeName:
 | 
					    with open(tempThemeDir + '/name.txt', 'r') as fp:
 | 
				
			||||||
        newThemeName = newThemeName.replace('\n', '').replace('\r', '')
 | 
					        newThemeName = fp.read().replace('\n', '').replace('\r', '')
 | 
				
			||||||
        if len(newThemeName) > 20:
 | 
					        if len(newThemeName) > 20:
 | 
				
			||||||
            print('WARN: Imported theme name is too long')
 | 
					            print('WARN: Imported theme name is too long')
 | 
				
			||||||
            return False
 | 
					            return False
 | 
				
			||||||
| 
						 | 
					@ -328,8 +327,8 @@ def _setThemeFromDict(baseDir: str, name: str,
 | 
				
			||||||
        if not os.path.isfile(templateFilename):
 | 
					        if not os.path.isfile(templateFilename):
 | 
				
			||||||
            continue
 | 
					            continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        css = readWholeFile(templateFilename)
 | 
					        with open(templateFilename, 'r') as cssfile:
 | 
				
			||||||
        if css:
 | 
					            css = cssfile.read()
 | 
				
			||||||
            for paramName, paramValue in themeParams.items():
 | 
					            for paramName, paramValue in themeParams.items():
 | 
				
			||||||
                if paramName == 'newswire-publish-icon':
 | 
					                if paramName == 'newswire-publish-icon':
 | 
				
			||||||
                    if paramValue.lower() == 'true':
 | 
					                    if paramValue.lower() == 'true':
 | 
				
			||||||
| 
						 | 
					@ -386,8 +385,8 @@ def _setBackgroundFormat(baseDir: str, name: str,
 | 
				
			||||||
    cssFilename = baseDir + '/' + backgroundType + '.css'
 | 
					    cssFilename = baseDir + '/' + backgroundType + '.css'
 | 
				
			||||||
    if not os.path.isfile(cssFilename):
 | 
					    if not os.path.isfile(cssFilename):
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
    css = readWholeFile(cssFilename)
 | 
					    with open(cssFilename, 'r') as cssfile:
 | 
				
			||||||
    if css:
 | 
					        css = cssfile.read()
 | 
				
			||||||
        css = css.replace('background.jpg', 'background.' + extension)
 | 
					        css = css.replace('background.jpg', 'background.' + extension)
 | 
				
			||||||
        storeValue(cssFilename, css, 'writeonly')
 | 
					        storeValue(cssFilename, css, 'writeonly')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -400,8 +399,8 @@ def enableGrayscale(baseDir: str) -> None:
 | 
				
			||||||
        templateFilename = baseDir + '/' + filename
 | 
					        templateFilename = baseDir + '/' + filename
 | 
				
			||||||
        if not os.path.isfile(templateFilename):
 | 
					        if not os.path.isfile(templateFilename):
 | 
				
			||||||
            continue
 | 
					            continue
 | 
				
			||||||
        css = readWholeFile(templateFilename)
 | 
					        with open(templateFilename, 'r') as cssfile:
 | 
				
			||||||
        if css:
 | 
					            css = cssfile.read()
 | 
				
			||||||
            if 'grayscale' not in css:
 | 
					            if 'grayscale' not in css:
 | 
				
			||||||
                css = \
 | 
					                css = \
 | 
				
			||||||
                    css.replace('body, html {',
 | 
					                    css.replace('body, html {',
 | 
				
			||||||
| 
						 | 
					@ -421,8 +420,8 @@ def disableGrayscale(baseDir: str) -> None:
 | 
				
			||||||
        templateFilename = baseDir + '/' + filename
 | 
					        templateFilename = baseDir + '/' + filename
 | 
				
			||||||
        if not os.path.isfile(templateFilename):
 | 
					        if not os.path.isfile(templateFilename):
 | 
				
			||||||
            continue
 | 
					            continue
 | 
				
			||||||
        css = readWholeFile(templateFilename)
 | 
					        with open(templateFilename, 'r') as cssfile:
 | 
				
			||||||
        if css:
 | 
					            css = cssfile.read()
 | 
				
			||||||
            if 'grayscale' in css:
 | 
					            if 'grayscale' in css:
 | 
				
			||||||
                css = \
 | 
					                css = \
 | 
				
			||||||
                    css.replace('\n    filter: grayscale(100%);', '')
 | 
					                    css.replace('\n    filter: grayscale(100%);', '')
 | 
				
			||||||
| 
						 | 
					@ -457,8 +456,8 @@ def _setCustomFont(baseDir: str):
 | 
				
			||||||
        templateFilename = baseDir + '/' + filename
 | 
					        templateFilename = baseDir + '/' + filename
 | 
				
			||||||
        if not os.path.isfile(templateFilename):
 | 
					        if not os.path.isfile(templateFilename):
 | 
				
			||||||
            continue
 | 
					            continue
 | 
				
			||||||
        css = readWholeFile(templateFilename)
 | 
					        with open(templateFilename, 'r') as cssfile:
 | 
				
			||||||
        if css:
 | 
					            css = cssfile.read()
 | 
				
			||||||
            css = \
 | 
					            css = \
 | 
				
			||||||
                setCSSparam(css, "*src",
 | 
					                setCSSparam(css, "*src",
 | 
				
			||||||
                            "url('./fonts/custom." +
 | 
					                            "url('./fonts/custom." +
 | 
				
			||||||
| 
						 | 
					@ -541,9 +540,10 @@ def getTextModeBanner(baseDir: str) -> str:
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    textModeBannerFilename = baseDir + '/accounts/banner.txt'
 | 
					    textModeBannerFilename = baseDir + '/accounts/banner.txt'
 | 
				
			||||||
    if os.path.isfile(textModeBannerFilename):
 | 
					    if os.path.isfile(textModeBannerFilename):
 | 
				
			||||||
        bannerStr = readWholeFile(textModeBannerFilename)
 | 
					        with open(textModeBannerFilename, 'r') as fp:
 | 
				
			||||||
        if bannerStr:
 | 
					            bannerStr = fp.read()
 | 
				
			||||||
            return bannerStr.replace('\n', '<br>')
 | 
					            if bannerStr:
 | 
				
			||||||
 | 
					                return bannerStr.replace('\n', '<br>')
 | 
				
			||||||
    return None
 | 
					    return None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -554,9 +554,10 @@ def getTextModeLogo(baseDir: str) -> str:
 | 
				
			||||||
    if not os.path.isfile(textModeLogoFilename):
 | 
					    if not os.path.isfile(textModeLogoFilename):
 | 
				
			||||||
        textModeLogoFilename = baseDir + '/img/logo.txt'
 | 
					        textModeLogoFilename = baseDir + '/img/logo.txt'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    logoStr = readWholeFile(textModeLogoFilename)
 | 
					    with open(textModeLogoFilename, 'r') as fp:
 | 
				
			||||||
    if logoStr:
 | 
					        logoStr = fp.read()
 | 
				
			||||||
        return logoStr.replace('\n', '<br>')
 | 
					        if logoStr:
 | 
				
			||||||
 | 
					            return logoStr.replace('\n', '<br>')
 | 
				
			||||||
    return None
 | 
					    return None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										70
									
								
								utils.py
								
								
								
								
							
							
						
						
									
										70
									
								
								utils.py
								
								
								
								
							| 
						 | 
					@ -19,7 +19,6 @@ from followingCalendar import addPersonToCalendar
 | 
				
			||||||
from cryptography.hazmat.backends import default_backend
 | 
					from cryptography.hazmat.backends import default_backend
 | 
				
			||||||
from cryptography.hazmat.primitives import hashes
 | 
					from cryptography.hazmat.primitives import hashes
 | 
				
			||||||
from storage import storeValue
 | 
					from storage import storeValue
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# posts containing these strings will always get screened out,
 | 
					# posts containing these strings will always get screened out,
 | 
				
			||||||
# both incoming and outgoing.
 | 
					# both incoming and outgoing.
 | 
				
			||||||
| 
						 | 
					@ -164,8 +163,8 @@ def isDormant(baseDir: str, nickname: str, domain: str, actor: str,
 | 
				
			||||||
    if not os.path.isfile(lastSeenFilename):
 | 
					    if not os.path.isfile(lastSeenFilename):
 | 
				
			||||||
        return False
 | 
					        return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    daysSinceEpochStr = readWholeFile(lastSeenFilename)
 | 
					    with open(lastSeenFilename, 'r') as lastSeenFile:
 | 
				
			||||||
    if daysSinceEpochStr:
 | 
					        daysSinceEpochStr = lastSeenFile.read()
 | 
				
			||||||
        daysSinceEpoch = int(daysSinceEpochStr)
 | 
					        daysSinceEpoch = int(daysSinceEpochStr)
 | 
				
			||||||
        currTime = datetime.datetime.utcnow()
 | 
					        currTime = datetime.datetime.utcnow()
 | 
				
			||||||
        currDaysSinceEpoch = (currTime - datetime.datetime(1970, 1, 1)).days
 | 
					        currDaysSinceEpoch = (currTime - datetime.datetime(1970, 1, 1)).days
 | 
				
			||||||
| 
						 | 
					@ -507,8 +506,8 @@ def loadJson(filename: str, delaySec=2, maxTries=5) -> {}:
 | 
				
			||||||
    tries = 0
 | 
					    tries = 0
 | 
				
			||||||
    while tries < maxTries:
 | 
					    while tries < maxTries:
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            data = readWholeFile(filename)
 | 
					            with open(filename, 'r') as fp:
 | 
				
			||||||
            if data:
 | 
					                data = fp.read()
 | 
				
			||||||
                jsonObject = json.loads(data)
 | 
					                jsonObject = json.loads(data)
 | 
				
			||||||
                break
 | 
					                break
 | 
				
			||||||
        except BaseException:
 | 
					        except BaseException:
 | 
				
			||||||
| 
						 | 
					@ -528,13 +527,14 @@ def loadJsonOnionify(filename: str, domain: str, onionDomain: str,
 | 
				
			||||||
    tries = 0
 | 
					    tries = 0
 | 
				
			||||||
    while tries < 5:
 | 
					    while tries < 5:
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            data = readWholeFile(filename)
 | 
					            with open(filename, 'r') as fp:
 | 
				
			||||||
            if data:
 | 
					                data = fp.read()
 | 
				
			||||||
                data = data.replace(domain, onionDomain)
 | 
					                if data:
 | 
				
			||||||
                data = data.replace('https:', 'http:')
 | 
					                    data = data.replace(domain, onionDomain)
 | 
				
			||||||
                print('*****data: ' + data)
 | 
					                    data = data.replace('https:', 'http:')
 | 
				
			||||||
            jsonObject = json.loads(data)
 | 
					                    print('*****data: ' + data)
 | 
				
			||||||
            break
 | 
					                jsonObject = json.loads(data)
 | 
				
			||||||
 | 
					                break
 | 
				
			||||||
        except BaseException:
 | 
					        except BaseException:
 | 
				
			||||||
            print('WARN: loadJson exception')
 | 
					            print('WARN: loadJson exception')
 | 
				
			||||||
            if delaySec > 0:
 | 
					            if delaySec > 0:
 | 
				
			||||||
| 
						 | 
					@ -942,13 +942,14 @@ def _setDefaultPetName(baseDir: str, nickname: str, domain: str,
 | 
				
			||||||
        storeValue(petnamesFilename, petnameLookupEntry, 'writeonly')
 | 
					        storeValue(petnamesFilename, petnameLookupEntry, 'writeonly')
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    petnamesStr = readWholeFile(petnamesFilename)
 | 
					    with open(petnamesFilename, 'r') as petnamesFile:
 | 
				
			||||||
    if petnamesStr:
 | 
					        petnamesStr = petnamesFile.read()
 | 
				
			||||||
        petnamesList = petnamesStr.split('\n')
 | 
					        if petnamesStr:
 | 
				
			||||||
        for pet in petnamesList:
 | 
					            petnamesList = petnamesStr.split('\n')
 | 
				
			||||||
            if pet.startswith(followNickname + ' '):
 | 
					            for pet in petnamesList:
 | 
				
			||||||
                # petname already exists
 | 
					                if pet.startswith(followNickname + ' '):
 | 
				
			||||||
                return
 | 
					                    # petname already exists
 | 
				
			||||||
 | 
					                    return
 | 
				
			||||||
    # petname doesn't already exist
 | 
					    # petname doesn't already exist
 | 
				
			||||||
    storeValue(petnamesFilename, petnameLookupEntry, 'append')
 | 
					    storeValue(petnamesFilename, petnameLookupEntry, 'append')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1093,12 +1094,13 @@ def locateNewsArrival(baseDir: str, domain: str,
 | 
				
			||||||
    accountDir = baseDir + '/accounts/news@' + domain + '/'
 | 
					    accountDir = baseDir + '/accounts/news@' + domain + '/'
 | 
				
			||||||
    postFilename = accountDir + 'outbox/' + postUrl
 | 
					    postFilename = accountDir + 'outbox/' + postUrl
 | 
				
			||||||
    if os.path.isfile(postFilename):
 | 
					    if os.path.isfile(postFilename):
 | 
				
			||||||
        arrival = readWholeFile(postFilename)
 | 
					        with open(postFilename, 'r') as arrivalFile:
 | 
				
			||||||
        if arrival:
 | 
					            arrival = arrivalFile.read()
 | 
				
			||||||
            arrivalDate = \
 | 
					            if arrival:
 | 
				
			||||||
                datetime.datetime.strptime(arrival,
 | 
					                arrivalDate = \
 | 
				
			||||||
                                           "%Y-%m-%dT%H:%M:%SZ")
 | 
					                    datetime.datetime.strptime(arrival,
 | 
				
			||||||
            return arrivalDate
 | 
					                                               "%Y-%m-%dT%H:%M:%SZ")
 | 
				
			||||||
 | 
					                return arrivalDate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return None
 | 
					    return None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1486,8 +1488,8 @@ def noOfActiveAccountsMonthly(baseDir: str, months: int) -> bool:
 | 
				
			||||||
                    lastUsedFilename = \
 | 
					                    lastUsedFilename = \
 | 
				
			||||||
                        baseDir + '/accounts/' + account + '/.lastUsed'
 | 
					                        baseDir + '/accounts/' + account + '/.lastUsed'
 | 
				
			||||||
                    if os.path.isfile(lastUsedFilename):
 | 
					                    if os.path.isfile(lastUsedFilename):
 | 
				
			||||||
                        lastUsed = readWholeFile(lastUsedFilename)
 | 
					                        with open(lastUsedFilename, 'r') as lastUsedFile:
 | 
				
			||||||
                        if lastUsed:
 | 
					                            lastUsed = lastUsedFile.read()
 | 
				
			||||||
                            if lastUsed.isdigit():
 | 
					                            if lastUsed.isdigit():
 | 
				
			||||||
                                timeDiff = (currTime - int(lastUsed))
 | 
					                                timeDiff = (currTime - int(lastUsed))
 | 
				
			||||||
                                if timeDiff < monthSeconds:
 | 
					                                if timeDiff < monthSeconds:
 | 
				
			||||||
| 
						 | 
					@ -1643,8 +1645,8 @@ def getCSS(baseDir: str, cssFilename: str, cssCache: {}) -> str:
 | 
				
			||||||
            # file hasn't changed, so return the version in the cache
 | 
					            # file hasn't changed, so return the version in the cache
 | 
				
			||||||
            return cssCache[cssFilename][1]
 | 
					            return cssCache[cssFilename][1]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    css = readWholeFile(cssFilename)
 | 
					    with open(cssFilename, 'r') as fpCSS:
 | 
				
			||||||
    if css:
 | 
					        css = fpCSS.read()
 | 
				
			||||||
        if cssCache.get(cssFilename):
 | 
					        if cssCache.get(cssFilename):
 | 
				
			||||||
            # alter the cache contents
 | 
					            # alter the cache contents
 | 
				
			||||||
            cssCache[cssFilename][0] = lastModified
 | 
					            cssCache[cssFilename][0] = lastModified
 | 
				
			||||||
| 
						 | 
					@ -1754,8 +1756,9 @@ def _searchVirtualBoxPosts(baseDir: str, nickname: str, domain: str,
 | 
				
			||||||
            postFilename = path + '/' + postFilename.strip()
 | 
					            postFilename = path + '/' + postFilename.strip()
 | 
				
			||||||
            if not os.path.isfile(postFilename):
 | 
					            if not os.path.isfile(postFilename):
 | 
				
			||||||
                continue
 | 
					                continue
 | 
				
			||||||
            data = readWholeFile(postFilename).lower()
 | 
					            with open(postFilename, 'r') as postFile:
 | 
				
			||||||
            if data:
 | 
					                data = postFile.read().lower()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                notFound = False
 | 
					                notFound = False
 | 
				
			||||||
                for keyword in searchWords:
 | 
					                for keyword in searchWords:
 | 
				
			||||||
                    if keyword not in data:
 | 
					                    if keyword not in data:
 | 
				
			||||||
| 
						 | 
					@ -1796,8 +1799,9 @@ def searchBoxPosts(baseDir: str, nickname: str, domain: str,
 | 
				
			||||||
    for root, dirs, fnames in os.walk(path):
 | 
					    for root, dirs, fnames in os.walk(path):
 | 
				
			||||||
        for fname in fnames:
 | 
					        for fname in fnames:
 | 
				
			||||||
            filePath = os.path.join(root, fname)
 | 
					            filePath = os.path.join(root, fname)
 | 
				
			||||||
            data = readWholeFile(filePath).lower()
 | 
					            with open(filePath, 'r') as postFile:
 | 
				
			||||||
            if data:
 | 
					                data = postFile.read().lower()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                notFound = False
 | 
					                notFound = False
 | 
				
			||||||
                for keyword in searchWords:
 | 
					                for keyword in searchWords:
 | 
				
			||||||
                    if keyword not in data:
 | 
					                    if keyword not in data:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,7 +13,6 @@ from utils import getConfigParam
 | 
				
			||||||
from webapp_utils import htmlHeaderWithWebsiteMarkup
 | 
					from webapp_utils import htmlHeaderWithWebsiteMarkup
 | 
				
			||||||
from webapp_utils import htmlFooter
 | 
					from webapp_utils import htmlFooter
 | 
				
			||||||
from webapp_utils import markdownToHtml
 | 
					from webapp_utils import markdownToHtml
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def htmlAbout(cssCache: {}, baseDir: str, httpPrefix: str,
 | 
					def htmlAbout(cssCache: {}, baseDir: str, httpPrefix: str,
 | 
				
			||||||
| 
						 | 
					@ -33,9 +32,8 @@ def htmlAbout(cssCache: {}, baseDir: str, httpPrefix: str,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    aboutText = 'Information about this instance goes here.'
 | 
					    aboutText = 'Information about this instance goes here.'
 | 
				
			||||||
    if os.path.isfile(baseDir + '/accounts/about.md'):
 | 
					    if os.path.isfile(baseDir + '/accounts/about.md'):
 | 
				
			||||||
        aboutText = readWholeFile(baseDir + '/accounts/about.md')
 | 
					        with open(baseDir + '/accounts/about.md', 'r') as aboutFile:
 | 
				
			||||||
        if aboutText:
 | 
					            aboutText = markdownToHtml(aboutFile.read())
 | 
				
			||||||
            aboutText = markdownToHtml(aboutText)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    aboutForm = ''
 | 
					    aboutForm = ''
 | 
				
			||||||
    cssFilename = baseDir + '/epicyon-profile.css'
 | 
					    cssFilename = baseDir + '/epicyon-profile.css'
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,7 +18,6 @@ from webapp_utils import headerButtonsFrontScreen
 | 
				
			||||||
from webapp_utils import htmlHeaderWithExternalStyle
 | 
					from webapp_utils import htmlHeaderWithExternalStyle
 | 
				
			||||||
from webapp_utils import htmlFooter
 | 
					from webapp_utils import htmlFooter
 | 
				
			||||||
from webapp_utils import getBannerFile
 | 
					from webapp_utils import getBannerFile
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def _linksExist(baseDir: str) -> bool:
 | 
					def _linksExist(baseDir: str) -> bool:
 | 
				
			||||||
| 
						 | 
					@ -404,7 +403,8 @@ def htmlEditLinks(cssCache: {}, translate: {}, baseDir: str, path: str,
 | 
				
			||||||
    linksFilename = baseDir + '/accounts/links.txt'
 | 
					    linksFilename = baseDir + '/accounts/links.txt'
 | 
				
			||||||
    linksStr = ''
 | 
					    linksStr = ''
 | 
				
			||||||
    if os.path.isfile(linksFilename):
 | 
					    if os.path.isfile(linksFilename):
 | 
				
			||||||
        linksStr = readWholeFile(linksFilename)
 | 
					        with open(linksFilename, 'r') as fp:
 | 
				
			||||||
 | 
					            linksStr = fp.read()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    editLinksForm += \
 | 
					    editLinksForm += \
 | 
				
			||||||
        '<div class="container">'
 | 
					        '<div class="container">'
 | 
				
			||||||
| 
						 | 
					@ -426,7 +426,8 @@ def htmlEditLinks(cssCache: {}, translate: {}, baseDir: str, path: str,
 | 
				
			||||||
            aboutFilename = baseDir + '/accounts/about.md'
 | 
					            aboutFilename = baseDir + '/accounts/about.md'
 | 
				
			||||||
            aboutStr = ''
 | 
					            aboutStr = ''
 | 
				
			||||||
            if os.path.isfile(aboutFilename):
 | 
					            if os.path.isfile(aboutFilename):
 | 
				
			||||||
                aboutStr = readWholeFile(aboutFilename)
 | 
					                with open(aboutFilename, 'r') as fp:
 | 
				
			||||||
 | 
					                    aboutStr = fp.read()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            editLinksForm += \
 | 
					            editLinksForm += \
 | 
				
			||||||
                '<div class="container">'
 | 
					                '<div class="container">'
 | 
				
			||||||
| 
						 | 
					@ -444,7 +445,8 @@ def htmlEditLinks(cssCache: {}, translate: {}, baseDir: str, path: str,
 | 
				
			||||||
            TOSFilename = baseDir + '/accounts/tos.md'
 | 
					            TOSFilename = baseDir + '/accounts/tos.md'
 | 
				
			||||||
            TOSStr = ''
 | 
					            TOSStr = ''
 | 
				
			||||||
            if os.path.isfile(TOSFilename):
 | 
					            if os.path.isfile(TOSFilename):
 | 
				
			||||||
                TOSStr = readWholeFile(TOSFilename)
 | 
					                with open(TOSFilename, 'r') as fp:
 | 
				
			||||||
 | 
					                    TOSStr = fp.read()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            editLinksForm += \
 | 
					            editLinksForm += \
 | 
				
			||||||
                '<div class="container">'
 | 
					                '<div class="container">'
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,7 +24,6 @@ from webapp_utils import htmlFooter
 | 
				
			||||||
from webapp_utils import getBannerFile
 | 
					from webapp_utils import getBannerFile
 | 
				
			||||||
from webapp_utils import htmlPostSeparator
 | 
					from webapp_utils import htmlPostSeparator
 | 
				
			||||||
from webapp_utils import headerButtonsFrontScreen
 | 
					from webapp_utils import headerButtonsFrontScreen
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def _votesIndicator(totalVotes: int, positiveVoting: bool) -> str:
 | 
					def _votesIndicator(totalVotes: int, positiveVoting: bool) -> str:
 | 
				
			||||||
| 
						 | 
					@ -577,7 +576,8 @@ def htmlEditNewswire(cssCache: {}, translate: {}, baseDir: str, path: str,
 | 
				
			||||||
    newswireFilename = baseDir + '/accounts/newswire.txt'
 | 
					    newswireFilename = baseDir + '/accounts/newswire.txt'
 | 
				
			||||||
    newswireStr = ''
 | 
					    newswireStr = ''
 | 
				
			||||||
    if os.path.isfile(newswireFilename):
 | 
					    if os.path.isfile(newswireFilename):
 | 
				
			||||||
        newswireStr = readWholeFile(newswireFilename)
 | 
					        with open(newswireFilename, 'r') as fp:
 | 
				
			||||||
 | 
					            newswireStr = fp.read()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    editNewswireForm += \
 | 
					    editNewswireForm += \
 | 
				
			||||||
        '<div class="container">'
 | 
					        '<div class="container">'
 | 
				
			||||||
| 
						 | 
					@ -595,7 +595,8 @@ def htmlEditNewswire(cssCache: {}, translate: {}, baseDir: str, path: str,
 | 
				
			||||||
    filterFilename = \
 | 
					    filterFilename = \
 | 
				
			||||||
        baseDir + '/accounts/news@' + domain + '/filters.txt'
 | 
					        baseDir + '/accounts/news@' + domain + '/filters.txt'
 | 
				
			||||||
    if os.path.isfile(filterFilename):
 | 
					    if os.path.isfile(filterFilename):
 | 
				
			||||||
        filterStr = readWholeFile(filterFilename)
 | 
					        with open(filterFilename, 'r') as filterfile:
 | 
				
			||||||
 | 
					            filterStr = filterfile.read()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    editNewswireForm += \
 | 
					    editNewswireForm += \
 | 
				
			||||||
        '      <br><b><label class="labels">' + \
 | 
					        '      <br><b><label class="labels">' + \
 | 
				
			||||||
| 
						 | 
					@ -610,7 +611,8 @@ def htmlEditNewswire(cssCache: {}, translate: {}, baseDir: str, path: str,
 | 
				
			||||||
    hashtagRulesFilename = \
 | 
					    hashtagRulesFilename = \
 | 
				
			||||||
        baseDir + '/accounts/hashtagrules.txt'
 | 
					        baseDir + '/accounts/hashtagrules.txt'
 | 
				
			||||||
    if os.path.isfile(hashtagRulesFilename):
 | 
					    if os.path.isfile(hashtagRulesFilename):
 | 
				
			||||||
        hashtagRulesStr = readWholeFile(hashtagRulesFilename)
 | 
					        with open(hashtagRulesFilename, 'r') as rulesfile:
 | 
				
			||||||
 | 
					            hashtagRulesStr = rulesfile.read()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    editNewswireForm += \
 | 
					    editNewswireForm += \
 | 
				
			||||||
        '      <br><b><label class="labels">' + \
 | 
					        '      <br><b><label class="labels">' + \
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,7 +17,6 @@ from utils import getConfigParam
 | 
				
			||||||
from webapp_utils import getBannerFile
 | 
					from webapp_utils import getBannerFile
 | 
				
			||||||
from webapp_utils import htmlHeaderWithExternalStyle
 | 
					from webapp_utils import htmlHeaderWithExternalStyle
 | 
				
			||||||
from webapp_utils import htmlFooter
 | 
					from webapp_utils import htmlFooter
 | 
				
			||||||
from storage import readWholeFile
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def _htmlFollowingDataList(baseDir: str, nickname: str,
 | 
					def _htmlFollowingDataList(baseDir: str, nickname: str,
 | 
				
			||||||
| 
						 | 
					@ -28,33 +27,34 @@ def _htmlFollowingDataList(baseDir: str, nickname: str,
 | 
				
			||||||
    followingFilename = \
 | 
					    followingFilename = \
 | 
				
			||||||
        baseDir + '/accounts/' + nickname + '@' + domain + '/following.txt'
 | 
					        baseDir + '/accounts/' + nickname + '@' + domain + '/following.txt'
 | 
				
			||||||
    if os.path.isfile(followingFilename):
 | 
					    if os.path.isfile(followingFilename):
 | 
				
			||||||
        msg = readWholeFile(followingFilename)
 | 
					        with open(followingFilename, 'r') as followingFile:
 | 
				
			||||||
        # add your own handle, so that you can send DMs
 | 
					            msg = followingFile.read()
 | 
				
			||||||
        # to yourself as reminders
 | 
					            # add your own handle, so that you can send DMs
 | 
				
			||||||
        msg += nickname + '@' + domainFull + '\n'
 | 
					            # to yourself as reminders
 | 
				
			||||||
        # include petnames
 | 
					            msg += nickname + '@' + domainFull + '\n'
 | 
				
			||||||
        petnamesFilename = \
 | 
					            # include petnames
 | 
				
			||||||
            baseDir + '/accounts/' + \
 | 
					            petnamesFilename = \
 | 
				
			||||||
            nickname + '@' + domain + '/petnames.txt'
 | 
					                baseDir + '/accounts/' + \
 | 
				
			||||||
        if os.path.isfile(petnamesFilename):
 | 
					                nickname + '@' + domain + '/petnames.txt'
 | 
				
			||||||
            followingList = []
 | 
					            if os.path.isfile(petnamesFilename):
 | 
				
			||||||
            petStr = readWholeFile(petnamesFilename)
 | 
					                followingList = []
 | 
				
			||||||
            if petStr:
 | 
					                with open(petnamesFilename, 'r') as petnamesFile:
 | 
				
			||||||
                # extract each petname and append it
 | 
					                    petStr = petnamesFile.read()
 | 
				
			||||||
                petnamesList = petStr.split('\n')
 | 
					                    # extract each petname and append it
 | 
				
			||||||
                for pet in petnamesList:
 | 
					                    petnamesList = petStr.split('\n')
 | 
				
			||||||
                    followingList.append(pet.split(' ')[0])
 | 
					                    for pet in petnamesList:
 | 
				
			||||||
            # add the following.txt entries
 | 
					                        followingList.append(pet.split(' ')[0])
 | 
				
			||||||
            followingList += msg.split('\n')
 | 
					                # add the following.txt entries
 | 
				
			||||||
        else:
 | 
					                followingList += msg.split('\n')
 | 
				
			||||||
            # no petnames list exists - just use following.txt
 | 
					            else:
 | 
				
			||||||
            followingList = msg.split('\n')
 | 
					                # no petnames list exists - just use following.txt
 | 
				
			||||||
        followingList.sort()
 | 
					                followingList = msg.split('\n')
 | 
				
			||||||
        if followingList:
 | 
					            followingList.sort()
 | 
				
			||||||
            for followingAddress in followingList:
 | 
					            if followingList:
 | 
				
			||||||
                if followingAddress:
 | 
					                for followingAddress in followingList:
 | 
				
			||||||
                    listStr += \
 | 
					                    if followingAddress:
 | 
				
			||||||
                        '<option>@' + followingAddress + '</option>\n'
 | 
					                        listStr += \
 | 
				
			||||||
 | 
					                            '<option>@' + followingAddress + '</option>\n'
 | 
				
			||||||
    listStr += '</datalist>\n'
 | 
					    listStr += '</datalist>\n'
 | 
				
			||||||
    return listStr
 | 
					    return listStr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue