From f392777393c6d4558318677b78aa7a04e7d856d3 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 12 Dec 2020 09:37:01 +0000 Subject: [PATCH 01/24] Slash --- webapp_post.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp_post.py b/webapp_post.py index 87be26f42..d4da8f7a8 100644 --- a/webapp_post.py +++ b/webapp_post.py @@ -206,7 +206,7 @@ def getBrokenLinkSubstitute() -> str: an image is broken """ return " onerror=\"this.onerror=null; this.src='" + \ - "icons/avatar_default.png'\"" + "/icons/avatar_default.png'\"" def getAvatarImageHtml(showAvatarOptions: bool, From 69aa3455c24055bd8bb5f3bb96197173f7de6f5f Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 12 Dec 2020 09:54:42 +0000 Subject: [PATCH 02/24] Check that Url being stored is an actor --- cache.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cache.py b/cache.py index 08d7386c1..2486ff968 100644 --- a/cache.py +++ b/cache.py @@ -18,6 +18,10 @@ def storePersonInCache(baseDir: str, personUrl: str, allowWriteToFile: bool) -> None: """Store an actor in the cache """ + if 'statuses' in personUrl or personUrl.endswith('/actor'): + # This is not an actor or person account + return + currTime = datetime.datetime.utcnow() personCache[personUrl] = { "actor": personJson, From e996141fd8ca24f329001ad3ab56a0edb85d3273 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 12 Dec 2020 10:06:03 +0000 Subject: [PATCH 03/24] Spaces --- inbox.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inbox.py b/inbox.py index b8ed2e0ac..8969bc4b5 100644 --- a/inbox.py +++ b/inbox.py @@ -764,7 +764,7 @@ def personReceiveUpdate(baseDir: str, """Changes an actor. eg: avatar or display name change """ if debug: - print('DEBUG: receiving actor update for '+personJson['url']) + print('DEBUG: receiving actor update for ' + personJson['url']) domainFull = domain if port: if port != 80 and port != 443: From 98fdf7d1f2afe2f68d91de6faec2e7702d1f8e3d Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 12 Dec 2020 10:38:48 +0000 Subject: [PATCH 04/24] Substitute broken avatars on person options screen --- webapp_person_options.py | 3 ++- webapp_post.py | 9 +-------- webapp_utils.py | 8 ++++++++ 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/webapp_person_options.py b/webapp_person_options.py index d6c7c506f..89e142d03 100644 --- a/webapp_person_options.py +++ b/webapp_person_options.py @@ -18,6 +18,7 @@ from follow import isFollowingActor from followingCalendar import receivingCalendarEvents from webapp_utils import htmlHeaderWithExternalStyle from webapp_utils import htmlFooter +from webapp_utils import getBrokenLinkSubstitute def htmlPersonOptions(defaultTimeline: str, @@ -103,7 +104,7 @@ def htmlPersonOptions(defaultTimeline: str, optionsStr += '
\n' optionsStr += ' \n' optionsStr += ' \n' + '" ' + getBrokenLinkSubstitute() + '/>\n' handle = getNicknameFromActor(optionsActor) + '@' + optionsDomain optionsStr += \ '

' + translate['Options for'] + \ diff --git a/webapp_post.py b/webapp_post.py index d4da8f7a8..3b2bf77d2 100644 --- a/webapp_post.py +++ b/webapp_post.py @@ -55,6 +55,7 @@ from webapp_utils import getContentWarningButton from webapp_utils import getPostAttachmentsAsHtml from webapp_utils import htmlHeaderWithExternalStyle from webapp_utils import htmlFooter +from webapp_utils import getBrokenLinkSubstitute from webapp_media import addEmbeddedElements from webapp_question import insertQuestion from devices import E2EEdecryptMessageFromDevice @@ -201,14 +202,6 @@ def getAvatarImageUrl(session, return avatarUrl -def getBrokenLinkSubstitute() -> str: - """Returns html used to show a default image if the link to - an image is broken - """ - return " onerror=\"this.onerror=null; this.src='" + \ - "/icons/avatar_default.png'\"" - - def getAvatarImageHtml(showAvatarOptions: bool, nickname: str, domainFull: str, avatarUrl: str, postActor: str, diff --git a/webapp_utils.py b/webapp_utils.py index b8caff443..9f2c6bf41 100644 --- a/webapp_utils.py +++ b/webapp_utils.py @@ -20,6 +20,14 @@ from content import addHtmlTags from content import replaceEmojiFromTags +def getBrokenLinkSubstitute() -> str: + """Returns html used to show a default image if the link to + an image is broken + """ + return " onerror=\"this.onerror=null; this.src='" + \ + "/icons/avatar_default.png'\"" + + def htmlFollowingList(cssCache: {}, baseDir: str, followingFilename: str) -> str: """Returns a list of handles being followed From eb39892e784ff50fc58139d09fc840ebf86a405b Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 12 Dec 2020 11:25:50 +0000 Subject: [PATCH 05/24] Fewer spaces --- webapp_post.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp_post.py b/webapp_post.py index 3b2bf77d2..e788ac6e4 100644 --- a/webapp_post.py +++ b/webapp_post.py @@ -213,7 +213,7 @@ def getAvatarImageHtml(showAvatarOptions: bool, if '/users/news/' not in avatarUrl: avatarLink = ' ' avatarLink += \ - '  \n' From b7e8ad6e7a302e356db8336aeccc420ff2392c60 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 12 Dec 2020 14:23:14 +0000 Subject: [PATCH 06/24] Tidying --- webapp_utils.py | 50 ++++++++++++++++++++----------------------------- 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/webapp_utils.py b/webapp_utils.py index 9f2c6bf41..71d0ec0d4 100644 --- a/webapp_utils.py +++ b/webapp_utils.py @@ -281,36 +281,26 @@ def updateAvatarImageCache(session, baseDir: str, httpPrefix: str, return None actorStr = actor.replace('/', '-') avatarImagePath = baseDir + '/cache/avatars/' + actorStr - if avatarUrl.endswith('.png') or \ - '.png?' in avatarUrl: - sessionHeaders = { - 'Accept': 'image/png' - } - avatarImageFilename = avatarImagePath + '.png' - elif (avatarUrl.endswith('.jpg') or - avatarUrl.endswith('.jpeg') or - '.jpg?' in avatarUrl or - '.jpeg?' in avatarUrl): - sessionHeaders = { - 'Accept': 'image/jpeg' - } - avatarImageFilename = avatarImagePath + '.jpg' - elif avatarUrl.endswith('.gif') or '.gif?' in avatarUrl: - sessionHeaders = { - 'Accept': 'image/gif' - } - avatarImageFilename = avatarImagePath + '.gif' - elif avatarUrl.endswith('.webp') or '.webp?' in avatarUrl: - sessionHeaders = { - 'Accept': 'image/webp' - } - avatarImageFilename = avatarImagePath + '.webp' - elif avatarUrl.endswith('.avif') or '.avif?' in avatarUrl: - sessionHeaders = { - 'Accept': 'image/avif' - } - avatarImageFilename = avatarImagePath + '.avif' - else: + + # try different image types + imageFormats = { + 'png': 'png', + 'jpg': 'jpeg', + 'jpeg': 'jpeg', + 'gif': 'gif', + 'webp': 'webp', + 'avif': 'avif' + } + avatarImageFilename = None + for imFormat, mimeType in imageFormats.items(): + if avatarUrl.endswith('.' + imFormat) or \ + '.' + imFormat + '?' in avatarUrl: + sessionHeaders = { + 'Accept': 'image/' + mimeType + } + avatarImageFilename = avatarImagePath + '.' + imFormat + + if not avatarImageFilename: return None if (not os.path.isfile(avatarImageFilename) or force) and allowDownloads: From 071604e07f296beb852f0344edfb6858c12dabb3 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 12 Dec 2020 15:06:00 +0000 Subject: [PATCH 07/24] Remove any html from nickname and bio --- daemon.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/daemon.py b/daemon.py index 0003d6fc7..3789becc2 100644 --- a/daemon.py +++ b/daemon.py @@ -171,6 +171,7 @@ from shares import getSharesFeedForPerson from shares import addShare from shares import removeShare from shares import expireShares +from utils import removeHtml from utils import setHashtagCategory from utils import isEditor from utils import getImageExtensions @@ -3760,7 +3761,8 @@ class PubServer(BaseHTTPRequestHandler): # change displayed name if fields.get('displayNickname'): if fields['displayNickname'] != actorJson['name']: - actorJson['name'] = fields['displayNickname'] + actorJson['name'] = \ + removeHtml(fields['displayNickname']) actorChanged = True # change media instance status @@ -4047,13 +4049,14 @@ class PubServer(BaseHTTPRequestHandler): # change user bio if fields.get('bio'): if fields['bio'] != actorJson['summary']: + bioStr = removeHtml(fields['bio']) actorTags = {} actorJson['summary'] = \ addHtmlTags(baseDir, httpPrefix, nickname, domainFull, - fields['bio'], [], actorTags) + bioStr, [], actorTags) if actorTags: actorJson['tag'] = [] for tagName, tag in actorTags.items(): From 70528e5f0922e3681c7efd244578352b50a373f0 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 12 Dec 2020 15:14:17 +0000 Subject: [PATCH 08/24] Remove html from display name --- posts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/posts.py b/posts.py index 359536abe..01d8b9fd6 100644 --- a/posts.py +++ b/posts.py @@ -266,7 +266,7 @@ def getPersonBox(baseDir: str, session, wfRequest: {}, avatarUrl = personJson['icon']['url'] displayName = None if personJson.get('name'): - displayName = personJson['name'] + displayName = removeHtml(personJson['name']) storePersonInCache(baseDir, personUrl, personJson, personCache, True) From d3a7a2abf461e494ff1177910580e207d61af09b Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 12 Dec 2020 15:31:28 +0000 Subject: [PATCH 09/24] Avoid arbitrary html being added to profile fields --- donate.py | 2 ++ jami.py | 2 ++ matrix.py | 2 ++ pgp.py | 4 ++++ ssb.py | 2 ++ tox.py | 2 ++ webapp_utils.py | 3 ++- xmpp.py | 2 ++ 8 files changed, 18 insertions(+), 1 deletion(-) diff --git a/donate.py b/donate.py index db68f9680..ff8d64aab 100644 --- a/donate.py +++ b/donate.py @@ -48,6 +48,8 @@ def setDonationUrl(actorJson: {}, donateUrl: str) -> None: notUrl = True if ' ' in donateUrl: notUrl = True + if '<' in donateUrl: + notUrl = True if not actorJson.get('attachment'): actorJson['attachment'] = [] diff --git a/jami.py b/jami.py index 6cc3fe3ca..5edf13f2a 100644 --- a/jami.py +++ b/jami.py @@ -53,6 +53,8 @@ def setJamiAddress(actorJson: {}, jamiAddress: str) -> None: notJamiAddress = True if ',' in jamiAddress: notJamiAddress = True + if '<' in jamiAddress: + notJamiAddress = True if not actorJson.get('attachment'): actorJson['attachment'] = [] diff --git a/matrix.py b/matrix.py index c09814ed5..4fef875cc 100644 --- a/matrix.py +++ b/matrix.py @@ -63,6 +63,8 @@ def setMatrixAddress(actorJson: {}, matrixAddress: str) -> None: return if '"' in matrixAddress: return + if '<' in matrixAddress: + return if ':' not in matrixAddress: return diff --git a/pgp.py b/pgp.py index f8dad7261..3a25de50b 100644 --- a/pgp.py +++ b/pgp.py @@ -83,6 +83,8 @@ def setEmailAddress(actorJson: {}, emailAddress: str) -> None: notEmailAddress = True if '.' not in emailAddress: notEmailAddress = True + if '<' in emailAddress: + notEmailAddress = True if emailAddress.startswith('@'): notEmailAddress = True @@ -134,6 +136,8 @@ def setPGPpubKey(actorJson: {}, PGPpubKey: str) -> None: else: if '--BEGIN PGP PUBLIC KEY' not in PGPpubKey: removeKey = True + if '<' in PGPpubKey: + removeKey = True if not actorJson.get('attachment'): actorJson['attachment'] = [] diff --git a/ssb.py b/ssb.py index 93f2e4935..74804013f 100644 --- a/ssb.py +++ b/ssb.py @@ -52,6 +52,8 @@ def setSSBAddress(actorJson: {}, ssbAddress: str) -> None: notSSBAddress = True if ',' in ssbAddress: notSSBAddress = True + if '<' in ssbAddress: + notSSBAddress = True if not actorJson.get('attachment'): actorJson['attachment'] = [] diff --git a/tox.py b/tox.py index 1be44754d..2281f4f87 100644 --- a/tox.py +++ b/tox.py @@ -57,6 +57,8 @@ def setToxAddress(actorJson: {}, toxAddress: str) -> None: notToxAddress = True if ',' in toxAddress: notToxAddress = True + if '<' in toxAddress: + notToxAddress = True if not actorJson.get('attachment'): actorJson['attachment'] = [] diff --git a/webapp_utils.py b/webapp_utils.py index 71d0ec0d4..ce54a0f49 100644 --- a/webapp_utils.py +++ b/webapp_utils.py @@ -9,6 +9,7 @@ __status__ = "Production" import os from collections import OrderedDict from session import getJson +from utils import removeHtml from utils import getImageExtensions from utils import getProtocolPrefixes from utils import loadJson @@ -268,7 +269,7 @@ def setActorPropertyUrl(actorJson: {}, propertyName: str, url: str) -> None: def setBlogAddress(actorJson: {}, blogAddress: str) -> None: """Sets an blog address for the given actor """ - setActorPropertyUrl(actorJson, 'Blog', blogAddress) + setActorPropertyUrl(actorJson, 'Blog', removeHtml(blogAddress)) def updateAvatarImageCache(session, baseDir: str, httpPrefix: str, diff --git a/xmpp.py b/xmpp.py index 7972a4ad1..661ae92d2 100644 --- a/xmpp.py +++ b/xmpp.py @@ -43,6 +43,8 @@ def setXmppAddress(actorJson: {}, xmppAddress: str) -> None: notXmppAddress = True if '"' in xmppAddress: notXmppAddress = True + if '<' in xmppAddress: + notXmppAddress = True if not actorJson.get('attachment'): actorJson['attachment'] = [] From 8c3ecf2e94b6a067e6e658d2619844e647715c25 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 12 Dec 2020 15:36:44 +0000 Subject: [PATCH 10/24] Even if other instances include arbitrary html within profile tags it isn't rendered within person options --- webapp_person_options.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/webapp_person_options.py b/webapp_person_options.py index 89e142d03..aa60ed3e1 100644 --- a/webapp_person_options.py +++ b/webapp_person_options.py @@ -11,6 +11,7 @@ from shutil import copyfile from petnames import getPetName from person import isPersonSnoozed from posts import isModerator +from utils import removeHtml from utils import getDomainFromActor from utils import getNicknameFromActor from blocking import isBlocked @@ -113,35 +114,36 @@ def htmlPersonOptions(defaultTimeline: str, optionsStr += \ '

' + translate['Email'] + \ ': ' + emailAddress + '

\n' + emailAddress + '">' + removeHtml(emailAddress) + '

\n' if xmppAddress: optionsStr += \ '

' + translate['XMPP'] + \ - ': ' + \ + ': ' + \ xmppAddress + '

\n' if matrixAddress: optionsStr += \ '

' + translate['Matrix'] + ': ' + \ - matrixAddress + '

\n' + removeHtml(matrixAddress) + '

\n' if ssbAddress: optionsStr += \ - '

SSB: ' + ssbAddress + '

\n' + '

SSB: ' + removeHtml(ssbAddress) + '

\n' if blogAddress: optionsStr += \ - '

Blog: ' + \ - blogAddress + '

\n' + '

Blog: ' + \ + removeHtml(blogAddress) + '

\n' if toxAddress: optionsStr += \ - '

Tox: ' + toxAddress + '

\n' + '

Tox: ' + removeHtml(toxAddress) + '

\n' if jamiAddress: optionsStr += \ - '

Jami: ' + jamiAddress + '

\n' + '

Jami: ' + removeHtml(jamiAddress) + '

\n' if PGPfingerprint: optionsStr += '

PGP: ' + \ - PGPfingerprint.replace('\n', '
') + '

\n' + removeHtml(PGPfingerprint).replace('\n', '
') + '

\n' if PGPpubKey: optionsStr += '

' + \ - PGPpubKey.replace('\n', '
') + '

\n' + removeHtml(PGPpubKey).replace('\n', '
') + '

\n' optionsStr += '
\n' optionsStr += ' Date: Sat, 12 Dec 2020 16:17:20 +0000 Subject: [PATCH 12/24] Update default categories --- defaultcategories/en.xml | 360 +++++++++++++++++++++------------------ 1 file changed, 198 insertions(+), 162 deletions(-) diff --git a/defaultcategories/en.xml b/defaultcategories/en.xml index a17f6af3d..94e8a2ba9 100644 --- a/defaultcategories/en.xml +++ b/defaultcategories/en.xml @@ -4,387 +4,423 @@ #categories gafam - zuckerberg apple youtube facebook amazon amazonring microsoft twitter skype degoogled google dotcoms deleteyoutube fascistbook FuckGoogle degoogle ring gafam fuckoffgoogle deletefacebook bigtech + zuckerberg apple antitrust youtube ffs facebook interoperability amazon amazonring googleplus Facebook advertising adtech microsoft twitter caffeine skype ff youtubedl degoogled youtubers google dotcoms deleteyoutube Instagram fascistbook FuckGoogle degoogle fuschia ungoogled ring affordances gafam inspiring fuckoffgoogle deletefacebook office365 playstore bigtech - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT + + + writing + blog poetry poem journal + + Sat, 12 Dec 2020 16:04:56 UT + + + hardware + plugandplay cyberdeck keyboards screenless modem TrueDelta keyboard cybredeck solarpunk lenovo ibm 3dprinting MechcanicalKeyboards openhardware raspberrypi barcode pinebookpro PinebookPro 3dprint arm thinkpad + + Sat, 12 Dec 2020 16:04:56 UT places - lapaz luanda asunción nouakchott conakry kyiv moscow saipan gibraltar dublin avarua hargeisa delhi niamey chișinău colombo brasília phnompenh mbabane belgrade belmopan pyongyang hannover ulaanbaatar oranjestad gaborone seattle ndjamena singapore kingedwardpoint abidjan nuuk pretoria papeete malé zagreb gitega abudhabi flyingfishcove castries georgetown hagåtña basseterre hamburg kinshasa suva valparaíso athens roseau baku charlotteamalie antananarivo pristina santiago sukhumi berlin funafuti libreville hanoi philipsburg tehran banjul prague andorralavella yerevan portauprince dakar paramaribo tifariti capetown tirana ankara ipswich managua lisbon bishkek amsterdam portonovo santodomingo bangkok bucharest kathmandu aden madrid sanjuan vienna kingston kabul damascus stockholm douglas willemstad thehague panamacity beirut amman newdelhi tórshavn nouméa oslo alofi gustavia paris video cockburntown ottawa stepanakert portofspain honiara asmara nicosia helsinki taipei tegucigalpa tokyo tashkent sarajevo algiers nairobi muscat monaco riyadh lusaka wellington bissau juba mariehamn majuro buenosaires ngerulmud dhaka guatemalacity washington vatican kuwaitcity bern mexicocity bratislava bridgetown tunis manila stanley matautu copenhagen lomé budapest ouagadougou mogadishu freetown victoria brazzaville portmoresby ashgabat kampala elaaiún vilnius bloemfontein sucre london pagopago bradesestate oakland vaduz addis nürnberg naypyidaw khartoum baghdad bandar moroni portvila kingstown reykjavík manama accra windhoek nukualofa tbilisi canberra quito maputo cetinje putrajaya ramallah bogotá dodoma harare havana warsaw valletta ljubljana bamako kualalumpur podgorica rabat cotonou plymouth seoul dushanbe bangui westisland tskhinvali palikir caracas jamestown rome munich sãotomé jakarta daressalaam sansalvador apia essex yaren cairo jerusalem brussels kigali southtarawa beijing minsk montevideo vientiane maseru hamilton doha tripoli portlouis lima adamstown abuja lilongwe nassau lobamba nyc montreal dili riga lesbos monrovia nursultan sanjosé marigot islamabad malabo tallinn sahara thimphu yaoundé praia bujumbura sofia skopje + lapaz luanda asunción nouakchott conakry kyiv moscow saipan gibraltar dublin dannibleibt avarua hargeisa delhi niamey chișinău colombo brasília phnompenh mbabane belgrade belmopan pyongyang hannover ulaanbaatar oranjestad gaborone seattle ndjamena raw singapore kingedwardpoint abidjan nuuk pretoria papeete malé zagreb gitega abudhabi flyingfishcove castries georgetown hagåtña basseterre hamburg kinshasa suva valparaíso athens roseau baku charlotteamalie antananarivo pristina santiago sukhumi berlin funafuti libreville hanoi philipsburg tehran banjul prague andorralavella yerevan portauprince dakar paramaribo tifariti capetown tirana klima ankara ipswich managua lisbon bishkek amsterdam portonovo santodomingo bangkok bucharest kathmandu aden madrid sanjuan vienna kingston oi kabul damascus stockholm douglas willemstad thehague panamacity beirut amman newdelhi tórshavn nouméa oslo alofi gustavia paris video cockburntown ottawa stepanakert portofspain honiara asmara florida nicosia helsinki taipei tegucigalpa tokyo tashkent sarajevo algiers nairobi muscat monaco riyadh lusaka wellington bissau juba mariehamn majuro buenosaires ngerulmud dhaka guatemalacity washington vatican kuwaitcity bern mexicocity bratislava bridgetown delhipolice tunis manila stanley matautu copenhagen lomé budapest ouagadougou mogadishu freetown victoria brazzaville portmoresby ashgabat kampala elaaiún vilnius bloemfontein sucre london marseille pagopago bradesestate oakland vaduz addis nürnberg naypyidaw CassetteNavigation khartoum baghdad bandar moroni portvila kingstown reykjavík manama accra windhoek nukualofa tbilisi canberra quito maputo cetinje putrajaya ramallah bogotá dodoma harare havana warsaw münster valletta ljubljana bamako kualalumpur podgorica rabat cotonou plymouth seoul Portland dushanbe bangui westisland tskhinvali palikir caracas jamestown rome munich ass sãotomé jakarta daressalaam sansalvador apia essex yaren cairo jerusalem brussels kigali southtarawa beijing minsk montevideo vientiane maseru hamilton doha tripoli portlouis lima adamstown abuja lilongwe nassau lobamba nyc montreal dili riga lesbos monrovia nursultan sanjosé marigot islamabad malabo tallinn sahara thimphu yaoundé praia bujumbura sofia skopje - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT + + + politics + TakeOurPowerBack cia wageslavery immigration liberation fascism rojava humanrights leftists Socialism ukpol copwatch freedom abolitionnow anarchism DefundThePolice technews smalltech bjp election generalstrike digitalfreedom mayday hatespeech fascists cyberlaw peerproduction corporations iww commons wageslave RemoveThePolice softwarefreedom neoliberalism socialecology MutualAid capitalism KeirStarmer politics inclusivity nzpol brexit totalitarianism TyskySour Labour SocietalChange facialrecognition propaganda decolonization polizei xp PritiPatel surveillance socialmedia elections ngo prisoners warrants borisjohnson mutuality whitehouse freedomofexpression censorship decolonize decenterwhiteness Biden ChineseAppBan cooperative modi law Capitalism surveillancecapitalism leftist Revolution ukpolitics rentstrike dsa migration mutualaid fascist polizeiproblem uselection ourstreets refugees tech + + Sat, 12 Dec 2020 16:04:56 UT food - vitamind cake margarine dessert salsa caviar cookery food skillet liquor milk bolognese recipe yeast plate waffle biscuit glaze omelette filet pastry wine hamburger juice sourdough nuts gras toast broth batter ketchup seasoning mayo soup pan mayonnaise vegan dish spice bakery cooking yogurt spotify crumble cider butter cobbler steak pizza soda aroma oil flour cream pie cuisine tartar tea marinade mushroom entree bread salad beans syrup cookie curd soysauce pudding beer baking fish foodwaste wheat pot stew chocolate paste wok olive burger candy kitchen coffee bagel taste meat noodle raclette caramel rice eggs grill poutine lard croissant pasta cheese drink muffin foie sauce soy cocoa sandwich mousse chili vinegar + vitamind cake margarine dessert salsa caviar cookery pietons food skillet liquor milk bolognese recipe oilwars foodporn yeast plate waffle biscuit glaze omelette filet pastry wine hamburger juice sourdough nuts gras toast broth batter foodie ketchup pandemic seasoning mayo soup pan mayonnaise vegan dish avocado spice bakery cooking yogurt spotify crumble cider butter cook cobbler steak pizza soda aroma oil flour cream nutella pie cuisine tartar tea marinade mushroom entree bread salad beans syrup cookie curd soysauce pudding beer baking fish foodwaste wheat pot grassroots stew chocolate paste wok recipes olive burger candy kitchen coffee bagel taste meat noodle raclette caramel rice eggs grill poutine lard croissant pasta foods cheese drink muffin foie sauce soy cocoa sandwich mousse chili vinegar - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT + + + farming + johndeere + + Sat, 12 Dec 2020 16:04:56 UT + + + events + award OONIbday live Day thursdaythoughts humanrightsday followfriday wednesdaymotivation showerthoughts anarchymonday holiday week concert festival livestream day InternationalCheetahDay meetup + + Sat, 12 Dec 2020 16:04:56 UT countries - romania burma lithuania solomon chile fiji tajikistan benin paraguay senegal ukraine italy brunei nicaragua guyana zambia iceland morocco netherlands swaziland bosnian suriname elsalvador russia samoa czech belarus hayabusa2 kyrgyzstan uk sanmarino catalonia panama japan venezuela gambia kuwait barbados papua greece switzerland uae nigeria usa angola honduras djibouti laos sierraleone cambodia vietnam seychelles marshall kazakhstan estonia tonga stlucia burundi bangladesh egypt mali congo us jordan grenada israel algeria ghana bosnia russian eritrea bhutan hungary saudi slovenia bahamas australia kiribati togo koreanorth poland malawi capeverde armenia american bahrain mozambique southsudan syria micronesia maldives iran sweden ethiopia cuba liberia canada burkina somalia scotland vaticancity easttimor austria turkey yemen Bolivia denmark madagascar finland philippines ivorycoast haiti ecuador Portugal azerbaijan spain albania afghanistan europe mauritania dominica thailand belize macedonia montenegro qatar mongolia costarica latvia uzbekistan ireland iraq malaysia mexico mauritius oman chad nz georgia zimbabwe france serbia lesotho tunisia argentina cameroon namibia sudan indonesia colombia tuvalu turkmenistan tanzania germany norway comoros guatemala kosovo andorra wales pakistan belgium china antigua koreasouth newzealand rwanda luxembourg libya nauru moldova palau taiwan kenya trinidad eu botswana jamaica vanuatu cyprus malta niger unitedstates myanmar saintvincent guinea nepal peru uganda uruguay india lebanon southafrica croatia europeanunion bolivia chinese dominican srilanka bulgaria slovakia gabon stkitts liechtenstein brazil + romania burma lithuania solomon chile Instanz opensuse fiji tajikistan benin paraguay eeuu senegal ukraine italy brunei nicaragua guyana Pflanzenbestimmung euphoria zambia iceland morocco netherlands swaziland bosnian suriname elsalvador russia samoa european czech belarus hayabusa2 kyrgyzstan uk abuse translation sanmarino catalonia panama japan venezuela gambia freeNukem kuwait barbados papua greece switzerland uae nigeria usa angola honduras djibouti laos sierraleone cambodia ych vietnam dust3d neofeud seychelles marshall kazakhstan estonia tonga stlucia burundi bangladesh egypt mali congo us jordan speedrun grenada israel algeria ghana bosnia russian eritrea bhutan hungary saudi slovenia bahamas australia kiribati togo koreanorth poland malawi capeverde run armenia american bahrain mozambique southsudan syria micronesia maldives iran sweden ethiopia cuba liberia canada burkina somalia scotland vaticancity easttimor austria turkey yemen Bolivia denmark trunk madagascar finland philippines ivorycoast haiti ecuador Portugal azerbaijan spain albania afghanistan europe mauritania dominica thailand belize macedonia illustration montenegro qatar mongolia costarica boatingeurope birdsofkenya coronavirus latvia uzbekistan ireland iraq malaysia mexico mauritius oman chad nz georgia zimbabwe france serbia lesotho oddmuse tunisia argentina cameroon namibia sudan indonesia colombia smallbusiness tuvalu turkmenistan tanzania germany neuhier norway comoros guatemala kosovo andorra wales servus pakistan belgium china antigua koreasouth newzealand rwanda luxembourg libya italyisntreal nauru moldova palau taiwan kenya trinidad eu botswana CuriosidadesVariadas jamaica vanuatu cyprus malta niger unitedstates myanmar FreeNukum saintvincent guinea nepal peru uganda uruguay india lebanon neurodiversity southafrica croatia europeanunion bolivia chinese dominican srilanka bulgaria slovakia speedrunning gabon stkitts liechtenstein brazil - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT cycling bicycle cycling bike Snowbike - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT phones - mobileapp fdroid plasmamobile smartphone pinephone mobile ubuntutouch osmand vodafone postmarketos + mobileapp fdroid plasmamobile android smartphone BriarProject pinephone mobile fairphone ubuntutouch osmand vodafone postmarketos iOS microg mobileKüfA - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT software - app freedombox windows libre nginx Framasoft drm kubernetes jami FuckOffZoom docker freesoftware gimp foss nextcloud wechat ikiwiki outreachy selfhosting lyft nitter opensource diaspora cabal conferencing accessibility owncast emacs gemini email chatapps floss deltachat bittorrent zoom gpl FriendofGNOME obnam cryptpad OwnStream mumble grsync irssi mutt backup apps ffmpeg lemmy OSM win10 jitsi rsync libreoffice dino openoffice + app freedombox windows libre nginx Framasoft drm kubernetes jami FuckOffZoom free docker freesoftware gimp foss nextcloud wechat openscad ikiwiki outreachy lyft nitter opensource diaspora cabal conferencing accessibility devops owncast emacs gemini freiesoftware email chatapps floss plugins deltachat application uifail bittorrent zoom gpl FriendofGNOME usability obnam cryptpad OwnStream mumble grsync irssi mutt design backup apps profanity ffmpeg lemmy OSM win10 jitsi ux rsync libreoffice dino plugin openoffice - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT security - encrypt password cryptography infosec gchq cryptowars UseAMaskUseTor cyberattack security tor vpn openssh openssl crypto opsec nsa protonvpn yubikey nitrokey openpgp gpgtools gpg cybersecurity signal noscript openvpn + encrypt password cryptography infosec gchq IHaveSomethingToHide cryptowars UseAMaskUseTor cyberattack security tor e2e vpn openssh openssl e2ee encryption ssh crypto giftofencryption opsec torsocks nsa protonvpn yubikey nitrokey openpgp castor9 gpgtools gpg cybersecurity signal noscript np trust openvpn datasecurity tracking cloudflare - Sun, 06 Dec 2020 11:33:50 UT - - - politics - mayday cia wageslavery liberation fascism rojava leftists Socialism ukpol freedom abolitionnow anarchism DefundThePolice bjp election generalstrike digitalfreedom hatespeech fascists peerproduction corporations commons wageslave RemoveThePolice softwarefreedom socialecology politics nzpol brexit totalitarianism TyskySour Labour decolonization surveillance elections borisjohnson mutuality whitehouse decolonize decenterwhiteness ChineseAppBan modi surveillancecapitalism leftist Revolution ukpolitics migration mutualaid fascist uselection - - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT conferences - debconf talk fossdem FreedomBoxSummit schmoocon summit minidebconf defcon flossevent conf rC3 conference flossconf C3 + debconf talk fossdem FreedomBoxSummit schmoocon summit confidenceTricks minidebconf emacsconf defcon flossevent conf rC3 conference flossconf apconf C3 config - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT photos nikon photography photo tokyocameraclub photoshop camera picture - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT programming - git forge programming css rustlang typescript adventofcode scripting fedidev sourcecode django tuskydev lisp javascript code elisp html rust clojurescript racket python + programming css ada rustlang ocaml program typescript publiccode adventofcode scripting git fedidev sourcecode django programmer github tuskydev lisp forge javascript code elisp html rust clojurescript racket python - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT activitypub - activitypub pleroma PeerTube fedilab mastotips misskey siskin followers pixelfed monal tusky peertubers feditips fedizens epicyon mastomagic pixeldev fediverse mastodon peertube mobilizon + activitypub pleroma PeerTube fediblock fedilab mastotips friendica misskey siskin followers Pixelfed pixelfed fedidb Fediseminar monal tusky peertubers feditips fedizens Mastodon epicyon mastomagic pixeldev PeertubeMastodonHost fediverse mastodon fedi peertube lab mobilizon - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT news - news + news doubledownnews journalism - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT games - minecraft chess mud game TetrisGore gaming rpg minetest dnd + minecraft chess mud game ttrpg guildwars2 TetrisGore gaming Gamesphere rpg dosgaming DnD minetest guildwars dnd - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT + + + gardening + blockade mastodev deno cabbage onions florespondence DailyFlowers permaculture flowers gardening de federated deathtoamerica + + Sat, 12 Dec 2020 16:04:56 UT + + + cats + dailycatpic DailyCatVid + + Sat, 12 Dec 2020 16:04:56 UT music - punk bandcamp musicians ipod rap mp3 thecure vaporwave dubstep synthwave rave hiphop experimentalmusic dj newwave dorkwave producing NowPlaying nowplaying libremusicproduction MusicAdvent synth music fediversemusic cyberpunkmusic BandcampFriday + punk ourbeats streetpunk bandcamp musicians ipod skinheadmusic rap mp3 thecure vaporwave dubstep synthwave rave nowplaying hiphop experimentalmusic fedimusic dj newwave dorkwave producing NowPlaying libremusicproduction MusicAdvent fedivers synth music metal fediversemusic cyberpunkmusic BandcampFriday - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT retro - A500 atarist commodore teletext 8bit atari floppy retrocomputing C64 80s microcomputing z80 retro amiga bbcmicro microcomputer + A500 atarist commodore teletext floppy 8bit atari floppydisk retrocomputing C64 plan9 80s microcomputing omm z80 8bitdo retro amiga bbcmicro microcomputer - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT indymedia - visionontv indymediaback omn 4opens + visionontv indymediaback indymedia omn tv 4opens - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT questions - askmastodon askfosstodon ask + askmastodon askfedi question haskell askmasto askfediverse ask askfosstodon - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT + + + internet + spam redecentralize wikipedia rtmp decentralization decentralize w3c torrent data sitejs internetarchaeology WordPress router selfhosting icann PeerToPeer dns openstandards oauth protonmail standards yourdataisyourdata SmallWeb xmpp semanticweb ntp socialnetworks videocast jabber decentralized ssb darknet cookies darkweb netcat server browser p2p www ilovewikipedia web twitch domain rss mail browsers decentralizeit openculture cyberspace offthegrid internet internetarchive js openweb socialweb + + Sat, 12 Dec 2020 16:04:56 UT birds RainbowBeeEater bird - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT ethics digitalethics ethics ethical - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT - internet - redecentralize wikipedia rtmp decentralization decentralize w3c torrent data router icann dns openstandards oauth SmallWeb xmpp semanticweb ntp socialnetworks jabber decentralized darknet cookies darkweb server browser p2p www ilovewikipedia web twitch domain browsers decentralizeit openculture cyberspace internet openweb socialweb cloudflare + linux + cli kde Debian11 mobian openwrt distros DebianBullseye wireguard linuxaudio gtk debian trisquel gnome linuxposting ubuntu xubuntu unix fedora centos gentoo usergroup systemd linuxgaming Debian distro destinationlinux qubesos i3wm linux termux btrfs archlinux rhel debianinstaller - Sun, 06 Dec 2020 11:33:50 UT - - - years - Year2020 year - - Sun, 06 Dec 2020 11:33:50 UT - - - month - month january feburary march april may june july august september october november december - - Sun, 06 Dec 2020 11:33:50 UT - - - pets - catofmastodon catbehaviour dogsofmastodon cats kittens pet dog caturday catsofmastodon cute dogs cat catcontent - - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT podcasts - IntergalacticWasabiHour podcast tilderadio + podcasting IntergalacticWasabiHour podcast til tilderadio podcasts smallisbeautiful - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT - events - week day Day live followfriday concert festival livestream InternationalCheetahDay meetup + years + Year2020 year 1yrago 5yrsago - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT - hardware - cyberdeck keyboards modem keyboard cybredeck lenovo arm thinkpad + pets + catofmastodon mastodogs catbehaviour dogsofmastodon gentrification cats kittens pet dog caturday catsofmastodon cute dogs mastocats cat catcontent - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT + + + month + april july march october november august june december september may feburary january month + + Sat, 12 Dec 2020 16:04:56 UT + + + funding + disabledcrowdfund patreon + + Sat, 12 Dec 2020 16:04:56 UT + + + science + womeninstem supercollider graphTheory biology paleontology + + Sat, 12 Dec 2020 16:04:56 UT seasons spring autumn winter summer - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT gender transwomen transcrowdfund female trans women estradiol woman transrights - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT - linux - mobian openwrt distros wireguard linuxaudio gtk debian trisquel ubuntu xubuntu fedora gentoo systemd distro qubesos linux btrfs archlinux + art + artvsartist2020 art krita urbanart adultcolouring collage streetart coverart MastoArt digitalart mandala xkcd mastoart webcomic furryart sticker artvsartist artist meme concretepoetry artwithopensource artix - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT + + + economics + funding crowdfunding micropatronage GitPay + + Sat, 12 Dec 2020 16:04:56 UT fiction - cyberpunk thehobbit fiction + cyberpunk thehobbit fiction cyberpunk2077 - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT audio audioproduction audiofeedback - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT bots bot - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT climate - clouds climate weather + clouds climateemergency climate weather climatecamp - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT books - earthsea ebooks book ebook epub + earthsea ebooks book theLibrary books ebook epub cookbook - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT scifi startrek starwars - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT pandemic - CoronaWarnApp facemasks vaccines vaccine covid Lockdown codid19 COVID19 COVID + CoronaWarnApp facemasks vaccines vaccine covid Lockdown codid19 COVID19 ContactTracing COVID - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT + + + fashion + fashionesta bras fashion patches + + Sat, 12 Dec 2020 16:04:56 UT religion pagan - Sun, 06 Dec 2020 11:33:50 UT - - - science - supercollider paleontology - - Sun, 06 Dec 2020 11:33:50 UT - - - art - art krita adultcolouring collage MastoArt digitalart mandala concretepoetry artwithopensource poetry - - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT nature - trees nature + trees birds nature inaturalist - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT - fashion - bras fashion patches + activism + riseup sflc fsfe ann xr eff openrightsgroup protest fsf BLM conservancy annieleonard - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT techbros hackernews reddit - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT - gardening - florespondence DailyFlowers flowers gardening + crafts + hackerspaces knitting jewelry diy makers quilting quilt 3dmodel - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT moderation fedblock - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT election voted vote - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT #music trance - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT - activism - fsfe xr eff openrightsgroup fsf conservancy + health + medicine meds medical health treatment - Sun, 06 Dec 2020 11:33:50 UT - - - crafts - knitting jewelry makers quilt - - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT radio - vantaradio radio hamradio radiobroadcasting radiobroadcast + radiohost vantaradio radio hamradio radiobroadcasting radioshow radiobroadcast spazradio anonradio - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT education - education tutorial + education tutorial teach - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT + + + legal + weAreAllCrazy redandanarchistskinheads r digitalservicesact + + Sat, 12 Dec 2020 16:04:56 UT + + + employment + hirefedi jobs work hire + + Sat, 12 Dec 2020 16:04:56 UT microcontroller microcontroller arduino - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT + + + astronomy + space jupiter moon saturn milkyway + + Sat, 12 Dec 2020 16:04:56 UT comedy - satire irony + satire irony standup humor humour funny laugh - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT privacy privacymatters dataprivacy privacy - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT + + + sport + Millwall snooker darts billiard football baseball skating hockey athletics skiing diving sailing motorsport sport marathon swim + + Sat, 12 Dec 2020 16:04:56 UT environment - climatechange climatechaos + climate climatechange climatechaos - Sun, 06 Dec 2020 11:33:50 UT - - - #software - flatpak - - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT scotland - highlands + highlands edinburgh glasgow loch - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT microcontrollers esp8266 esp32 - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT - health - meds + help + helpful help - Sun, 06 Dec 2020 11:33:50 UT - - - astronomy - moon milkyway - - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT travel travel taxi - Sun, 06 Dec 2020 11:33:50 UT - - - help - help - - Sun, 06 Dec 2020 11:33:50 UT - - - funding - patreon - - Sun, 06 Dec 2020 11:33:50 UT + Sat, 12 Dec 2020 16:04:56 UT From 704328054e5e81be0d87a13266b0029551608a74 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 12 Dec 2020 17:00:40 +0000 Subject: [PATCH 13/24] Python emoji --- emoji/default_emoji.json | 3 ++- emoji/python.png | Bin 0 -> 7289 bytes 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 emoji/python.png diff --git a/emoji/default_emoji.json b/emoji/default_emoji.json index 9524f45df..ce7cc988f 100644 --- a/emoji/default_emoji.json +++ b/emoji/default_emoji.json @@ -769,5 +769,6 @@ "budgie": "1F424", "canary": "1F424", "linux": "1F427", - "valid": "valid" + "valid": "valid", + "python": "python" } diff --git a/emoji/python.png b/emoji/python.png new file mode 100644 index 0000000000000000000000000000000000000000..4d99b72d3d362f1d7dfddc141ff49a0355b38384 GIT binary patch literal 7289 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 literal 0 HcmV?d00001 From 422faaf671937de2f765cb487de59871e6a58d58 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 12 Dec 2020 17:05:58 +0000 Subject: [PATCH 14/24] Vim emoji --- emoji/default_emoji.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/emoji/default_emoji.json b/emoji/default_emoji.json index ce7cc988f..7b25b1c87 100644 --- a/emoji/default_emoji.json +++ b/emoji/default_emoji.json @@ -770,5 +770,6 @@ "canary": "1F424", "linux": "1F427", "valid": "valid", - "python": "python" + "python": "python", + "vim": "vim" } From 044494cf2697fd49069f533f40b501d1d88cbbd2 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 12 Dec 2020 17:07:44 +0000 Subject: [PATCH 15/24] Emacs emoji --- emoji/default_emoji.json | 3 ++- emoji/emacs.png | Bin 0 -> 11190 bytes 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 emoji/emacs.png diff --git a/emoji/default_emoji.json b/emoji/default_emoji.json index 7b25b1c87..b01a9cce8 100644 --- a/emoji/default_emoji.json +++ b/emoji/default_emoji.json @@ -771,5 +771,6 @@ "linux": "1F427", "valid": "valid", "python": "python", - "vim": "vim" + "vim": "vim", + "emacs": "emacs" } diff --git a/emoji/emacs.png b/emoji/emacs.png new file mode 100644 index 0000000000000000000000000000000000000000..44083ffeb3e663f4dcd714bbae9985e952d3d158 GIT binary patch literal 11190 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 Date: Sat, 12 Dec 2020 17:10:44 +0000 Subject: [PATCH 16/24] Terminal emoji --- emoji/default_emoji.json | 3 ++- emoji/terminal.png | Bin 0 -> 7913 bytes 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 emoji/terminal.png diff --git a/emoji/default_emoji.json b/emoji/default_emoji.json index b01a9cce8..104b0d2d0 100644 --- a/emoji/default_emoji.json +++ b/emoji/default_emoji.json @@ -772,5 +772,6 @@ "valid": "valid", "python": "python", "vim": "vim", - "emacs": "emacs" + "emacs": "emacs", + "terminal": "terminal" } diff --git a/emoji/terminal.png b/emoji/terminal.png new file mode 100644 index 0000000000000000000000000000000000000000..39f18ecac2440baf88a7c58613174cc19cde1520 GIT binary patch literal 7913 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 TQpr3E00000NkvXXu0mjfK%nn) literal 0 HcmV?d00001 From 1e3cac6cca8651602ced5f7b4af15e778b12dc12 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 12 Dec 2020 17:15:01 +0000 Subject: [PATCH 17/24] Vim logo --- emoji/vim.png | Bin 0 -> 13323 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 emoji/vim.png diff --git a/emoji/vim.png b/emoji/vim.png new file mode 100644 index 0000000000000000000000000000000000000000..8376baf6745db73bc52f3840e1137bcd183ecf9b GIT binary patch literal 13323 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 VP#4--N0$Hq002ovPDHLkV1gxN-@E_- literal 0 HcmV?d00001 From a5c2f3465a099251f0fabc3e6b4a1a4c57b4e820 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 12 Dec 2020 17:45:46 +0000 Subject: [PATCH 18/24] Digital pets emoji --- README.md | 2 +- emoji/angryEmote.png | Bin 0 -> 1288 bytes emoji/blankEmoteMid.png | Bin 0 -> 1241 bytes emoji/boredEmote.png | Bin 0 -> 1275 bytes emoji/confusedEmote.png | Bin 0 -> 1272 bytes emoji/default_emoji.json | 14 +++++++++++++- emoji/dohEmote.png | Bin 0 -> 1277 bytes emoji/happyEmote.png | Bin 0 -> 1271 bytes emoji/neutralEmote.png | Bin 0 -> 1265 bytes emoji/sadEmote.png | Bin 0 -> 1275 bytes emoji/talkingEmote.png | Bin 0 -> 1274 bytes emoji/talkingEmote2.png | Bin 0 -> 1266 bytes emoji/veryHappyEmote.png | Bin 0 -> 1286 bytes emoji/worriedEmote.png | Bin 0 -> 1282 bytes 14 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 emoji/angryEmote.png create mode 100644 emoji/blankEmoteMid.png create mode 100644 emoji/boredEmote.png create mode 100644 emoji/confusedEmote.png create mode 100644 emoji/dohEmote.png create mode 100644 emoji/happyEmote.png create mode 100644 emoji/neutralEmote.png create mode 100644 emoji/sadEmote.png create mode 100644 emoji/talkingEmote.png create mode 100644 emoji/talkingEmote2.png create mode 100644 emoji/veryHappyEmote.png create mode 100644 emoji/worriedEmote.png diff --git a/README.md b/README.md index c322b994d..02ea46df0 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Epicyon is a modern [ActivityPub](https://www.w3.org/TR/activitypub) compliant s Matrix room: **#epicyon:matrix.freedombone.net** -Includes emojis designed by [OpenMoji](https://openmoji.org) – the open-source emoji and icon project. License: [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0). Blob Cat Emoji and Meowmoji were made by Nitro Blob Hub, licensed under [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0). +Includes emojis designed by [OpenMoji](https://openmoji.org) – the open-source emoji and icon project. License: [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0). Blob Cat Emoji and Meowmoji were made by Nitro Blob Hub, licensed under [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0). [Digital Pets emoji](https://opengameart.org/content/16x16-emotes-for-rpgs-and-digital-pets) were made by Tomcat94 and licensed under CC0. diff --git a/emoji/angryEmote.png b/emoji/angryEmote.png new file mode 100644 index 0000000000000000000000000000000000000000..b9662f791fd28286efe626b2cd3c636d2a72007d GIT binary patch literal 1288 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 literal 0 HcmV?d00001 diff --git a/emoji/happyEmote.png b/emoji/happyEmote.png new file mode 100644 index 0000000000000000000000000000000000000000..6586cf0fa2c4d2d8103a52939210039fd3799429 GIT binary patch literal 1271 zcmV4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER00009a7bBm000XU000XU0RWnu7ytkOc}YY;R5%gk zlFJGJAqYit80P=Kw~d36A{UjQWo`0xk4BDhcnI_p{L1|-5do8#E#BTlDpSbQR&FFq z!0MuiXd|-(#OFkN3y^ipVgh@SD86(=K{Z7RFh~Z+So}uG`5s_Lm?+%?g!^7Bv5T;< h^JOBRsw=!X_XAc^9tkLsMG61_002ovPDHLkV1lm8SFr#9 literal 0 HcmV?d00001 diff --git a/emoji/neutralEmote.png b/emoji/neutralEmote.png new file mode 100644 index 0000000000000000000000000000000000000000..0fceda6dbe532a3173c62760e2829879d989fd21 GIT binary patch literal 1265 zcmV4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER00009a7bBm000XU000XU0RWnu7ytkOb4f%&R5%gk zlEDhVAPht882kV4_0nO{5`rnhj@w0RnrCEf?c-wFVmoT@AB|00000NkvXXu0mjfn_*hy literal 0 HcmV?d00001 diff --git a/emoji/sadEmote.png b/emoji/sadEmote.png new file mode 100644 index 0000000000000000000000000000000000000000..ccb8b84d7e57e4be21da86142e414b056f98d168 GIT binary patch literal 1275 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 literal 0 HcmV?d00001 diff --git a/emoji/worriedEmote.png b/emoji/worriedEmote.png new file mode 100644 index 0000000000000000000000000000000000000000..11e3191e08b5d057e29ecf696714e5816d5e9781 GIT binary patch literal 1282 zcmV+d1^xPoP)4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER00009a7bBm000XU000XU0RWnu7ytkOgh@m}R5%gk zQb7v9APmzn_W$>KQ6i>fwTiIgcBxI1G_a=h@ykwMT)%1`4%DF3T8VFK&Ry0`u827Z zuTg}7Fd2XtB>@(hOa>GynQzWC+GN0?lJ(6w>(T%OZ02?fe7!xO{cbaP`Wu1S9eA-z s65at#S?w-{*hD0pR3x%gCxSn68eG^U3K|E`BLDyZ07*qoM6N<$f`cJlivR!s literal 0 HcmV?d00001 From dff6fe932a246116ea94056fba104489e54c41ab Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 12 Dec 2020 17:48:55 +0000 Subject: [PATCH 19/24] Comma --- emoji/default_emoji.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emoji/default_emoji.json b/emoji/default_emoji.json index 5a81bfa7c..6346ef953 100644 --- a/emoji/default_emoji.json +++ b/emoji/default_emoji.json @@ -778,7 +778,7 @@ "blankemote": "blankEmoteMid", "boredemote": "boredEmote", "confusedemote": "confusedEmote", - "dohemote": "dohEmote" + "dohemote": "dohEmote", "happyemote": "happyEmote", "neutralemote": "neutralEmote", "sademote": "sadEmote", From 249cc1ab5aebf7de2464a80dd22fae2a56612706 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 12 Dec 2020 20:53:16 +0000 Subject: [PATCH 20/24] reject localhost in markup --- content.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content.py b/content.py index 424fccd3b..539f85969 100644 --- a/content.py +++ b/content.py @@ -163,7 +163,7 @@ def dangerousMarkup(content: str, allowLocalNetworkAccess: bool) -> bool: contentSections = content.split('<') invalidPartials = () if not allowLocalNetworkAccess: - invalidPartials = ('127.0.', '192.168', '10.0.') + invalidPartials = ('localhost', '127.0.', '192.168', '10.0.') invalidStrings = ('script', 'canvas', 'style', 'abbr', 'frame', 'iframe', 'html', 'body', 'hr', 'allow-popups', 'allow-scripts') From 5dfd647f812dee70eb509d64826aee27014d1127 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 12 Dec 2020 20:55:33 +0000 Subject: [PATCH 21/24] Check for localhost links in css --- content.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/content.py b/content.py index 539f85969..e43a575a0 100644 --- a/content.py +++ b/content.py @@ -196,7 +196,8 @@ def dangerousCSS(filename: str, allowLocalNetworkAccess: bool) -> bool: content = fp.read().lower() cssMatches = ('behavior:', ':expression', '?php', '.php', - 'google') + 'google', 'localhost', + '127.0.', '192.168', '10.0.') for match in cssMatches: if match in content: return True From 49091dea9fb86f5e1d2a4d8f64979dd84b5bcd1f Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 12 Dec 2020 20:59:52 +0000 Subject: [PATCH 22/24] Dissallow regular expressions in css --- content.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content.py b/content.py index e43a575a0..7b000563a 100644 --- a/content.py +++ b/content.py @@ -196,7 +196,7 @@ def dangerousCSS(filename: str, allowLocalNetworkAccess: bool) -> bool: content = fp.read().lower() cssMatches = ('behavior:', ':expression', '?php', '.php', - 'google', 'localhost', + 'google', 'regexp', 'localhost', '127.0.', '192.168', '10.0.') for match in cssMatches: if match in content: From 76eb19b311dea0f92dc1ab6fb46eb0aa9ffdb424 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 12 Dec 2020 21:21:06 +0000 Subject: [PATCH 23/24] Check for non-local web links in css --- content.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/content.py b/content.py index 7b000563a..68fea9970 100644 --- a/content.py +++ b/content.py @@ -202,6 +202,20 @@ def dangerousCSS(filename: str, allowLocalNetworkAccess: bool) -> bool: if match in content: return True + # search for non-local web links + if 'url(' in content: + urlList = content.split('url(') + ctr = 0 + for urlStr in urlList: + if ctr > 0: + if ')' in urlStr: + urlStr = urlStr.split(')')[0] + if 'http' in urlStr: + print('ERROR: non-local web link in CSS ' + + filename) + return True + ctr += 1 + # an attacker can include html inside of the css # file as a comment and this may then be run from the html if dangerousMarkup(content, allowLocalNetworkAccess): From 11883701abf3d8f85b34a8e62574b9d15a387752 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 12 Dec 2020 21:42:10 +0000 Subject: [PATCH 24/24] No imports of unchecked css --- content.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content.py b/content.py index 68fea9970..4de6effa4 100644 --- a/content.py +++ b/content.py @@ -197,7 +197,7 @@ def dangerousCSS(filename: str, allowLocalNetworkAccess: bool) -> bool: cssMatches = ('behavior:', ':expression', '?php', '.php', 'google', 'regexp', 'localhost', - '127.0.', '192.168', '10.0.') + '127.0.', '192.168', '10.0.', '@import') for match in cssMatches: if match in content: return True