mirror of https://gitlab.com/bashrc2/epicyon
Merge branch 'main' of ssh://code.freedombone.net:2222/bashrc/epicyon
commit
dc107eb554
89
daemon.py
89
daemon.py
|
|
@ -208,6 +208,8 @@ from shares import addShare
|
||||||
from shares import removeShare
|
from shares import removeShare
|
||||||
from shares import expireShares
|
from shares import expireShares
|
||||||
from categories import setHashtagCategory
|
from categories import setHashtagCategory
|
||||||
|
from utils import getImageExtensionFromMimeType
|
||||||
|
from utils import getImageMimeType
|
||||||
from utils import hasObjectDict
|
from utils import hasObjectDict
|
||||||
from utils import userAgentDomain
|
from utils import userAgentDomain
|
||||||
from utils import isLocalNetworkAddress
|
from utils import isLocalNetworkAddress
|
||||||
|
|
@ -733,10 +735,6 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.send_header('Host', callingDomain)
|
self.send_header('Host', callingDomain)
|
||||||
self.send_header('InstanceID', self.server.instanceId)
|
self.send_header('InstanceID', self.server.instanceId)
|
||||||
self.send_header('Content-Length', '0')
|
self.send_header('Content-Length', '0')
|
||||||
# self.send_header('X-Robots-Tag',
|
|
||||||
# 'noindex, nofollow, noarchive, nosnippet')
|
|
||||||
# self.send_header('Cache-Control', 'public')
|
|
||||||
# self.send_header('Referrer-Policy', 'origin')
|
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
|
|
||||||
def _httpReturnCode(self, httpCode: int, httpDescription: str,
|
def _httpReturnCode(self, httpCode: int, httpDescription: str,
|
||||||
|
|
@ -756,10 +754,6 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self.send_header('Content-Type', 'text/html; charset=utf-8')
|
self.send_header('Content-Type', 'text/html; charset=utf-8')
|
||||||
msgLenStr = str(len(msg))
|
msgLenStr = str(len(msg))
|
||||||
self.send_header('Content-Length', msgLenStr)
|
self.send_header('Content-Length', msgLenStr)
|
||||||
# self.send_header('X-Robots-Tag',
|
|
||||||
# 'noindex, nofollow, noarchive, nosnippet')
|
|
||||||
# self.send_header('Cache-Control', 'public')
|
|
||||||
# self.send_header('Referrer-Policy', 'origin')
|
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
if not self._write(msg):
|
if not self._write(msg):
|
||||||
print('Error when showing ' + str(httpCode))
|
print('Error when showing ' + str(httpCode))
|
||||||
|
|
@ -3242,17 +3236,9 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
return
|
return
|
||||||
|
|
||||||
mediaFilenameBase = accountsDir + '/upload'
|
mediaFilenameBase = accountsDir + '/upload'
|
||||||
mediaFilename = mediaFilenameBase + '.png'
|
mediaFilename = \
|
||||||
if self.headers['Content-type'].endswith('jpeg'):
|
mediaFilenameBase + '.' + \
|
||||||
mediaFilename = mediaFilenameBase + '.jpg'
|
getImageExtensionFromMimeType(self.headers['Content-type'])
|
||||||
if self.headers['Content-type'].endswith('gif'):
|
|
||||||
mediaFilename = mediaFilenameBase + '.gif'
|
|
||||||
if self.headers['Content-type'].endswith('svg+xml'):
|
|
||||||
mediaFilename = mediaFilenameBase + '.svg'
|
|
||||||
if self.headers['Content-type'].endswith('webp'):
|
|
||||||
mediaFilename = mediaFilenameBase + '.webp'
|
|
||||||
if self.headers['Content-type'].endswith('avif'):
|
|
||||||
mediaFilename = mediaFilenameBase + '.avif'
|
|
||||||
with open(mediaFilename, 'wb') as avFile:
|
with open(mediaFilename, 'wb') as avFile:
|
||||||
avFile.write(mediaBytes)
|
avFile.write(mediaBytes)
|
||||||
if debug:
|
if debug:
|
||||||
|
|
@ -6011,23 +5997,11 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self._304()
|
self._304()
|
||||||
return
|
return
|
||||||
|
|
||||||
mediaImageType = 'png'
|
mediaImageType = getImageMimeType(emojiFilename)
|
||||||
if emojiFilename.endswith('.png'):
|
|
||||||
mediaImageType = 'png'
|
|
||||||
elif emojiFilename.endswith('.jpg'):
|
|
||||||
mediaImageType = 'jpeg'
|
|
||||||
elif emojiFilename.endswith('.webp'):
|
|
||||||
mediaImageType = 'webp'
|
|
||||||
elif emojiFilename.endswith('.avif'):
|
|
||||||
mediaImageType = 'avif'
|
|
||||||
elif emojiFilename.endswith('.svg'):
|
|
||||||
mediaImageType = 'svg+xml'
|
|
||||||
else:
|
|
||||||
mediaImageType = 'gif'
|
|
||||||
with open(emojiFilename, 'rb') as avFile:
|
with open(emojiFilename, 'rb') as avFile:
|
||||||
mediaBinary = avFile.read()
|
mediaBinary = avFile.read()
|
||||||
self._set_headers_etag(emojiFilename,
|
self._set_headers_etag(emojiFilename,
|
||||||
'image/' + mediaImageType,
|
mediaImageType,
|
||||||
mediaBinary, None,
|
mediaBinary, None,
|
||||||
self.server.domainFull)
|
self.server.domainFull)
|
||||||
self._write(mediaBinary)
|
self._write(mediaBinary)
|
||||||
|
|
@ -6090,11 +6064,7 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
GETstartTime, GETtimings: {}) -> None:
|
GETstartTime, GETtimings: {}) -> None:
|
||||||
"""Shows a help screen image
|
"""Shows a help screen image
|
||||||
"""
|
"""
|
||||||
if not path.endswith('.jpg') and \
|
if not isImageFile(path):
|
||||||
not path.endswith('.png') and \
|
|
||||||
not path.endswith('.webp') and \
|
|
||||||
not path.endswith('.avif') and \
|
|
||||||
not path.endswith('.gif'):
|
|
||||||
return
|
return
|
||||||
mediaStr = path.split('/helpimages/')[1]
|
mediaStr = path.split('/helpimages/')[1]
|
||||||
if '/' not in mediaStr:
|
if '/' not in mediaStr:
|
||||||
|
|
@ -10070,23 +10040,11 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
self._304()
|
self._304()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
mediaFileType = 'png'
|
mediaFileType = getImageMimeType(mediaFilename)
|
||||||
if mediaFilename.endswith('.png'):
|
|
||||||
mediaFileType = 'png'
|
|
||||||
elif mediaFilename.endswith('.jpg'):
|
|
||||||
mediaFileType = 'jpeg'
|
|
||||||
elif mediaFilename.endswith('.webp'):
|
|
||||||
mediaFileType = 'webp'
|
|
||||||
elif mediaFilename.endswith('.avif'):
|
|
||||||
mediaFileType = 'avif'
|
|
||||||
elif mediaFilename.endswith('.svg'):
|
|
||||||
mediaFileType = 'svg+xml'
|
|
||||||
else:
|
|
||||||
mediaFileType = 'gif'
|
|
||||||
with open(mediaFilename, 'rb') as avFile:
|
with open(mediaFilename, 'rb') as avFile:
|
||||||
mediaBinary = avFile.read()
|
mediaBinary = avFile.read()
|
||||||
self._set_headers_etag(mediaFilename,
|
self._set_headers_etag(mediaFilename,
|
||||||
'image/' + mediaFileType,
|
mediaFileType,
|
||||||
mediaBinary, None,
|
mediaBinary, None,
|
||||||
self.server.domainFull)
|
self.server.domainFull)
|
||||||
self._write(mediaBinary)
|
self._write(mediaBinary)
|
||||||
|
|
@ -10139,23 +10097,11 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
# The file has not changed
|
# The file has not changed
|
||||||
self._304()
|
self._304()
|
||||||
return True
|
return True
|
||||||
mediaImageType = 'png'
|
mediaImageType = getImageMimeType(avatarFile)
|
||||||
if avatarFile.endswith('.png'):
|
|
||||||
mediaImageType = 'png'
|
|
||||||
elif avatarFile.endswith('.jpg'):
|
|
||||||
mediaImageType = 'jpeg'
|
|
||||||
elif avatarFile.endswith('.gif'):
|
|
||||||
mediaImageType = 'gif'
|
|
||||||
elif avatarFile.endswith('.avif'):
|
|
||||||
mediaImageType = 'avif'
|
|
||||||
elif avatarFile.endswith('.svg'):
|
|
||||||
mediaImageType = 'svg+xml'
|
|
||||||
else:
|
|
||||||
mediaImageType = 'webp'
|
|
||||||
with open(avatarFilename, 'rb') as avFile:
|
with open(avatarFilename, 'rb') as avFile:
|
||||||
mediaBinary = avFile.read()
|
mediaBinary = avFile.read()
|
||||||
self._set_headers_etag(avatarFilename,
|
self._set_headers_etag(avatarFilename,
|
||||||
'image/' + mediaImageType,
|
mediaImageType,
|
||||||
mediaBinary, None,
|
mediaBinary, None,
|
||||||
self.server.domainFull)
|
self.server.domainFull)
|
||||||
self._write(mediaBinary)
|
self._write(mediaBinary)
|
||||||
|
|
@ -11397,14 +11343,9 @@ class PubServer(BaseHTTPRequestHandler):
|
||||||
'show screenshot done')
|
'show screenshot done')
|
||||||
|
|
||||||
# image on login screen or qrcode
|
# image on login screen or qrcode
|
||||||
if self.path == '/login.png' or \
|
if (isImageFile(self.path) and
|
||||||
self.path == '/login.gif' or \
|
(self.path.startswith('/login.') or
|
||||||
self.path == '/login.svg' or \
|
self.path.startswith('/qrcode.png'))):
|
||||||
self.path == '/login.webp' or \
|
|
||||||
self.path == '/login.avif' or \
|
|
||||||
self.path == '/login.jpeg' or \
|
|
||||||
self.path == '/login.jpg' or \
|
|
||||||
self.path == '/qrcode.png':
|
|
||||||
iconFilename = \
|
iconFilename = \
|
||||||
self.server.baseDir + '/accounts' + self.path
|
self.server.baseDir + '/accounts' + self.path
|
||||||
if os.path.isfile(iconFilename):
|
if os.path.isfile(iconFilename):
|
||||||
|
|
|
||||||
|
|
@ -692,29 +692,40 @@ def _readLocalBoxPost(session, nickname: str, domain: str,
|
||||||
if hasObjectDict(postJsonObject2):
|
if hasObjectDict(postJsonObject2):
|
||||||
if postJsonObject2['object'].get('attributedTo') and \
|
if postJsonObject2['object'].get('attributedTo') and \
|
||||||
postJsonObject2['object'].get('content'):
|
postJsonObject2['object'].get('content'):
|
||||||
actor = postJsonObject2['object']['attributedTo']
|
attributedTo = postJsonObject2['object']['attributedTo']
|
||||||
nameStr += ' ' + translate['announces'] + ' ' + \
|
content = postJsonObject2['object']['content']
|
||||||
getNicknameFromActor(actor)
|
if isinstance(attributedTo, str) and \
|
||||||
sayStr = nameStr
|
isinstance(content, str):
|
||||||
_sayCommand(sayStr, sayStr, screenreader,
|
actor = attributedTo
|
||||||
systemLanguage, espeak)
|
nameStr += ' ' + translate['announces'] + ' ' + \
|
||||||
print('')
|
getNicknameFromActor(actor)
|
||||||
if screenreader:
|
sayStr = nameStr
|
||||||
time.sleep(2)
|
_sayCommand(sayStr, sayStr, screenreader,
|
||||||
content = \
|
systemLanguage, espeak)
|
||||||
_textOnlyContent(postJsonObject2['object']['content'])
|
print('')
|
||||||
content += _getImageDescription(postJsonObject2)
|
if screenreader:
|
||||||
messageStr, detectedLinks = \
|
time.sleep(2)
|
||||||
speakableText(baseDir, content, translate)
|
content = \
|
||||||
sayStr = content
|
_textOnlyContent(content)
|
||||||
_sayCommand(sayStr, messageStr, screenreader,
|
content += _getImageDescription(postJsonObject2)
|
||||||
systemLanguage, espeak)
|
messageStr, detectedLinks = \
|
||||||
return postJsonObject2
|
speakableText(baseDir, content, translate)
|
||||||
|
sayStr = content
|
||||||
|
_sayCommand(sayStr, messageStr, screenreader,
|
||||||
|
systemLanguage, espeak)
|
||||||
|
return postJsonObject2
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
actor = postJsonObject['object']['attributedTo']
|
attributedTo = postJsonObject['object']['attributedTo']
|
||||||
|
if not attributedTo:
|
||||||
|
return {}
|
||||||
|
content = postJsonObject['object']['content']
|
||||||
|
if not isinstance(attributedTo, str) or \
|
||||||
|
not isinstance(content, str):
|
||||||
|
return {}
|
||||||
|
actor = attributedTo
|
||||||
nameStr = getNicknameFromActor(actor)
|
nameStr = getNicknameFromActor(actor)
|
||||||
content = _textOnlyContent(postJsonObject['object']['content'])
|
content = _textOnlyContent(content)
|
||||||
content += _getImageDescription(postJsonObject)
|
content += _getImageDescription(postJsonObject)
|
||||||
|
|
||||||
if isPGPEncrypted(content):
|
if isPGPEncrypted(content):
|
||||||
|
|
|
||||||
34
utils.py
34
utils.py
|
|
@ -238,6 +238,40 @@ def getImageExtensions() -> []:
|
||||||
return ('png', 'jpg', 'jpeg', 'gif', 'webp', 'avif', 'svg')
|
return ('png', 'jpg', 'jpeg', 'gif', 'webp', 'avif', 'svg')
|
||||||
|
|
||||||
|
|
||||||
|
def getImageMimeType(imageFilename: str) -> str:
|
||||||
|
"""Returns the mime type for the given image
|
||||||
|
"""
|
||||||
|
extensionsToMime = {
|
||||||
|
'png': 'png',
|
||||||
|
'jpg': 'jpeg',
|
||||||
|
'gif': 'gif',
|
||||||
|
'avif': 'avif',
|
||||||
|
'svg': 'svg+xml',
|
||||||
|
'webp': 'webp'
|
||||||
|
}
|
||||||
|
for ext, mimeExt in extensionsToMime.items():
|
||||||
|
if imageFilename.endswith('.' + ext):
|
||||||
|
return 'image/' + mimeExt
|
||||||
|
return 'image/png'
|
||||||
|
|
||||||
|
|
||||||
|
def getImageExtensionFromMimeType(contentType: str) -> str:
|
||||||
|
"""Returns the image extension from a mime type, such as image/jpeg
|
||||||
|
"""
|
||||||
|
imageMedia = {
|
||||||
|
'png': 'png',
|
||||||
|
'jpeg': 'jpg',
|
||||||
|
'gif': 'gif',
|
||||||
|
'svg+xml': 'svg',
|
||||||
|
'webp': 'webp',
|
||||||
|
'avif': 'avif'
|
||||||
|
}
|
||||||
|
for mimeExt, ext in imageMedia.items():
|
||||||
|
if contentType.endswith(mimeExt):
|
||||||
|
return ext
|
||||||
|
return 'png'
|
||||||
|
|
||||||
|
|
||||||
def getVideoExtensions() -> []:
|
def getVideoExtensions() -> []:
|
||||||
"""Returns a list of the possible video file extensions
|
"""Returns a list of the possible video file extensions
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue