__filename__ = "webapp_confirm.py" __author__ = "Bob Mottram" __license__ = "AGPL3+" __version__ = "1.2.0" __maintainer__ = "Bob Mottram" __email__ = "bob@libreserver.org" __status__ = "Production" __module_group__ = "Web Interface" import os from shutil import copyfile from utils import getFullDomain from utils import getNicknameFromActor from utils import getDomainFromActor from utils import locatePost from utils import loadJson from utils import getConfigParam from utils import getAltPath from utils import acctDir from webapp_utils import setCustomBackground from webapp_utils import htmlHeaderWithExternalStyle from webapp_utils import htmlFooter from webapp_post import individualPostAsHtml def htmlConfirmDelete(cssCache: {}, recentPostsCache: {}, maxRecentPosts: int, translate, pageNumber: int, session, base_dir: str, messageId: str, http_prefix: str, projectVersion: str, cachedWebfingers: {}, personCache: {}, callingDomain: str, yt_replace_domain: str, twitterReplacementDomain: str, showPublishedDateOnly: bool, peertubeInstances: [], allowLocalNetworkAccess: bool, themeName: str, systemLanguage: str, maxLikeCount: int, signingPrivateKeyPem: str, CWlists: {}, listsEnabled: str) -> str: """Shows a screen asking to confirm the deletion of a post """ if '/statuses/' not in messageId: return None actor = messageId.split('/statuses/')[0] nickname = getNicknameFromActor(actor) domain, port = getDomainFromActor(actor) domainFull = getFullDomain(domain, port) postFilename = locatePost(base_dir, nickname, domain, messageId) if not postFilename: return None postJsonObject = loadJson(postFilename) if not postJsonObject: return None deletePostStr = None cssFilename = base_dir + '/epicyon-profile.css' if os.path.isfile(base_dir + '/epicyon.css'): cssFilename = base_dir + '/epicyon.css' instanceTitle = \ getConfigParam(base_dir, 'instanceTitle') deletePostStr = \ htmlHeaderWithExternalStyle(cssFilename, instanceTitle, None) deletePostStr += \ individualPostAsHtml(signingPrivateKeyPem, True, recentPostsCache, maxRecentPosts, translate, pageNumber, base_dir, session, cachedWebfingers, personCache, nickname, domain, port, postJsonObject, None, True, False, http_prefix, projectVersion, 'outbox', yt_replace_domain, twitterReplacementDomain, showPublishedDateOnly, peertubeInstances, allowLocalNetworkAccess, themeName, systemLanguage, maxLikeCount, False, False, False, False, False, False, CWlists, listsEnabled) deletePostStr += '
' deletePostStr += \ '

' + \ translate['Delete this post?'] + '

' postActor = getAltPath(actor, domainFull, callingDomain) deletePostStr += \ '
\n' deletePostStr += \ ' \n' deletePostStr += \ ' \n' deletePostStr += \ ' \n' deletePostStr += \ ' \n' deletePostStr += '
\n' deletePostStr += '
\n' deletePostStr += htmlFooter() return deletePostStr def htmlConfirmRemoveSharedItem(cssCache: {}, translate: {}, base_dir: str, actor: str, itemID: str, callingDomain: str, sharesFileType: str) -> str: """Shows a screen asking to confirm the removal of a shared item """ nickname = getNicknameFromActor(actor) domain, port = getDomainFromActor(actor) domainFull = getFullDomain(domain, port) sharesFile = \ acctDir(base_dir, nickname, domain) + '/' + sharesFileType + '.json' if not os.path.isfile(sharesFile): print('ERROR: no ' + sharesFileType + ' file ' + sharesFile) return None sharesJson = loadJson(sharesFile) if not sharesJson: print('ERROR: unable to load ' + sharesFileType + '.json') return None if not sharesJson.get(itemID): print('ERROR: share named "' + itemID + '" is not in ' + sharesFile) return None sharedItemDisplayName = sharesJson[itemID]['displayName'] sharedItemImageUrl = None if sharesJson[itemID].get('imageUrl'): sharedItemImageUrl = sharesJson[itemID]['imageUrl'] setCustomBackground(base_dir, 'shares-background', 'follow-background') cssFilename = base_dir + '/epicyon-follow.css' if os.path.isfile(base_dir + '/follow.css'): cssFilename = base_dir + '/follow.css' instanceTitle = getConfigParam(base_dir, 'instanceTitle') sharesStr = htmlHeaderWithExternalStyle(cssFilename, instanceTitle, None) sharesStr += '
\n' sharesStr += '
\n' sharesStr += '
\n' if sharedItemImageUrl: sharesStr += ' \n' sharesStr += \ '

' + translate['Remove'] + \ ' ' + sharedItemDisplayName + ' ?

\n' postActor = getAltPath(actor, domainFull, callingDomain) if sharesFileType == 'shares': endpoint = 'rmshare' else: endpoint = 'rmwanted' sharesStr += \ '
\n' sharesStr += \ ' \n' sharesStr += ' \n' sharesStr += \ ' \n' sharesStr += \ ' \n' sharesStr += '
\n' sharesStr += '
\n' sharesStr += '
\n' sharesStr += '
\n' sharesStr += htmlFooter() return sharesStr def htmlConfirmFollow(cssCache: {}, translate: {}, base_dir: str, originPathStr: str, followActor: str, followProfileUrl: str) -> str: """Asks to confirm a follow """ followDomain, port = getDomainFromActor(followActor) if os.path.isfile(base_dir + '/accounts/follow-background-custom.jpg'): if not os.path.isfile(base_dir + '/accounts/follow-background.jpg'): copyfile(base_dir + '/accounts/follow-background-custom.jpg', base_dir + '/accounts/follow-background.jpg') cssFilename = base_dir + '/epicyon-follow.css' if os.path.isfile(base_dir + '/follow.css'): cssFilename = base_dir + '/follow.css' instanceTitle = getConfigParam(base_dir, 'instanceTitle') followStr = htmlHeaderWithExternalStyle(cssFilename, instanceTitle, None) followStr += '
\n' followStr += '
\n' followStr += '
\n' followStr += ' \n' followStr += ' \n' followStr += \ '

' + translate['Follow'] + ' ' + \ getNicknameFromActor(followActor) + '@' + followDomain + ' ?

\n' followStr += '
\n' followStr += ' \n' followStr += \ ' \n' followStr += \ ' \n' followStr += '
\n' followStr += '
\n' followStr += '
\n' followStr += '
\n' followStr += htmlFooter() return followStr def htmlConfirmUnfollow(cssCache: {}, translate: {}, base_dir: str, originPathStr: str, followActor: str, followProfileUrl: str) -> str: """Asks to confirm unfollowing an actor """ followDomain, port = getDomainFromActor(followActor) if os.path.isfile(base_dir + '/accounts/follow-background-custom.jpg'): if not os.path.isfile(base_dir + '/accounts/follow-background.jpg'): copyfile(base_dir + '/accounts/follow-background-custom.jpg', base_dir + '/accounts/follow-background.jpg') cssFilename = base_dir + '/epicyon-follow.css' if os.path.isfile(base_dir + '/follow.css'): cssFilename = base_dir + '/follow.css' instanceTitle = getConfigParam(base_dir, 'instanceTitle') followStr = htmlHeaderWithExternalStyle(cssFilename, instanceTitle, None) followStr += '
\n' followStr += '
\n' followStr += '
\n' followStr += ' \n' followStr += ' \n' followStr += \ '

' + translate['Stop following'] + \ ' ' + getNicknameFromActor(followActor) + \ '@' + followDomain + ' ?

\n' followStr += '
\n' followStr += ' \n' followStr += \ ' \n' followStr += \ ' \n' followStr += '
\n' followStr += '
\n' followStr += '
\n' followStr += '
\n' followStr += htmlFooter() return followStr def htmlConfirmUnblock(cssCache: {}, translate: {}, base_dir: str, originPathStr: str, blockActor: str, blockProfileUrl: str) -> str: """Asks to confirm unblocking an actor """ blockDomain, port = getDomainFromActor(blockActor) setCustomBackground(base_dir, 'block-background', 'follow-background') cssFilename = base_dir + '/epicyon-follow.css' if os.path.isfile(base_dir + '/follow.css'): cssFilename = base_dir + '/follow.css' instanceTitle = getConfigParam(base_dir, 'instanceTitle') blockStr = htmlHeaderWithExternalStyle(cssFilename, instanceTitle, None) blockStr += '
\n' blockStr += '
\n' blockStr += '
\n' blockStr += ' \n' blockStr += ' \n' blockStr += \ '

' + translate['Stop blocking'] + ' ' + \ getNicknameFromActor(blockActor) + '@' + blockDomain + ' ?

\n' blockStr += '
\n' blockStr += ' \n' blockStr += \ ' \n' blockStr += \ ' \n' blockStr += '
\n' blockStr += '
\n' blockStr += '
\n' blockStr += '
\n' blockStr += htmlFooter() return blockStr