diff --git a/blog.py b/blog.py
index d9cf7e704..a136d36d0 100644
--- a/blog.py
+++ b/blog.py
@@ -420,7 +420,7 @@ def htmlBlogPost(session, authorized: bool,
postJsonObject: {},
peertubeInstances: [],
systemLanguage: str, personCache: {},
- debug: bool) -> str:
+ debug: bool, contentLicenseUrl: str) -> str:
"""Returns a html blog post
"""
blogStr = ''
@@ -442,7 +442,8 @@ def htmlBlogPost(session, authorized: bool,
blogStr = htmlHeaderWithBlogMarkup(cssFilename, instanceTitle,
httpPrefix, domainFull, nickname,
systemLanguage, published, modified,
- title, snippet, translate, url)
+ title, snippet, translate, url,
+ contentLicenseUrl)
_htmlBlogRemoveCwButton(blogStr, translate)
blogStr += _htmlBlogPostContent(debug, session, authorized, baseDir,
diff --git a/daemon.py b/daemon.py
index bfe08edfa..031790be3 100644
--- a/daemon.py
+++ b/daemon.py
@@ -8758,7 +8758,8 @@ class PubServer(BaseHTTPRequestHandler):
self.server.sharedItemsFederatedDomains,
rolesList,
None, None, self.server.CWlists,
- self.server.listsEnabled)
+ self.server.listsEnabled,
+ self.server.contentLicenseUrl)
msg = msg.encode('utf-8')
msglen = len(msg)
self._set_headers('text/html', msglen,
@@ -8873,7 +8874,8 @@ class PubServer(BaseHTTPRequestHandler):
skills,
None, None,
self.server.CWlists,
- self.server.listsEnabled)
+ self.server.listsEnabled,
+ self.server.contentLicenseUrl)
msg = msg.encode('utf-8')
msglen = len(msg)
self._set_headers('text/html', msglen,
@@ -10866,7 +10868,8 @@ class PubServer(BaseHTTPRequestHandler):
shares,
pageNumber, sharesPerPage,
self.server.CWlists,
- self.server.listsEnabled)
+ self.server.listsEnabled,
+ self.server.contentLicenseUrl)
msg = msg.encode('utf-8')
msglen = len(msg)
self._set_headers('text/html', msglen,
@@ -10958,6 +10961,8 @@ class PubServer(BaseHTTPRequestHandler):
city = getSpoofedCity(self.server.city,
baseDir, nickname, domain)
+ contentLicenseUrl = \
+ self.server.contentLicenseUrl
msg = \
htmlProfile(self.server.signingPrivateKeyPem,
self.server.rssIconAtTop,
@@ -10992,7 +10997,8 @@ class PubServer(BaseHTTPRequestHandler):
pageNumber,
followsPerPage,
self.server.CWlists,
- self.server.listsEnabled).encode('utf-8')
+ self.server.listsEnabled,
+ contentLicenseUrl).encode('utf-8')
msglen = len(msg)
self._set_headers('text/html',
msglen, cookie, callingDomain, False)
@@ -11082,6 +11088,8 @@ class PubServer(BaseHTTPRequestHandler):
city = getSpoofedCity(self.server.city,
baseDir, nickname, domain)
+ contentLicenseUrl = \
+ self.server.contentLicenseUrl
msg = \
htmlProfile(self.server.signingPrivateKeyPem,
self.server.rssIconAtTop,
@@ -11117,7 +11125,8 @@ class PubServer(BaseHTTPRequestHandler):
pageNumber,
followsPerPage,
self.server.CWlists,
- self.server.listsEnabled).encode('utf-8')
+ self.server.listsEnabled,
+ contentLicenseUrl).encode('utf-8')
msglen = len(msg)
self._set_headers('text/html', msglen,
cookie, callingDomain, False)
@@ -11258,7 +11267,8 @@ class PubServer(BaseHTTPRequestHandler):
self.server.sharedItemsFederatedDomains,
None, None, None,
self.server.CWlists,
- self.server.listsEnabled).encode('utf-8')
+ self.server.listsEnabled,
+ self.server.contentLicenseUrl).encode('utf-8')
msglen = len(msg)
self._set_headers('text/html', msglen,
cookie, callingDomain, False)
@@ -13138,7 +13148,8 @@ class PubServer(BaseHTTPRequestHandler):
self.server.peertubeInstances,
self.server.systemLanguage,
self.server.personCache,
- self.server.debug)
+ self.server.debug,
+ self.server.contentLicenseUrl)
if msg is not None:
msg = msg.encode('utf-8')
msglen = len(msg)
@@ -17179,7 +17190,8 @@ def loadTokens(baseDir: str, tokensDict: {}, tokensLookup: {}) -> None:
break
-def runDaemon(listsEnabled: str,
+def runDaemon(contentLicenseUrl: str,
+ listsEnabled: str,
defaultReplyIntervalHours: int,
lowBandwidth: bool,
maxLikeCount: int,
@@ -17267,6 +17279,11 @@ def runDaemon(listsEnabled: str,
# scan the theme directory for any svg files containing scripts
assert not scanThemesForScripts(baseDir)
+ # license for content of the instance
+ if not contentLicenseUrl:
+ contentLicenseUrl = 'https://creativecommons.org/licenses/by/4.0'
+ httpd.contentLicenseUrl = contentLicenseUrl
+
# fitness metrics
fitnessFilename = baseDir + '/accounts/fitness.json'
httpd.fitness = {}
diff --git a/epicyon.py b/epicyon.py
index a0c9e1f64..6cfe1768f 100644
--- a/epicyon.py
+++ b/epicyon.py
@@ -112,6 +112,9 @@ def str2bool(v) -> bool:
parser = argparse.ArgumentParser(description='ActivityPub Server')
+parser.add_argument('--contentLicenseUrl', type=str,
+ default='https://creativecommons.org/licenses/by/4.0',
+ help='Url of the license used for the instance content')
parser.add_argument('--listsEnabled', type=str,
default=None,
help='Names of content warning lists enabled. ' +
@@ -2884,6 +2887,13 @@ minimumvotes = getConfigParam(baseDir, 'minvotes')
if minimumvotes:
args.minimumvotes = int(minimumvotes)
+contentLicenseUrl = ''
+if args.contentLicenseUrl:
+ contentLicenseUrl = args.contentLicenseUrl
+ setConfigParam(baseDir, 'contentLicenseUrl', contentLicenseUrl)
+else:
+ contentLicenseUrl = getConfigParam(baseDir, 'contentLicenseUrl')
+
votingtime = getConfigParam(baseDir, 'votingtime')
if votingtime:
args.votingtime = votingtime
@@ -3078,7 +3088,8 @@ if args.defaultCurrency:
print('Default currency set to ' + args.defaultCurrency)
if __name__ == "__main__":
- runDaemon(listsEnabled,
+ runDaemon(contentLicenseUrl,
+ listsEnabled,
args.defaultReplyIntervalHours,
args.lowBandwidth, args.maxLikeCount,
sharedItemsFederatedDomains,
diff --git a/tests.py b/tests.py
index 876594409..39fe63547 100644
--- a/tests.py
+++ b/tests.py
@@ -818,8 +818,10 @@ def createServerAlice(path: str, domain: str, port: int,
maxLikeCount = 10
defaultReplyIntervalHours = 9999999999
listsEnabled = ''
+ contentLicenseUrl = None
print('Server running: Alice')
- runDaemon(listsEnabled, defaultReplyIntervalHours,
+ runDaemon(contentLicenseUrl,
+ listsEnabled, defaultReplyIntervalHours,
lowBandwidth, maxLikeCount,
sharedItemsFederatedDomains,
userAgentsBlocked,
@@ -957,8 +959,10 @@ def createServerBob(path: str, domain: str, port: int,
maxLikeCount = 10
defaultReplyIntervalHours = 9999999999
listsEnabled = ''
+ contentLicenseUrl = None
print('Server running: Bob')
- runDaemon(listsEnabled, defaultReplyIntervalHours,
+ runDaemon(contentLicenseUrl,
+ listsEnabled, defaultReplyIntervalHours,
lowBandwidth, maxLikeCount,
sharedItemsFederatedDomains,
userAgentsBlocked,
@@ -1025,8 +1029,10 @@ def createServerEve(path: str, domain: str, port: int, federationList: [],
lowBandwidth = True
defaultReplyIntervalHours = 9999999999
listsEnabled = ''
+ contentLicenseUrl = None
print('Server running: Eve')
- runDaemon(listsEnabled, defaultReplyIntervalHours,
+ runDaemon(contentLicenseUrl,
+ listsEnabled, defaultReplyIntervalHours,
lowBandwidth, maxLikeCount,
sharedItemsFederatedDomains,
userAgentsBlocked,
@@ -1095,8 +1101,10 @@ def createServerGroup(path: str, domain: str, port: int,
lowBandwidth = True
defaultReplyIntervalHours = 9999999999
listsEnabled = ''
+ contentLicenseUrl = None
print('Server running: Group')
- runDaemon(listsEnabled, defaultReplyIntervalHours,
+ runDaemon(contentLicenseUrl,
+ listsEnabled, defaultReplyIntervalHours,
lowBandwidth, maxLikeCount,
sharedItemsFederatedDomains,
userAgentsBlocked,
diff --git a/webapp_profile.py b/webapp_profile.py
index 9b7a5e33d..b4f8e0f3e 100644
--- a/webapp_profile.py
+++ b/webapp_profile.py
@@ -542,7 +542,8 @@ def htmlProfile(signingPrivateKeyPem: str,
sharedItemsFederatedDomains: [],
extraJson: {}, pageNumber: int,
maxItemsPerPage: int,
- CWlists: {}, listsEnabled: str) -> str:
+ CWlists: {}, listsEnabled: str,
+ contentLicenseUrl: str) -> str:
"""Show the profile page as html
"""
nickname = profileJson['preferredUsername']
@@ -985,7 +986,8 @@ def htmlProfile(signingPrivateKeyPem: str,
getConfigParam(baseDir, 'instanceTitle')
profileStr = \
htmlHeaderWithPersonMarkup(cssFilename, instanceTitle,
- profileJson, city) + \
+ profileJson, city,
+ contentLicenseUrl) + \
profileStr + htmlFooter()
return profileStr
diff --git a/webapp_utils.py b/webapp_utils.py
index 59c395bc8..0647d899b 100644
--- a/webapp_utils.py
+++ b/webapp_utils.py
@@ -552,6 +552,7 @@ def htmlHeaderWithExternalStyle(cssFilename: str, instanceTitle: str,
def htmlHeaderWithPersonMarkup(cssFilename: str, instanceTitle: str,
actorJson: {}, city: str,
+ contentLicenseUrl: str,
lang='en') -> str:
"""html header which includes person markup
https://schema.org/Person
@@ -665,7 +666,6 @@ def htmlHeaderWithPersonMarkup(cssFilename: str, instanceTitle: str,
' "url": "' + actorJson['id'] + '"\n' + \
' },\n'
- licenseUrl = 'https://creativecommons.org/licenses/by/4.0'
profileMarkup = \
' \n'
@@ -798,7 +798,8 @@ def htmlHeaderWithBlogMarkup(cssFilename: str, instanceTitle: str,
systemLanguage: str,
published: str, modified: str,
title: str, snippet: str,
- translate: {}, url: str) -> str:
+ translate: {}, url: str,
+ contentLicenseUrl: str) -> str:
"""html header which includes blog post markup
https://schema.org/BlogPosting
"""
@@ -807,7 +808,6 @@ def htmlHeaderWithBlogMarkup(cssFilename: str, instanceTitle: str,
# license for content on the site may be different from
# the software license
- contentLicenseUrl = 'https://creativecommons.org/licenses/by/3.0'
blogMarkup = \
'