forked from indymedia/epicyon
109 lines
3.4 KiB
Python
109 lines
3.4 KiB
Python
__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': '<p>Admin of '+domain+'</p>',
|
|
'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
|