diff --git a/daemon.py b/daemon.py index 64a27028..dcce78fb 100644 --- a/daemon.py +++ b/daemon.py @@ -792,6 +792,7 @@ class PubServer(BaseHTTPRequestHandler): self.server.domain, self.server.domainFull, self.server.onionDomain, + self.server.i2pDomain, self.server.port, self.server.recentPostsCache, self.server.followersThreads, @@ -7766,7 +7767,7 @@ def runDaemon(blogsInstance: bool, mediaInstance: bool, baseDir, httpPrefix, httpd.sendThreads, httpd.postLog, httpd.cachedWebfingers, httpd.personCache, httpd.inboxQueue, - domain, onionDomain, port, useTor, + domain, onionDomain, i2pDomain, port, useTor, httpd.federationList, httpd.ocapAlways, maxReplies, domainMaxPostsPerDay, accountMaxPostsPerDay, diff --git a/follow.py b/follow.py index 7a349a55..923dee0b 100644 --- a/follow.py +++ b/follow.py @@ -464,11 +464,16 @@ def noOfFollowRequests(baseDir: str, ctr = 0 with open(approveFollowsFilename, "r") as f: lines = f.readlines() - if followType != "onion": + if followType == "onion": + for fileLine in lines: + if '.onion' in fileLine: + ctr += 1 + elif followType == "i2p": + for fileLine in lines: + if '.i2p' in fileLine: + ctr += 1 + else: return len(lines) - for fileLine in lines: - if '.onion' in fileLine: - ctr += 1 return ctr @@ -618,20 +623,27 @@ def receiveFollowRequest(session, baseDir: str, httpPrefix: str, if followApprovalRequired(baseDir, nicknameToFollow, domainToFollow, debug, approveHandle): print('Follow approval is required') - if not domain.endswith('.onion'): - if noOfFollowRequests(baseDir, - nicknameToFollow, domainToFollow, - nickname, domain, fromPort, - '') > 10: - print('Too many follow requests') - return False - else: + if domain.endswith('.onion'): if noOfFollowRequests(baseDir, nicknameToFollow, domainToFollow, nickname, domain, fromPort, 'onion') > 5: print('Too many follow requests from onion addresses') return False + elif domain.endswith('.i2p'): + if noOfFollowRequests(baseDir, + nicknameToFollow, domainToFollow, + nickname, domain, fromPort, + 'i2p') > 5: + print('Too many follow requests from i2p addresses') + return False + else: + if noOfFollowRequests(baseDir, + nicknameToFollow, domainToFollow, + nickname, domain, fromPort, + '') > 10: + print('Too many follow requests') + return False print('Storing follow request for approval') return storeFollowRequest(baseDir, diff --git a/inbox.py b/inbox.py index 6458354e..a61b8e0a 100644 --- a/inbox.py +++ b/inbox.py @@ -1935,7 +1935,8 @@ def inboxAfterCapabilities(recentPostsCache: {}, maxRecentPosts: int, session, keyId: str, handle: str, messageJson: {}, baseDir: str, httpPrefix: str, sendThreads: [], postLog: [], cachedWebfingers: {}, personCache: {}, - queue: [], domain: str, onionDomain: str, + queue: [], domain: str, + onionDomain: str, i2pDomain: str, port: int, useTor: bool, federationList: [], ocapAlways: bool, debug: bool, acceptedCaps: [], @@ -2108,7 +2109,8 @@ def inboxAfterCapabilities(recentPostsCache: {}, maxRecentPosts: int, # send out an update questionJson['type'] = 'Update' sendToFollowersThread(session, baseDir, - nickname, domain, onionDomain, port, + nickname, domain, + onionDomain, i2pDomain, port, httpPrefix, federationList, sendThreads, postLog, cachedWebfingers, personCache, @@ -2285,7 +2287,8 @@ def runInboxQueue(recentPostsCache: {}, maxRecentPosts: int, projectVersion: str, baseDir: str, httpPrefix: str, sendThreads: [], postLog: [], cachedWebfingers: {}, personCache: {}, queue: [], - domain: str, onionDomain: str, port: int, useTor: bool, + domain: str, + onionDomain: str, i2pDomain: str, port: int, useTor: bool, federationList: [], ocapAlways: bool, maxReplies: int, domainMaxPostsPerDay: int, accountMaxPostsPerDay: int, @@ -2698,7 +2701,8 @@ def runInboxQueue(recentPostsCache: {}, maxRecentPosts: int, sendThreads, postLog, cachedWebfingers, personCache, queue, - domain, onionDomain, + domain, + onionDomain, i2pDomain, port, useTor, federationList, ocapAlways, debug, acceptedCaps, @@ -2720,7 +2724,8 @@ def runInboxQueue(recentPostsCache: {}, maxRecentPosts: int, sendThreads, postLog, cachedWebfingers, personCache, queue, - domain, onionDomain, + domain, + onionDomain, i2pDomain, port, useTor, federationList, ocapAlways, debug, acceptedCaps, diff --git a/outbox.py b/outbox.py index 77290617..c998d1a1 100644 --- a/outbox.py +++ b/outbox.py @@ -37,7 +37,8 @@ from shares import outboxUndoShareUpload def postMessageToOutbox(messageJson: {}, postToNickname: str, server, baseDir: str, httpPrefix: str, - domain: str, domainFull: str, onionDomain: str, + domain: str, domainFull: str, + onionDomain: str, i2pDomain: str, port: int, recentPostsCache: {}, followersThreads: [], federationList: [], sendThreads: [], @@ -239,7 +240,7 @@ def postMessageToOutbox(messageJson: {}, postToNickname: str, sendToFollowersThread(server.session, baseDir, postToNickname, - domain, onionDomain, + domain, onionDomain, i2pDomain, port, httpPrefix, federationList, sendThreads, @@ -335,7 +336,7 @@ def postMessageToOutbox(messageJson: {}, postToNickname: str, postToNickname + '@' + domain + ':' + str(port)) sendToNamedAddresses(server.session, baseDir, postToNickname, - domain, onionDomain, port, + domain, onionDomain, i2pDomain, port, httpPrefix, federationList, sendThreads, diff --git a/posts.py b/posts.py index 506c3dca..d0b36ca4 100644 --- a/posts.py +++ b/posts.py @@ -1630,6 +1630,8 @@ def sendSignedJson(postJsonObject: {}, session, baseDir: str, if toDomain.endswith('.onion'): httpPrefix = 'http' + elif toDomain.endswith('.i2p'): + httpPrefix = 'i2p' # sharedInbox = False if toNickname == 'inbox': @@ -1809,7 +1811,8 @@ def addToField(activityType: str, postJsonObject: {}, def sendToNamedAddresses(session, baseDir: str, nickname: str, - domain: str, onionDomain: str, port: int, + domain: str, + onionDomain: str, i2pDomain: str, port: int, httpPrefix: str, federationList: [], sendThreads: [], postLog: [], cachedWebfingers: {}, personCache: {}, @@ -1928,6 +1931,10 @@ def sendToNamedAddresses(session, baseDir: str, if toDomain.endswith('.onion'): fromDomain = onionDomain fromHttpPrefix = 'http' + elif i2pDomain: + if toDomain.endswith('.i2p'): + fromDomain = i2pDomain + fromHttpPrefix = 'i2p' cc = [] sendSignedJson(postJsonObject, session, baseDir, nickname, fromDomain, port, @@ -1952,7 +1959,8 @@ def hasSharedInbox(session, httpPrefix: str, domain: str) -> bool: def sendToFollowers(session, baseDir: str, nickname: str, - domain: str, onionDomain: str, port: int, + domain: str, + onionDomain: str, i2pDomain: str, port: int, httpPrefix: str, federationList: [], sendThreads: [], postLog: [], cachedWebfingers: {}, personCache: {}, @@ -2012,6 +2020,10 @@ def sendToFollowers(session, baseDir: str, if toDomain.endswith('.onion'): fromDomain = onionDomain fromHttpPrefix = 'http' + elif i2pDomain: + if toDomain.endswith('.i2p'): + fromDomain = i2pDomain + fromHttpPrefix = 'i2p' if withSharedInbox: toNickname = followerHandles[index].split('@')[0] @@ -2079,7 +2091,8 @@ def sendToFollowers(session, baseDir: str, def sendToFollowersThread(session, baseDir: str, nickname: str, - domain: str, onionDomain: str, port: int, + domain: str, + onionDomain: str, i2pDomain: str, port: int, httpPrefix: str, federationList: [], sendThreads: [], postLog: [], cachedWebfingers: {}, personCache: {}, @@ -2090,7 +2103,8 @@ def sendToFollowersThread(session, baseDir: str, sendThread = \ threadWithTrace(target=sendToFollowers, args=(session, baseDir, - nickname, domain, onionDomain, port, + nickname, domain, + onionDomain, i2pDomain, port, httpPrefix, federationList, sendThreads, postLog, cachedWebfingers, personCache, diff --git a/schedule.py b/schedule.py index f45d9206..51815b71 100644 --- a/schedule.py +++ b/schedule.py @@ -91,6 +91,7 @@ def updatePostSchedule(baseDir: str, handle: str, httpd, httpd.domain, httpd.domainFull, httpd.onionDomain, + httpd.i2pDomain, httpd.port, httpd.recentPostsCache, httpd.followersThreads,