__filename__ = "metadata.py" __author__ = "Bob Mottram" __license__ = "AGPL3+" __version__ = "1.1.0" __maintainer__ = "Bob Mottram" __email__ = "bob@freedombone.net" __status__ = "Production" import os from utils import loadJson from utils import noOfAccounts from utils import noOfActiveAccountsMonthly def metaDataNodeInfo(baseDir: str, registration: bool, version: str) -> {}: """ /nodeinfo/2.0 endpoint """ activeAccounts = noOfAccounts(baseDir) activeAccountsMonthly = noOfActiveAccountsMonthly(baseDir, 1) activeAccountsHalfYear = noOfActiveAccountsMonthly(baseDir, 6) nodeinfo = { 'openRegistrations': registration, 'protocols': ['activitypub'], 'software': { 'name': 'epicyon', 'version': version }, 'usage': { 'localPosts': 1, 'users': { 'activeHalfyear': activeAccountsHalfYear, 'activeMonth': activeAccountsMonthly, 'total': activeAccounts } }, 'version': '2.0' } return nodeinfo def metaDataInstance(instanceTitle: str, instanceDescriptionShort: str, instanceDescription: str, httpPrefix: str, baseDir: str, adminNickname: str, domain: str, domainFull: str, registration: bool, systemLanguage: str, version: str) -> {}: """ /api/v1/instance endpoint """ adminActorFilename = \ baseDir + '/accounts/' + adminNickname + '@' + domain + '.json' if not os.path.isfile(adminActorFilename): return {} adminActor = loadJson(adminActorFilename, 0) if not adminActor: print('WARN: json load exception metaDataInstance') return {} isBot = False if adminActor['type'] != 'Person': isBot = True url = \ httpPrefix + '://' + domainFull + '/@' + \ adminActor['preferredUsername'] instance = { 'approval_required': False, 'contact_account': { 'acct': adminActor['preferredUsername'], 'avatar': adminActor['icon']['url'], 'avatar_static': adminActor['icon']['url'], 'bot': isBot, 'created_at': '2019-07-01T10:30:00Z', 'display_name': adminActor['name'], 'emojis': [], 'fields': [], 'followers_count': 1, 'following_count': 1, 'header': adminActor['image']['url'], 'header_static': adminActor['image']['url'], 'id': '1', 'last_status_at': '2019-07-01T10:30:00Z', 'locked': adminActor['manuallyApprovesFollowers'], 'note': '

Admin of '+domain+'

', 'statuses_count': 1, 'url': url, 'username': adminActor['preferredUsername'] }, 'description': instanceDescription, 'email': 'admin@'+domain, 'languages': [systemLanguage], 'registrations': registration, 'short_description': instanceDescriptionShort, 'stats': { 'domain_count': 2, 'status_count': 1, 'user_count': noOfAccounts(baseDir) }, 'thumbnail': httpPrefix+'://'+domainFull+'/login.png', 'title': instanceTitle, 'uri': domainFull, 'urls': {}, 'version': version } return instance