Make the display of account and version info within nodeinfo metadata opt-in

main
Bob Mottram 2021-05-03 11:05:05 +01:00
parent 4cd6710ca9
commit fc6e85b6ca
4 changed files with 70 additions and 10 deletions

View File

@ -971,9 +971,15 @@ class PubServer(BaseHTTPRequestHandler):
return False
if self.server.debug:
print('DEBUG: nodeinfo ' + self.path)
nodeInfoVersion = self.server.projectVersion
if not self.server.showNodeInfoVersion:
nodeInfoVersion = '0.0.0'
info = metaDataNodeInfo(self.server.baseDir,
self.server.registration,
self.server.projectVersion)
nodeInfoVersion,
self.server.showNodeInfoAccounts)
if info:
msg = json.dumps(info).encode('utf-8')
msglen = len(msg)
@ -14743,7 +14749,9 @@ def loadTokens(baseDir: str, tokensDict: {}, tokensLookup: {}) -> None:
break
def runDaemon(brochMode: bool,
def runDaemon(showNodeInfoAccounts: bool,
showNodeInfoVersion: bool,
brochMode: bool,
verifyAllSignatures: bool,
sendThreadsTimeoutMins: int,
dormantMonths: int,
@ -14812,6 +14820,9 @@ def runDaemon(brochMode: bool,
print('serverAddress: ' + str(serverAddress))
return False
httpd.showNodeInfoAccounts = showNodeInfoAccounts
httpd.showNodeInfoVersion = showNodeInfoVersion
# ASCII/ANSI text banner used in shell browsers, such as Lynx
httpd.textModeBanner = getTextModeBanner(baseDir)

View File

@ -322,6 +322,16 @@ parser.add_argument("--brochMode",
type=str2bool, nargs='?',
const=True, default=False,
help="Enable broch mode")
parser.add_argument("--nodeinfoaccounts",
dest='showNodeInfoAccounts',
type=str2bool, nargs='?',
const=True, default=False,
help="Show numbers of accounts within nodeinfo metadata")
parser.add_argument("--nodeinfoversion",
dest='showNodeInfoVersion',
type=str2bool, nargs='?',
const=True, default=False,
help="Show version number within nodeinfo metadata")
parser.add_argument("--noKeyPress",
dest='noKeyPress',
type=str2bool, nargs='?',
@ -2600,6 +2610,16 @@ brochMode = \
if brochMode is not None:
args.brochMode = bool(brochMode)
showNodeInfoAccounts = \
getConfigParam(baseDir, 'showNodeInfoAccounts')
if showNodeInfoAccounts is not None:
args.showNodeInfoAccounts = bool(showNodeInfoAccounts)
showNodeInfoVersion = \
getConfigParam(baseDir, 'showNodeInfoVersion')
if showNodeInfoVersion is not None:
args.showNodeInfoVersion = bool(showNodeInfoVersion)
YTDomain = getConfigParam(baseDir, 'youtubedomain')
if YTDomain:
if '://' in YTDomain:
@ -2614,7 +2634,9 @@ if setTheme(baseDir, themeName, domain,
print('Theme set to ' + themeName)
if __name__ == "__main__":
runDaemon(args.brochMode,
runDaemon(args.showNodeInfoAccounts,
args.showNodeInfoVersion,
args.brochMode,
args.verifyAllSignatures,
args.sendThreadsTimeoutMins,
args.dormantMonths,

View File

@ -12,12 +12,27 @@ from utils import noOfAccounts
from utils import noOfActiveAccountsMonthly
def metaDataNodeInfo(baseDir: str, registration: bool, version: str) -> {}:
def metaDataNodeInfo(baseDir: str, registration: bool, version: str,
showAccounts: bool) -> {}:
""" /nodeinfo/2.0 endpoint
Also see https://socialhub.activitypub.rocks/t/
fep-f1d5-nodeinfo-in-fediverse-software/1190/4
Note that there are security considerations with this. If an adversary
sees a lot of accounts and "local" posts then the instance may be
considered a higher priority target.
Also exposure of the version number and number of accounts could be
sensitive
"""
activeAccounts = noOfAccounts(baseDir)
activeAccountsMonthly = noOfActiveAccountsMonthly(baseDir, 1)
activeAccountsHalfYear = noOfActiveAccountsMonthly(baseDir, 6)
if showAccounts:
activeAccounts = noOfAccounts(baseDir)
activeAccountsMonthly = noOfActiveAccountsMonthly(baseDir, 1)
activeAccountsHalfYear = noOfActiveAccountsMonthly(baseDir, 6)
else:
activeAccounts = 1
activeAccountsMonthly = 1
activeAccountsHalfYear = 1
nodeinfo = {
'openRegistrations': registration,
'protocols': ['activitypub'],

View File

@ -504,8 +504,12 @@ def createServerAlice(path: str, domain: str, port: int,
maxFollowers = 10
verifyAllSignatures = True
brochMode = False
showNodeInfoAccounts = True
showNodeInfoVersion = True
print('Server running: Alice')
runDaemon(brochMode,
runDaemon(showNodeInfoAccounts,
showNodeInfoVersion,
brochMode,
verifyAllSignatures,
sendThreadsTimeoutMins,
dormantMonths, maxNewswirePosts,
@ -601,8 +605,12 @@ def createServerBob(path: str, domain: str, port: int,
maxFollowers = 10
verifyAllSignatures = True
brochMode = False
showNodeInfoAccounts = True
showNodeInfoVersion = True
print('Server running: Bob')
runDaemon(brochMode,
runDaemon(showNodeInfoAccounts,
showNodeInfoVersion,
brochMode,
verifyAllSignatures,
sendThreadsTimeoutMins,
dormantMonths, maxNewswirePosts,
@ -652,8 +660,12 @@ def createServerEve(path: str, domain: str, port: int, federationList: [],
maxFollowers = 10
verifyAllSignatures = True
brochMode = False
showNodeInfoAccounts = True
showNodeInfoVersion = True
print('Server running: Eve')
runDaemon(brochMode,
runDaemon(showNodeInfoAccounts,
showNodeInfoVersion,
brochMode,
verifyAllSignatures,
sendThreadsTimeoutMins,
dormantMonths, maxNewswirePosts,