merge-requests/30/head
Bob Mottram 2021-07-06 13:50:38 +01:00
parent 5af5f5cd27
commit 466b708300
6 changed files with 86 additions and 90 deletions

View File

@ -338,8 +338,7 @@ def htmlSearch(cssCache: {}, translate: {},
if os.path.isfile(baseDir + '/search.css'): if os.path.isfile(baseDir + '/search.css'):
cssFilename = baseDir + '/search.css' cssFilename = baseDir + '/search.css'
instanceTitle = \ instanceTitle = getConfigParam(baseDir, 'instanceTitle')
getConfigParam(baseDir, 'instanceTitle')
followStr = htmlHeaderWithExternalStyle(cssFilename, instanceTitle) followStr = htmlHeaderWithExternalStyle(cssFilename, instanceTitle)
# show a banner above the search box # show a banner above the search box

View File

@ -24,9 +24,10 @@ def htmlSuspended(cssCache: {}, baseDir: str) -> str:
instanceTitle = \ instanceTitle = \
getConfigParam(baseDir, 'instanceTitle') getConfigParam(baseDir, 'instanceTitle')
suspendedForm = htmlHeaderWithExternalStyle(cssFilename, instanceTitle) suspendedForm = htmlHeaderWithExternalStyle(cssFilename, instanceTitle)
suspendedForm += '<div><center>\n' suspendedForm += \
suspendedForm += ' <p class="screentitle">Account Suspended</p>\n' '<div><center>\n' + \
suspendedForm += ' <p>See <a href="/terms">Terms of Service</a></p>\n' ' <p class="screentitle">Account Suspended</p>\n' + \
suspendedForm += '</center></div>\n' ' <p>See <a href="/terms">Terms of Service</a></p>\n' + \
'</center></div>\n'
suspendedForm += htmlFooter() suspendedForm += htmlFooter()
return suspendedForm return suspendedForm

View File

@ -600,14 +600,15 @@ def htmlTimeline(cssCache: {}, defaultTimeline: str,
iconsAsButtons, accessKeys) iconsAsButtons, accessKeys)
# start the timeline # start the timeline
tlStr += '<table class="timeline">\n' tlStr += \
tlStr += ' <colgroup>\n' '<table class="timeline">\n' + \
tlStr += ' <col span="1" class="column-left">\n' ' <colgroup>\n' + \
tlStr += ' <col span="1" class="column-center">\n' ' <col span="1" class="column-left">\n' + \
tlStr += ' <col span="1" class="column-right">\n' ' <col span="1" class="column-center">\n' + \
tlStr += ' </colgroup>\n' ' <col span="1" class="column-right">\n' + \
tlStr += ' <tbody>\n' ' </colgroup>\n' + \
tlStr += ' <tr>\n' ' <tbody>\n' + \
' <tr>\n'
domainFull = getFullDomain(domain, port) domainFull = getFullDomain(domain, port)

View File

@ -452,17 +452,18 @@ def getRightImageFile(baseDir: str,
def htmlHeaderWithExternalStyle(cssFilename: str, instanceTitle: str, def htmlHeaderWithExternalStyle(cssFilename: str, instanceTitle: str,
lang='en') -> str: lang='en') -> str:
htmlStr = '<!DOCTYPE html>\n'
htmlStr += '<html lang="' + lang + '">\n'
htmlStr += ' <head>\n'
htmlStr += ' <meta charset="utf-8">\n'
cssFile = '/' + cssFilename.split('/')[-1] cssFile = '/' + cssFilename.split('/')[-1]
htmlStr += ' <link rel="stylesheet" href="' + cssFile + '">\n' htmlStr = \
htmlStr += ' <link rel="manifest" href="/manifest.json">\n' '<!DOCTYPE html>\n' + \
htmlStr += ' <meta name="theme-color" content="grey">\n' '<html lang="' + lang + '">\n' + \
htmlStr += ' <title>' + instanceTitle + '</title>\n' ' <head>\n' + \
htmlStr += ' </head>\n' ' <meta charset="utf-8">\n' + \
htmlStr += ' <body>\n' ' <link rel="stylesheet" href="' + cssFile + '">\n' + \
' <link rel="manifest" href="/manifest.json">\n' + \
' <meta name="theme-color" content="grey">\n' + \
' <title>' + instanceTitle + '</title>\n' + \
' </head>\n' + \
' <body>\n'
return htmlStr return htmlStr
@ -511,37 +512,32 @@ def htmlHeaderWithPersonMarkup(cssFilename: str, instanceTitle: str,
sk['occupationalCategory']['codeValue'] sk['occupationalCategory']['codeValue']
categoryUrl = \ categoryUrl = \
'https://www.onetonline.org/link/summary/' + category 'https://www.onetonline.org/link/summary/' + category
skillsMarkup += ' {\n'
skillsMarkup += ' "@type": "Role",\n'
skillsMarkup += ' "hasOccupation": {\n'
skillsMarkup += ' "@type": "Occupation",\n'
skillsMarkup += ' "name": "' + roleName + '",\n'
skillsMarkup += ' "description": ' + \
'"Fediverse instance role",\n'
skillsMarkup += ' "occupationLocation": {\n'
skillsMarkup += \
' "@type": "City",\n'
skillsMarkup += \
' "name": "' + city + '"\n'
skillsMarkup += ' },\n'
skillsMarkup += ' "occupationalCategory": {\n'
skillsMarkup += ' "@type": "CategoryCode",\n'
skillsMarkup += ' "inCodeSet": {\n'
skillsMarkup += \
' "@type": "CategoryCodeSet",\n'
skillsMarkup += ' "name": "O*Net-SOC",\n'
skillsMarkup += ' "dateModified": "2019",\n'
skillsMarkup += \ skillsMarkup += \
' {\n' + \
' "@type": "Role",\n' + \
' "hasOccupation": {\n' + \
' "@type": "Occupation",\n' + \
' "name": "' + roleName + '",\n' + \
' "description": ' + \
'"Fediverse instance role",\n' + \
' "occupationLocation": {\n' + \
' "@type": "City",\n' + \
' "name": "' + city + '"\n' + \
' },\n' + \
' "occupationalCategory": {\n' + \
' "@type": "CategoryCode",\n' + \
' "inCodeSet": {\n' + \
' "@type": "CategoryCodeSet",\n' + \
' "name": "O*Net-SOC",\n' + \
' "dateModified": "2019",\n' + \
' ' + \ ' ' + \
'"url": "https://www.onetonline.org/"\n' '"url": "https://www.onetonline.org/"\n' + \
skillsMarkup += ' },\n' ' },\n' + \
skillsMarkup += \ ' "codeValue": "' + category + '",\n' + \
' "codeValue": "' + category + '",\n' ' "url": "' + categoryUrl + '"\n' + \
skillsMarkup += \ ' }\n' + \
' "url": "' + categoryUrl + '"\n' ' }\n' + \
skillsMarkup += ' }\n' ' }'
skillsMarkup += ' }\n'
skillsMarkup += ' }'
elif skillDict['@type'] == 'Occupation': elif skillDict['@type'] == 'Occupation':
if not firstEntry: if not firstEntry:
skillsMarkup += ',\n' skillsMarkup += ',\n'
@ -555,19 +551,18 @@ def htmlHeaderWithPersonMarkup(cssFilename: str, instanceTitle: str,
skillsListStr += ', ' skillsListStr += ', '
skillsListStr += '"' + skillStr + '"' skillsListStr += '"' + skillStr + '"'
skillsListStr += ']' skillsListStr += ']'
skillsMarkup += ' {\n'
skillsMarkup += ' "@type": "Occupation",\n'
skillsMarkup += ' "name": "' + ocName + '",\n'
skillsMarkup += ' "description": ' + \
'"Fediverse instance occupation",\n'
skillsMarkup += ' "occupationLocation": {\n'
skillsMarkup += ' "@type": "City",\n'
skillsMarkup += \ skillsMarkup += \
' "name": "' + city + '"\n' ' {\n' + \
skillsMarkup += ' },\n' ' "@type": "Occupation",\n' + \
skillsMarkup += \ ' "name": "' + ocName + '",\n' + \
' "skills": ' + skillsListStr + '\n' ' "description": ' + \
skillsMarkup += ' }' '"Fediverse instance occupation",\n' + \
' "occupationLocation": {\n' + \
' "@type": "City",\n' + \
' "name": "' + city + '"\n' + \
' },\n' + \
' "skills": ' + skillsListStr + '\n' + \
' }'
firstEntry = False firstEntry = False
skillsMarkup += '\n ],\n' skillsMarkup += '\n ],\n'

View File

@ -63,19 +63,17 @@ def htmlWelcomeFinal(baseDir: str, nickname: str, domain: str,
finalForm = htmlHeaderWithExternalStyle(cssFilename, instanceTitle) finalForm = htmlHeaderWithExternalStyle(cssFilename, instanceTitle)
finalForm += '<div class="container">' + finalText + '</div>\n'
finalForm += \ finalForm += \
'<div class="container">' + finalText + '</div>\n' + \
'<form enctype="multipart/form-data" method="POST" ' + \ '<form enctype="multipart/form-data" method="POST" ' + \
'accept-charset="UTF-8" ' + \ 'accept-charset="UTF-8" ' + \
'action="/users/' + nickname + '/profiledata">\n' 'action="/users/' + nickname + '/profiledata">\n' + \
finalForm += '<div class="container next">\n' '<div class="container next">\n' + \
finalForm += \
' <button type="submit" class="button" ' + \ ' <button type="submit" class="button" ' + \
'name="previewAvatar">' + translate['Go Back'] + '</button>\n' 'name="previewAvatar">' + translate['Go Back'] + '</button>\n' + \
finalForm += \
' <button type="submit" class="button" ' + \ ' <button type="submit" class="button" ' + \
'name="welcomeCompleteButton">' + translate['Next'] + '</button>\n' 'name="welcomeCompleteButton">' + translate['Next'] + '</button>\n' + \
finalForm += '</div>\n' '</div>\n'
finalForm += '</form>\n' finalForm += '</form>\n'
finalForm += htmlFooter() finalForm += htmlFooter()

View File

@ -174,18 +174,19 @@ def webfingerNodeInfo(httpPrefix: str, domainFull: str) -> {}:
def webfingerMeta(httpPrefix: str, domainFull: str) -> str: def webfingerMeta(httpPrefix: str, domainFull: str) -> str:
"""Return /.well-known/host-meta """Return /.well-known/host-meta
""" """
metaStr = "<?xml version=1.0' encoding=UTF-8'?>" metaStr = \
metaStr += "<XRD xmlns=http://docs.oasis-open.org/ns/xri/xrd-1.0'" "<?xml version=1.0' encoding=UTF-8'?>" + \
metaStr += " xmlns:hm=http://host-meta.net/xrd/1.0'>" "<XRD xmlns=http://docs.oasis-open.org/ns/xri/xrd-1.0'" + \
metaStr += "" " xmlns:hm=http://host-meta.net/xrd/1.0'>" + \
metaStr += "<hm:Host>" + domainFull + "</hm:Host>" "" + \
metaStr += "" "<hm:Host>" + domainFull + "</hm:Host>" + \
metaStr += "<Link rel=lrdd" "" + \
metaStr += " template=" + httpPrefix + "://" + domainFull + \ "<Link rel=lrdd" + \
"/describe?uri={uri}'>" " template=" + httpPrefix + "://" + domainFull + \
metaStr += " <Title>Resource Descriptor</Title>" "/describe?uri={uri}'>" + \
metaStr += " </Link>" " <Title>Resource Descriptor</Title>" + \
metaStr += "</XRD>" " </Link>" + \
"</XRD>"
return metaStr return metaStr
@ -271,11 +272,12 @@ def _webfingerUpdateFromProfile(wfJson: {}, actorJson: {}) -> bool:
if not propertyValue.get('name'): if not propertyValue.get('name'):
continue continue
propertyName = propertyValue['name'].lower() propertyName = propertyValue['name'].lower()
if not (propertyName.startswith('ssb') or found = False
propertyName.startswith('xmpp') or for name, alias in webfingerPropertyName:
propertyName.startswith('matrix') or if name == propertyName:
propertyName.startswith('email') or found = True
propertyName.startswith('tox')): break
if not found:
continue continue
if not propertyValue.get('type'): if not propertyValue.get('type'):
continue continue