874 Commits
Author SHA1 Message Date
bashrc bdf8351173 Tidying 2019-11-09 21:34:24 +00:00
bashrc 9ccdebf3b0 Indent 2019-11-09 21:28:25 +00:00
bashrc a1d9d43a1f Separate variable for image position 2019-11-09 21:19:06 +00:00
bashrc dd5fdfa192 Extract image from post 2019-11-09 21:08:48 +00:00
bashrc dcc3683133 Get picture location 2019-11-09 20:55:58 +00:00
bashrc fdaeb506a4 Extract text from binary 2019-11-09 20:48:59 +00:00
bashrc a44de630dc Binary 2019-11-09 20:41:37 +00:00
bashrc 2d864007ca Try to split text from image data 2019-11-09 20:38:28 +00:00
bashrc d941c1ba7f Debug 2019-11-09 20:24:03 +00:00
bashrc 0969ccc29c Debug 2019-11-09 20:03:19 +00:00
bashrc 1bc8914973 Try different decode 2019-11-09 19:43:55 +00:00
bashrc fb49707a72 Utf-8 POST 2019-11-09 18:56:28 +00:00
bashrc 4ae525589d Try decode 2019-11-09 18:34:17 +00:00
bashrc 9e9260f996 Unit test for commentjson 2019-11-09 18:16:15 +00:00
bashrc 8fb6a35fa7 dumps parameter before encoding 2019-11-09 18:15:09 +00:00
bashrc 6743511861 Longer delay 2019-11-09 18:06:54 +00:00
bashrc f49f1e4b1a Extra delay 2019-11-09 18:02:04 +00:00
bashrc 6e4bd2092c Check that json is available 2019-11-09 09:52:09 +00:00
bashrc f796f3f93b Test for non-ascii characters 2019-11-09 09:50:58 +00:00
bashrc 323f9f8717 Organization structures 2019-11-09 09:38:19 +00:00
bashrc 99e738ae65 More debug 2019-11-08 10:27:08 +00:00
bashrc d1b0adbd86 Debug on vote creation 2019-11-08 10:21:26 +00:00
bashrc d258a15283 Debug message when it's really the end 2019-11-07 21:16:40 +00:00
bashrc 4225c40e48 Re-enable shared unbox updates 2019-11-07 21:12:53 +00:00
bashrc 49a1169e67 Longer thread timeout 2019-11-07 21:03:17 +00:00
bashrc dd6916b580 cc to individual recipients 2019-11-07 20:51:29 +00:00
bashrc fc56f3199d Tidying 2019-11-07 20:19:19 +00:00
bashrc 60e8821d13 Don't save upgrade activities 2019-11-07 20:12:43 +00:00
bashrc 9fd8ed4c2e Remove excess threads 2019-11-07 19:59:59 +00:00
bashrc 833d282888 Actor changed when images are posted 2019-11-07 19:46:06 +00:00
bashrc 57d29d49a0 Extra debug 2019-11-07 19:23:56 +00:00
bashrc a3cc8184bb Send profile updates to individual inboxes 2019-11-07 19:04:55 +00:00
bashrc 897e35afb6 Consistent terminology 2019-11-07 19:01:00 +00:00
bashrc f5402bf3da Logout variable 2019-11-07 18:57:50 +00:00
bashrc 7ed4821508 Extra translations 2019-11-07 18:34:20 +00:00
bashrc c8b9349f8c Mention equivalents to existing systems 2019-11-07 17:16:20 +00:00
bashrc 07d809102b root not needed 2019-11-07 17:08:48 +00:00
bashrc 4f1797b046 Followers threads debug 2019-11-07 13:44:00 +00:00
bashrc 1a09fa0823 Getting less sleep 2019-11-07 13:38:17 +00:00
bashrc b167c5bae8 Consistent max threads 2019-11-07 13:35:33 +00:00
bashrc f80fd83998 Indentation 2019-11-07 12:56:00 +00:00
bashrc d17b984bbb Move donation functions to their own module 2019-11-07 12:14:17 +00:00
bashrc 81f187acf2 Donate button size on mobile 2019-11-07 10:22:18 +00:00
bashrc 0b1ff93447 Donate button style 2019-11-07 10:20:15 +00:00
bashrc e91537be7e Donate button style 2019-11-07 10:13:14 +00:00
bashrc 52ee766989 Donation section on profile 2019-11-07 10:11:32 +00:00
bashrc 728c9bfcb6 Different donate link style if logged in 2019-11-07 10:01:05 +00:00
bashrc 0b3809191f Newline 2019-11-07 09:53:07 +00:00
bashrc 915d144528 Donate button on profile 2019-11-07 09:52:00 +00:00
bashrc a66522cd2e Better handling of donation types 2019-11-07 09:37:26 +00:00
bashrc d9f126e2ac More donation types 2019-11-06 23:41:57 +00:00
bashrc 005ff4b106 Donate button 2019-11-06 23:20:00 +00:00
bashrc 78b1ec3eab PropertyValue 2019-11-06 22:59:39 +00:00
bashrc a0d7759567 Donation link within profile 2019-11-06 22:56:55 +00:00
bashrc a1a8f31693 Extra actor parameters 2019-11-06 22:02:08 +00:00
bashrc 201321506f Replace earlier 2019-11-06 18:51:51 +00:00
bashrc 78b3fc3838 Post actor updates without thread 2019-11-06 18:07:00 +00:00
bashrc c15fa6b8c0 Remove debug 2019-11-06 14:56:08 +00:00
bashrc 6572e57d9d List index 2019-11-06 14:54:17 +00:00
bashrc 74a0b0b2c1 Get published time 2019-11-06 14:50:17 +00:00
bashrc a24959fa66 Get posts a second time 2019-11-06 13:49:51 +00:00
bashrc a7872e7c7f File path when archiving 2019-11-06 13:49:27 +00:00
bashrc b2f926eaa3 Archive based on creation date of post files 2019-11-06 13:35:25 +00:00
bashrc 693c64b4f3 Variable name 2019-11-06 11:59:13 +00:00
bashrc 7241d5def8 Check for snooze file 2019-11-06 11:57:43 +00:00
bashrc 5388c6d70a Quote position 2019-11-06 11:55:22 +00:00
bashrc 057251ae6f Snooze button 2019-11-06 11:39:41 +00:00
bashrc 9ff4ee4166 root not needed 2019-11-05 23:57:15 +00:00
bashrc cc080e48a6 Remove unused path 2019-11-05 23:54:35 +00:00
bashrc 667d0262ea Prepend to followers file 2019-11-05 13:13:55 +00:00
bashrc cd98704ce5 basedir 2019-11-05 12:33:37 +00:00
bashrc a193530890 Check for deactivated account 2019-11-05 12:29:53 +00:00
bashrc 39f8847b8d Don't create accounts while deactivated 2019-11-05 12:28:06 +00:00
bashrc 3331fd09fc Bracket 2019-11-05 12:13:41 +00:00
bashrc 122bd2503c Remove deactivated files 2019-11-05 12:12:30 +00:00
bashrc 78324f2f07 Deactivate other directories and files 2019-11-05 12:07:18 +00:00
bashrc f140eee20f Deactivation of accounts from the web interface 2019-11-05 11:52:38 +00:00
bashrc d9ae66ef19 Checkbox margins 2019-11-05 11:01:52 +00:00
bashrc 830452c77c Checkbox for deactivating account 2019-11-05 10:55:21 +00:00
bashrc 8e669659ed Option to activate an account 2019-11-05 10:40:44 +00:00
bashrc 7d9df1445a Option to deactivate account 2019-11-05 10:37:37 +00:00
bashrc 157ec0de71 Remove deactivated accounts 2019-11-05 10:28:46 +00:00
bashrc 4d88fa3ead Functions for activating and deactivating accounts 2019-11-05 10:26:36 +00:00
bashrc 1c42e9a640 Shares screenshot on website 2019-11-05 09:44:54 +00:00
bashrc 14356a685c Note about install directory 2019-11-05 09:40:53 +00:00
bashrc 41f7dc4d51 Check for repeats 2019-11-04 21:11:09 +00:00
bashrc b703a98b8f @ 2019-11-04 21:08:43 +00:00
bashrc e742e3ccbc quote 2019-11-04 21:00:55 +00:00
bashrc 90197046b3 Fixed separator 2019-11-04 20:57:41 +00:00
bashrc 83386fd2a3 Test for = 2019-11-04 20:52:19 +00:00
bashrc 75a867ea23 Test with backslash 2019-11-04 20:51:07 +00:00
bashrc b636d6d287 Extra check 2019-11-04 20:49:19 +00:00
bashrc ba5608c705 No suffix 2019-11-04 20:45:10 +00:00
bashrc ed2e97ab55 Try to remove long words 2019-11-04 20:39:14 +00:00
bashrc e6bd4cf1f4 Indents 2019-11-04 13:34:43 +00:00
bashrc 45a2844855 Tidying 2019-11-04 12:46:51 +00:00
bashrc 409bc2103b Fix sending posts to mentions 2019-11-04 12:09:59 +00:00
bashrc 3e896ee09b Remove inactive follower threads 2019-11-04 11:19:25 +00:00
bashrc 06025845cb Pop twice 2019-11-04 11:06:49 +00:00
bashrc df5d048dee Tidying 2019-11-04 11:01:04 +00:00
bashrc 543f0b4d7d Sending to followers thread 2019-11-04 10:43:19 +00:00
bashrc 0b6c6f16e2 Send to followers with delay 2019-11-04 10:14:59 +00:00
bashrc a9f4247992 Replace the follow request icon
The previous icon had a license which was incompatible
2019-11-03 17:09:19 +00:00
bashrc 6e8770770e Extra copyrights 2019-11-03 16:44:08 +00:00
bashrc d6dfbe17b8 Federation policy 2019-11-03 16:40:00 +00:00
bashrc f482f4edac Update avatar if needed 2019-11-03 16:11:52 +00:00
bashrc ad92d8ee08 Tidying 2019-11-03 15:27:29 +00:00
bashrc 4e84f2c331 Comments 2019-11-03 14:46:30 +00:00
bashrc 586905f8d2 Removing codes 2019-11-03 10:29:01 +00:00
bashrc 1f644e2812 Replace + 2019-11-03 10:20:30 +00:00
bashrc f2d652708e Improve removal of shares 2019-11-03 10:04:28 +00:00
bashrc d9b4a77dad Return to shares timeline 2019-11-03 09:56:35 +00:00
bashrc ba30a051ea Replacing codes 2019-11-03 09:55:14 +00:00
bashrc 655b3f2163 Use item ID as share index 2019-11-03 09:48:01 +00:00
bashrc ee73e5866c Replace codes 2019-11-03 09:39:02 +00:00
bashrc 44b5c569b9 Bracket 2019-11-03 09:36:41 +00:00
bashrc 5d68176495 More debug 2019-11-03 09:36:04 +00:00
bashrc bdeb21b5c5 Users 2019-11-03 09:23:25 +00:00
bashrc a2a90f6bd1 Show contact and remove buttons on shares timeline 2019-11-03 09:19:37 +00:00
bashrc 24bcef6b11 Full domain for actor 2019-11-02 14:53:30 +00:00
bashrc 545dd27974 Include timeline header 2019-11-02 14:39:13 +00:00
bashrc a02294b7ea Wrong variable 2019-11-02 14:37:27 +00:00
bashrc 99f1ac5088 Include actor 2019-11-02 14:36:04 +00:00
bashrc 7ab1a0e540 Don't pass timeline json for shares 2019-11-02 14:34:12 +00:00
bashrc 04432eab77 Show shares timeline 2019-11-02 14:31:39 +00:00
bashrc 3fe2487882 Add shares timeline 2019-11-02 14:19:51 +00:00
bashrc 702ed23d0e Include link in new share notification file 2019-11-02 12:11:59 +00:00
bashrc 6fc3eac50d Each account gets a new share notification 2019-11-02 11:36:56 +00:00
bashrc b877af4ae8 Only write if file does not exist 2019-11-02 11:32:43 +00:00
bashrc d6a17f1209 Shares timeline button 2019-11-02 11:31:25 +00:00
bashrc ca356464b5 Save a file to indicate that a new shared item is available 2019-11-02 11:15:13 +00:00
bashrc eeaf003711 Better handling of duration string 2019-11-02 10:46:56 +00:00
bashrc a5a792762f Duration in days 2019-11-02 10:44:36 +00:00
bashrc 00ba237ab9 Function for valid item ID 2019-11-02 10:24:25 +00:00
bashrc 544c8745ad Replace invalid characters in shared item ID 2019-11-02 10:21:21 +00:00
bashrc 995382608f Don't need the sensitive header 2019-11-02 09:34:42 +00:00
bashrc d8eb0e871d Space instead of empty string 2019-11-01 22:35:33 +00:00
bashrc a505a844a3 Show empty string if avatar is not available 2019-11-01 22:23:34 +00:00
bashrc efc7e6e01b Don't show Avatar as alt text
Better to show nothing
2019-11-01 22:22:02 +00:00
bashrc 7159e2e9d2 Change method name 2019-11-01 21:23:59 +00:00
bashrc 7b8e639511 Receive new posts synchronously 2019-11-01 21:10:59 +00:00
bashrc 6d1e375ccb Initial catalan translations 2019-11-01 18:18:24 +00:00
bashrc ed9606d059 Initial Portuguese translations 2019-11-01 17:16:38 +00:00
bashrc 1f5675df12 Initial Russian translations 2019-11-01 15:03:57 +00:00
bashrc f86934ccc4 Initial Chinese translations 2019-11-01 14:12:40 +00:00
bashrc 4e2b3f41e4 Initial hindi translations 2019-11-01 13:20:29 +00:00
bashrc 53e4e32194 Initial arabic translations 2019-11-01 12:28:24 +00:00
bashrc 3398d2c333 Japanese translations 2019-11-01 11:30:20 +00:00
bashrc fdd8ecc918 Extra replace 2019-11-01 10:27:17 +00:00
bashrc 9412c01223 Extra replace 2019-11-01 10:19:21 +00:00
bashrc 273a8cd358 Replace 's 2019-10-31 22:56:54 +00:00
bashrc 3756fbd96a Avoid actor confusion 2019-10-31 21:17:09 +00:00
bashrc e3df836d3b Tidying 2019-10-31 20:46:37 +00:00
bashrc 6bf78d35c4 Account migration functions 2019-10-31 10:36:35 +00:00
bashrc 324ab9bf2a Don't show shares if unauthorised 2019-10-31 10:04:49 +00:00
bashrc c3468fb84e Store original post actor 2019-10-31 09:59:06 +00:00
bashrc ebea9dd805 Don't use lower case 2019-10-30 21:44:16 +00:00
bashrc 6a8c014cba Blob cat and meowmoji 2019-10-30 14:04:35 +00:00
bashrc 2641398a76 Translations 2019-10-30 13:34:18 +00:00
bashrc f5bd6329db Install instructions 2019-10-30 12:55:28 +00:00
bashrc aad7f4abb7 Clear value 2019-10-30 12:29:16 +00:00
bashrc feda4d1eec Clear login credentials if supported by the browser 2019-10-30 12:22:59 +00:00
bashrc 6f1d5d0cbd Redirect 2019-10-30 11:44:23 +00:00
bashrc 974828ef1f Logout button 2019-10-30 11:41:54 +00:00
bashrc 0465f33857 Logout endpoint 2019-10-30 11:35:40 +00:00
bashrc 12a0943d4b Only show public key in debug 2019-10-29 20:37:55 +00:00
bashrc c1da8ffe8f Reduce use of non-debug pprint 2019-10-29 20:23:49 +00:00
bashrc e585424814 Check for valid handle 2019-10-29 20:15:21 +00:00
bashrc bb954b62c6 No attachment on vote 2019-10-29 15:07:21 +00:00
bashrc 0a3652ae0d questionparams 2019-10-29 14:58:48 +00:00
bashrc bb5951a74d Don't replace emoji within json content 2019-10-29 13:11:10 +00:00
bashrc 14d7e2e2b2 Don't replace emoji within json content 2019-10-29 13:04:38 +00:00
bashrc ded29f2527 Stray variable 2019-10-29 10:53:52 +00:00
bashrc 71af23ff6f Option to only receive DMs from people you follow 2019-10-29 10:49:23 +00:00
bashrc 841367fa76 prepend to follow/followers files 2019-10-26 16:15:38 +01:00
bashrc a65b8bf644 savejson error handling 2019-10-26 14:31:42 +01:00
bashrc e7f377698a Catch all commentjson load errors 2019-10-26 14:01:32 +01:00
bashrc 5f94b413a7 json loading error handling 2019-10-26 13:47:27 +01:00
bashrc cf2be50b48 commentjson exceptions 2019-10-26 13:19:34 +01:00
bashrc c3c26ad2e9 Handle no post result 2019-10-26 13:01:22 +01:00
bashrc a21b7fd958 Handle failure to open image 2019-10-26 12:56:41 +01:00
bashrc 65227e7c59 Don't trunkate web links 2019-10-25 19:27:32 +01:00
bashrc 93008d97b1 Remove token and salt on account suspend 2019-10-25 18:41:59 +01:00
bashrc 5f5bb5290d Return type 2019-10-25 17:50:22 +01:00
bashrc 504a2301c6 Saving and loading tokens 2019-10-25 17:48:53 +01:00
bashrc 5dafb9d201 Remove salts dictionary 2019-10-25 14:18:29 +01:00
bashrc 1cafe0c8dd Tidying 2019-10-25 13:52:07 +01:00
bashrc 0638290ae3 Base directory 2019-10-25 13:46:33 +01:00
bashrc 67f843607d Constant salts 2019-10-25 13:44:40 +01:00
bashrc a98158f2ae Extra emoji 2019-10-25 09:56:42 +01:00
bashrc 02dcbe006a Remove nickname 2019-10-23 23:32:07 +01:00
bashrc 204c9905c4 Authorized default to inbox 2019-10-23 23:27:52 +01:00
bashrc fdb26967b3 Redirect 2019-10-23 23:11:27 +01:00
bashrc a621ee6d0f Clear nickname 2019-10-23 23:02:14 +01:00
bashrc 42bee345bd Set default path to inbox 2019-10-23 22:50:23 +01:00
bashrc 3ec262d01f Store nickname in cookie 2019-10-23 22:47:40 +01:00
bashrc fc1942ba4d Allow retries on 404 2019-10-23 19:45:16 +01:00
bashrc 21ce09e192 Exit from retries of unauthorized 2019-10-23 19:44:03 +01:00
bashrc ef7135cd98 Replace exponential backoff with regular retries 2019-10-23 19:28:04 +01:00
bashrc 0088ae2aac View button on search screen 2019-10-23 16:48:06 +01:00
bashrc 0f643a94ea View button 2019-10-23 16:14:45 +01:00
bashrc 37b2d47b24 Visit button 2019-10-23 16:12:34 +01:00
bashrc 5ba9fa8ca5 Avoid long profile descriptions 2019-10-23 16:09:20 +01:00
bashrc 0150f19cd9 Replace formatting in profile description 2019-10-23 16:06:22 +01:00
bashrc f2a5c16311 Replace formatting 2019-10-23 15:32:48 +01:00
bashrc b048d894b7 Shorten profile description 2019-10-23 15:27:43 +01:00
bashrc f72803ccc3 Show video and audio on media timeline 2019-10-23 14:39:08 +01:00
bashrc 621795db65 Allow video and audio in media timeline 2019-10-23 14:24:09 +01:00
bashrc b0fea9c7f7 Remove full screen image 2019-10-23 14:19:24 +01:00
bashrc 9f20864ad1 Link to image 2019-10-23 14:16:56 +01:00
bashrc 358c4b6b5d Remove formatting from filename 2019-10-23 14:07:05 +01:00
bashrc 222f5b8217 Remove formatting 2019-10-23 14:03:56 +01:00
bashrc 0d51425110 Use width 2019-10-23 14:00:05 +01:00
bashrc ae5c6d7641 Encoding 2019-10-23 13:56:05 +01:00
bashrc 626ee41f6b Include username in path for full screen image 2019-10-23 13:47:06 +01:00
bashrc a1bfc981dd fullscreen 2019-10-23 13:39:42 +01:00
bashrc 2bb5d19904 fullscreen 2019-10-23 13:30:23 +01:00
bashrc a496801a87 Image description 2019-10-23 13:22:20 +01:00
bashrc 9027d68ab7 url format 2019-10-23 13:17:40 +01:00
bashrc e31b227066 Full screen image 2019-10-23 13:11:20 +01:00
bashrc 902d18d3b2 Link to full screen image 2019-10-23 13:07:55 +01:00
bashrc 77633238a6 Fill screen image 2019-10-23 13:04:08 +01:00
bashrc 583c4a239d Variable name 2019-10-23 12:22:42 +01:00
bashrc c59a80f3a7 media timeline avoids cached html 2019-10-23 12:21:02 +01:00
bashrc c3b1e9ef08 Avoid checks for indexed posts 2019-10-23 11:43:20 +01:00
bashrc ce3e372459 Allow some time between thread start and becoming alive 2019-10-23 11:30:11 +01:00
bashrc b023cda55d Avoid condition if already true 2019-10-23 11:23:43 +01:00
bashrc 68c3e03279 Timeout for unstarted threads 2019-10-23 11:21:41 +01:00
bashrc 049da094da Read index line by line 2019-10-22 22:53:15 +01:00
bashrc adcc5dcc1c nickname 2019-10-22 21:46:10 +01:00
bashrc ab7ac29d35 Index for media timeline 2019-10-22 21:30:43 +01:00
bashrc b0d6fd80f5 Index for DM timeline 2019-10-22 21:07:12 +01:00
bashrc cd53ee8dff Create replies index 2019-10-22 21:00:00 +01:00
bashrc 97ea349a69 Mentions included in replies 2019-10-22 20:07:23 +01:00
bashrc a8c177cbd1 Only show the first page if not authorized 2019-10-22 14:53:51 +01:00
bashrc 2fb21da602 Tidying of write function retries 2019-10-22 13:35:51 +01:00
bashrc 077d34ba7a Tidying the loading and saving of json 2019-10-22 12:55:06 +01:00
bashrc baaf4c9e27 Remove trailing youtube params 2019-10-22 09:44:33 +01:00
bashrc 02ea84eadc Lower threshold 2019-10-21 21:19:08 +01:00
bashrc 30774ef7e0 No second try 2019-10-21 17:53:14 +01:00
bashrc 5f31820ec6 Try ld+json post 2019-10-21 17:48:41 +01:00
bashrc 29f369d702 Extra debug 2019-10-21 17:27:45 +01:00
bashrc 79d43fa7b6 Debug 2019-10-21 17:21:16 +01:00
bashrc 07ec81e202 Additional attempt to get actor 2019-10-21 17:20:33 +01:00
bashrc 4bc0d11a7c Get actor for single user instance 2019-10-21 17:15:12 +01:00
bashrc 515305f005 Getting actor for single user instance 2019-10-21 17:03:44 +01:00
bashrc ad16224628 Argument type 2019-10-21 16:55:30 +01:00
bashrc fd626be274 Handle for single user instance 2019-10-21 16:25:13 +01:00
bashrc db621abb6f Following single user instances 2019-10-21 15:12:22 +01:00
bashrc 6da5c21edb Tidying 2019-10-21 13:52:22 +01:00
bashrc 15e2805d69 Tidying 2019-10-21 13:49:16 +01:00
bashrc a29af6581e Receiving follow requests from single user instances 2019-10-21 13:27:47 +01:00
bashrc 63af111081 Receiving follow accept/reject from single user instances 2019-10-21 13:06:13 +01:00
bashrc af85e6ce99 Missing import 2019-10-21 12:02:58 +01:00
bashrc 133c858884 Experimentally allow replies to unidentified accounts. Checks can be done later 2019-10-21 11:51:49 +01:00
bashrc 11073cb1f7 Tidying 2019-10-21 11:33:45 +01:00
bashrc 7a87362723 Better default nickname 2019-10-21 11:15:57 +01:00
bashrc 12cabfab26 Reference to announced id 2019-10-21 11:14:36 +01:00
bashrc 54cac45766 Default nickname for single user instance 2019-10-21 11:07:44 +01:00
bashrc d22faa6f38 Debug 2019-10-21 11:04:05 +01:00
bashrc fac6713185 Try single user instance during search 2019-10-21 10:57:42 +01:00
bashrc 38e954af17 Allow announces without status 2019-10-21 10:48:37 +01:00
bashrc 49b0a2de45 Single user instance when getting actor 2019-10-21 00:01:12 +01:00
bashrc 5dc1f3db0d Check for none 2019-10-20 23:47:01 +01:00
bashrc 6dc0e3afd4 Always allow a few more pages 2019-10-20 15:28:47 +01:00
bashrc 651b077cc2 Showing next page icon 2019-10-20 15:20:15 +01:00
bashrc 4ec7e69437 Minimum number of items 2019-10-20 15:14:21 +01:00
bashrc 9ae3f23383 Set minimum number of index pages to load 2019-10-20 15:11:56 +01:00
bashrc be91c3b79c Warning 2019-10-20 13:50:31 +01:00
bashrc 53fc839cae Add exception handling for index 2019-10-20 13:43:59 +01:00
bashrc 5c67ada3bb Extract status number 2019-10-20 13:09:07 +01:00
bashrc 3bf8cdb36d Increase maximum 2019-10-20 13:05:15 +01:00
bashrc 0b95f9df52 Remove carriage return 2019-10-20 13:01:44 +01:00
bashrc 478b9e7909 Debug 2019-10-20 12:59:47 +01:00
bashrc 3328336639 Use different dictionary 2019-10-20 12:42:46 +01:00
bashrc 7e0ae8d8e1 Use index to construct timeline 2019-10-20 12:40:35 +01:00
bashrc 8f826a1ac5 Tidying 2019-10-20 12:21:09 +01:00
bashrc 079c5003f6 Archive the index file 2019-10-20 12:18:25 +01:00
bashrc 3025922d5c Remove path from index entries 2019-10-20 12:06:12 +01:00
bashrc a318f299ca Write first entry in index 2019-10-20 11:45:12 +01:00
bashrc 6b7120dca7 Add debug 2019-10-20 11:40:09 +01:00
bashrc 0325b044b8 Error message if index isn't updated 2019-10-20 11:35:13 +01:00
bashrc 4beddb1584 Create an index of received posts 2019-10-20 11:25:38 +01:00
bashrc e02fadcef0 Don't use loop 2019-10-20 10:53:25 +01:00
bashrc 71f2b04bfc Exit earlier 2019-10-20 10:51:32 +01:00
bashrc b82a60bf8c Missing parameter 2019-10-20 10:49:26 +01:00
bashrc f3c4baadb1 Only load the following handles once 2019-10-20 10:47:06 +01:00
bashrc ab85b2ea16 Extra parameters 2019-10-20 10:39:07 +01:00
bashrc c86738ef3a Tidying of shared inbox index 2019-10-20 10:36:07 +01:00
bashrc 1aa4559f8b Tidying 2019-10-20 10:22:40 +01:00
bashrc d91efacf4b Extra filename check 2019-10-20 10:14:27 +01:00
bashrc 6031502ace Another page number replacement 2019-10-20 09:56:29 +01:00
bashrc 701828ab29 Remove line 2019-10-20 09:53:20 +01:00
bashrc 4ca3ac28cd Replace page number 2019-10-20 09:52:31 +01:00
bashrc 6955d1f0d8 Square corners on hacker theme 2019-10-19 22:46:47 +01:00
bashrc 0de94b58b9 Curved corners on login screen 2019-10-19 22:45:26 +01:00
bashrc 5c13c4a133 Missing import 2019-10-19 19:22:43 +01:00
bashrc 2ef2141a9a Remove cached html announce when its state changes 2019-10-19 19:21:14 +01:00
bashrc 236aef17ba Fix unit test for like 2019-10-19 19:08:47 +01:00
bashrc 255a32c0dc Remove cached post on like update 2019-10-19 18:50:05 +01:00
bashrc ced51e7647 Another screenshot 2019-10-19 17:19:34 +01:00
bashrc 426873d0a9 New post context 2019-10-19 16:59:49 +01:00
bashrc 7bb41b4414 json object variable 2019-10-19 14:22:53 +01:00
bashrc 222597f190 Add variable 2019-10-19 14:05:35 +01:00
bashrc 3b688be18b Extra debug 2019-10-19 14:02:41 +01:00
bashrc 192236d58e Check that post was saved 2019-10-19 14:00:46 +01:00
bashrc b19ab510bd Extra dummy parameter 2019-10-19 13:40:00 +01:00
bashrc 1fc5750174 Update html post cache as new posts arrive 2019-10-19 13:37:35 +01:00
bashrc 6052729665 Comment 2019-10-19 13:08:18 +01:00
bashrc d6e16c9b5d Tidying 2019-10-19 13:07:12 +01:00
bashrc 6ea5e0cf80 Tidying 2019-10-19 12:53:57 +01:00
bashrc 18942a2aba Change variable name for clarity 2019-10-19 12:42:41 +01:00
bashrc f760bdd5e3 Don't cache if showing individual posts 2019-10-19 11:43:34 +01:00
bashrc b3e205c7c2 Don't save to cache for public only posts 2019-10-19 11:35:45 +01:00
bashrc 966baef1cd Don't use cache for public only posts 2019-10-19 11:34:06 +01:00
bashrc 4d349544ed Reduce maximum posts 2019-10-19 11:23:49 +01:00
bashrc 514630d3b9 Count posts 2019-10-19 11:19:19 +01:00
bashrc 451684fdca Remove cached posts during archive 2019-10-19 11:10:52 +01:00
bashrc 455e0451c1 Remove activity from id 2019-10-19 10:54:45 +01:00
bashrc 6b9069a35f Create posts cache 2019-10-19 10:13:08 +01:00
bashrc ed067498da Back to original posts per page 2019-10-19 09:42:54 +01:00
bashrc 5908a63882 Lazy loading of videos 2019-10-18 20:26:23 +01:00
bashrc 89e74c6083 Lazy loading of images 2019-10-18 20:25:21 +01:00
bashrc 303f7e2572 Report from with blocked posts 2019-10-18 20:12:21 +01:00
bashrc 4ea799f264 Reduce indents 2019-10-18 19:57:34 +01:00
bashrc 124832ec56 Brackets 2019-10-18 18:39:37 +01:00
bashrc a9b281ea1c Tidying 2019-10-18 18:07:45 +01:00
bashrc 175f4e929a Checking for peertube sites 2019-10-18 17:57:33 +01:00
bashrc a26a50a939 Avoid function calls 2019-10-18 13:55:53 +01:00
bashrc 3de5469cf4 Tidying 2019-10-18 13:51:37 +01:00
bashrc 69d43b118f Tidying 2019-10-18 13:46:35 +01:00
bashrc 5a002e7d5e Tidying 2019-10-18 13:24:31 +01:00
bashrc 34140b6ee9 Tidyin 2019-10-18 13:00:14 +01:00
bashrc 9b60370a5a Reduce posts per page 2019-10-18 12:50:25 +01:00
bashrc 224204edff json option 2019-10-18 12:49:44 +01:00
bashrc 130bd12fb5 Tidying 2019-10-18 10:58:57 +01:00
bashrc 4a8d8b34a8 More support for zap style ActivityPub 2019-10-18 10:28:00 +01:00
bashrc eb2ec00e2c Remove flushes 2019-10-18 10:04:51 +01:00
bashrc b79703dbfd Default to jpg cached avatars 2019-10-18 10:00:16 +01:00
bashrc bbb544f373 Missing cw defaults to false 2019-10-17 23:47:40 +01:00
bashrc df22961f26 Handle missing cw flag 2019-10-17 23:45:02 +01:00
bashrc 838e2d1fc3 Handle missing cw flag 2019-10-17 23:42:25 +01:00
bashrc 5494d6afc8 Search using channel 2019-10-17 23:35:56 +01:00
bashrc 92214ef5ed Parsing outbox for hubzilla channel 2019-10-17 23:26:47 +01:00
bashrc 385a0ee31d Another block 2019-10-17 17:00:34 +01:00
bashrc da58015e20 Getting actor if webfinger fails 2019-10-17 16:55:05 +01:00
bashrc dd82f0b7c3 Use actor if webfinger fails 2019-10-17 16:18:43 +01:00
bashrc 2f716975e4 Use actor if webfinger fails 2019-10-17 16:08:25 +01:00
bashrc 9ac770dc50 Show errors 2019-10-17 15:44:59 +01:00
bashrc 13a16bec18 Handle errors returned from webfinger 2019-10-17 15:41:47 +01:00
bashrc 335a35b84e Check for blocked domains 2019-10-17 14:18:21 +01:00
bashrc c0361bd5bf Convert exception to string 2019-10-17 11:26:56 +01:00
bashrc 8b5376f616 Thread for expiring shared items 2019-10-17 10:58:30 +01:00
bashrc f056c811be More debug for commentjson 2019-10-17 10:40:31 +01:00
bashrc 26d81add1e Restore retries 2019-10-16 22:01:28 +01:00
bashrc 6ddf5aa0dc Add cpu quota 2019-10-16 20:47:52 +01:00
bashrc 700ee84320 Dummy argument 2019-10-16 19:24:06 +01:00
bashrc d8c4661741 Add queue to send out posts 2019-10-16 19:19:18 +01:00
bashrc 7c77f16ff7 Start thread on init 2019-10-16 17:03:45 +01:00
bashrc fea921ffec Kill removed threads 2019-10-16 16:17:00 +01:00
bashrc 3b0d441e5b Extra debug 2019-10-16 15:46:29 +01:00
bashrc 45c7896627 More debug 2019-10-16 15:21:01 +01:00
bashrc b4aa34490d Retry on write 2019-10-16 14:45:51 +01:00
bashrc 89bddff1f3 Describe setting theme 2019-10-16 13:22:49 +01:00
bashrc 75a5136566 Remove debug option 2019-10-16 13:16:27 +01:00
bashrc 37f0194d04 Reduce refresh icon size 2019-10-16 12:50:29 +01:00
bashrc f6d603c572 Purple theme arrow style 2019-10-16 12:46:21 +01:00
bashrc 8ed51ffd7f Easier to hit page icon on mobile 2019-10-16 12:35:25 +01:00
bashrc 4326c67b1a Only save a post log in debug mode 2019-10-16 12:27:43 +01:00
bashrc 9b21151523 Add followers to posts if necessary 2019-10-16 11:58:31 +01:00
bashrc 49d252c0d1 Removing dormant threads 2019-10-16 11:08:21 +01:00
bashrc 6ea855feef Follow test without capabilities 2019-10-15 10:31:10 +01:00
bashrc dfa183a69b Missing debug 2019-10-15 10:12:58 +01:00
bashrc 884f897285 More even font size on mobile 2019-10-15 10:03:23 +01:00
bashrc e2667e3d5a Mobile button size 2019-10-15 09:57:45 +01:00
bashrc 46753c3b90 Larger font for mobile 2019-10-15 09:42:47 +01:00
bashrc dac79d53f9 Extra exceptions 2019-10-14 22:38:03 +01:00
bashrc ebed9f5202 Missing returns 2019-10-14 22:29:46 +01:00
bashrc 85415f579f Exception handling in threaded post 2019-10-14 22:05:14 +01:00
bashrc cb0f95c62b Exceptions on threads 2019-10-14 21:32:00 +01:00
bashrc 91073aca1b high visibility theme 2019-10-14 17:37:07 +01:00
bashrc 21bb8ed479 More variables 2019-10-14 17:28:02 +01:00
bashrc 02b65afdb1 High visibility theme 2019-10-14 17:13:31 +01:00
bashrc 884d30308e Screenshot size 2019-10-13 13:32:29 +01:00
bashrc 1f0a869fbe Extra checks when removing inbox queue items 2019-10-13 13:22:27 +01:00
bashrc b2b4d37517 Update screenshot 2019-10-13 13:10:52 +01:00
bashrc 95a9e90794 Describe calendar 2019-10-13 11:00:23 +01:00
bashrc 27ec9a8700 Link back to calendar 2019-10-12 17:21:12 +01:00
bashrc 8dd89e789c Link back from calendar to inbox 2019-10-12 17:18:24 +01:00
bashrc 5979591ad2 Notification file for calendar 2019-10-12 17:05:45 +01:00
bashrc 472f7945e9 Remove sent from calendar notification before using it 2019-10-12 15:46:32 +01:00
bashrc 60655ffefe Missing plus 2019-10-12 15:33:12 +01:00
bashrc 76ba1858ff Highlight calendar when a new event arrives 2019-10-12 15:31:07 +01:00
bashrc 714f34609d Tidying 2019-10-12 13:55:05 +01:00
bashrc b0be557047 Fix status number using sequence data 2019-10-12 13:45:53 +01:00
bashrc 78bb91505a Light theme calendar event 2019-10-12 11:59:29 +01:00
bashrc 9305d85a6d Calendar background color in light theme 2019-10-12 11:57:05 +01:00
bashrc aa71f009f7 Light theme calendar 2019-10-12 11:52:36 +01:00
bashrc cd6975bf2c Icons directory for calendar icon 2019-10-12 11:26:34 +01:00
bashrc aeaf961f4c Calendar movement icon on hacker theme 2019-10-12 11:18:48 +01:00
bashrc 48697ef4b2 Calendar font on hacker theme 2019-10-12 11:15:23 +01:00
bashrc 4343fbf22a Hacker theme calendar 2019-10-12 11:13:14 +01:00
bashrc 48c5424e33 More retries 2019-10-12 10:37:21 +01:00
bashrc 1040f82312 Icons for calendar 2019-10-11 23:27:00 +01:00
bashrc dad86cd259 Purple calendar theme 2019-10-11 23:06:43 +01:00
bashrc 778b4e72c2 Initial calendar themes 2019-10-11 22:52:19 +01:00
bashrc 82df24d3ce Calendar day style 2019-10-11 22:26:03 +01:00
bashrc 5499ef95bd Place style 2019-10-11 22:24:00 +01:00
bashrc 880bcef030 Place style 2019-10-11 22:21:58 +01:00
bashrc 0d8d6699e0 Year style 2019-10-11 22:14:44 +01:00
bashrc 8672f2e5f6 Vertical lines on calendar day screen 2019-10-11 22:12:51 +01:00
bashrc 2b30d08aa4 Day events padding 2019-10-11 22:07:30 +01:00
bashrc f0adba1dba Linebreaks 2019-10-11 22:03:04 +01:00
bashrc 7b370b651b Single datetime 2019-10-11 21:53:31 +01:00
bashrc 29b94eef31 Nested lists 2019-10-11 21:52:15 +01:00
bashrc 3464fee873 Show daily events on calendar 2019-10-11 21:45:46 +01:00
bashrc 521249499b Remove calendar dots 2019-10-11 21:21:03 +01:00
bashrc 8c3c429496 Calendar style 2019-10-11 21:20:23 +01:00
bashrc cc51a036f5 Debug 2019-10-11 21:13:13 +01:00
bashrc 0bd12bab4c Clickable area on calendar cells 2019-10-11 21:12:24 +01:00
bashrc 09a5b930c7 Spaces 2019-10-11 20:54:36 +01:00
bashrc e7ba00a184 Link cell 2019-10-11 20:29:43 +01:00
bashrc 7567e79536 prefix 2019-10-11 20:26:08 +01:00
bashrc 8ea78dda93 Use full domain 2019-10-11 20:25:36 +01:00
bashrc 060b63b384 Newline 2019-10-11 20:22:55 +01:00
bashrc e0b782fd4f Calendar 2019-10-11 20:19:35 +01:00
bashrc 9a468ed4f8 Calendar links style 2019-10-11 20:19:09 +01:00
bashrc eb2e76b57b Links on calendar 2019-10-11 20:12:30 +01:00
bashrc 6f8a86a044 Remove carriage return 2019-10-11 19:55:24 +01:00
bashrc e378e83a8a Tidying 2019-10-11 19:48:46 +01:00
bashrc ffc949406d Remove activity 2019-10-11 19:08:47 +01:00
bashrc 83d21e4de6 Add some retries 2019-10-11 19:03:58 +01:00
bashrc b0bd93e52d Remove trailing activity 2019-10-11 18:12:24 +01:00
bashrc 2738dcbedf Try to read a few times 2019-10-11 18:03:07 +01:00
bashrc 1811298962 Parse time zone 2019-10-11 17:54:55 +01:00
bashrc f70d482478 tagDict 2019-10-11 17:29:13 +01:00
bashrc 44d7c791b4 Check that calendar event does not already exist 2019-10-11 17:20:16 +01:00
bashrc da7d9b4ea4 Get start time of event 2019-10-11 17:16:56 +01:00
bashrc 93105821a0 Show a day in the calendar 2019-10-11 17:00:54 +01:00
bashrc 2b66a49359 Themed calendar buttons 2019-10-11 15:37:26 +01:00
bashrc 669647cb53 Calendar button style 2019-10-11 15:34:06 +01:00
bashrc 4d35b7d5ad Buttons for previous and next month 2019-10-11 15:23:23 +01:00
bashrc 2bb7e5f898 Calendar path 2019-10-11 13:33:40 +01:00
bashrc 7ab0901721 Save calendar events to file 2019-10-11 13:31:06 +01:00
bashrc 002c400e40 populate replies later 2019-10-11 13:00:18 +01:00
bashrc 5f0416a73b Remove debug 2019-10-11 12:55:15 +01:00
bashrc f053c6f80d Debug 2019-10-11 12:47:48 +01:00
bashrc 170aa94e00 Debug 2019-10-11 12:42:38 +01:00
bashrc 6caa442263 Calendar colors 2019-10-11 12:42:09 +01:00
bashrc 542950606b Show dots representing calendar events 2019-10-11 12:31:29 +01:00
bashrc 2a734ba89f More variables 2019-10-11 11:54:06 +01:00
bashrc a0ec9d1e69 Event number color 2019-10-11 11:30:44 +01:00
bashrc 3153e6c53c Events on calendar 2019-10-11 11:28:28 +01:00
bashrc 940a49fd58 Ellipse around today on calendar 2019-10-11 10:10:26 +01:00
bashrc 56ba5c1c19 Circle around today 2019-10-11 10:02:20 +01:00
bashrc 93c5857272 calendar today colors 2019-10-10 21:56:23 +01:00
bashrc 5a8f45c4d9 Highlight today on calendar 2019-10-10 21:51:36 +01:00
bashrc 08ce593ab8 Calendar colors 2019-10-10 21:43:43 +01:00
bashrc a977e3df1d Include main 2019-10-10 21:00:22 +01:00
bashrc 9d52fcbf5a Maximum day of month 2019-10-10 20:21:32 +01:00
bashrc 7e50140f71 Calendar style 2019-10-10 20:19:47 +01:00
bashrc 5a04f407d3 Ranges 2019-10-10 20:06:32 +01:00
bashrc e6118ef5f3 Day number 2019-10-10 20:00:57 +01:00
bashrc 4aa832fc02 Debug 2019-10-10 19:55:31 +01:00
bashrc 248151141f datetime 2019-10-10 19:52:57 +01:00
bashrc bdc2533691 Debug 2019-10-10 19:50:32 +01:00
bashrc 6e73e451ae Day of month 2019-10-10 19:47:58 +01:00
bashrc 87a920d574 Syntax 2019-10-10 19:40:01 +01:00
bashrc c4416019cc Sunday offset 2019-10-10 19:38:35 +01:00
bashrc 748fa86595 Double datetime 2019-10-10 19:36:21 +01:00
bashrc 9c39c886d2 Check for zero 2019-10-10 19:34:50 +01:00
bashrc 5bcf147c20 Debug 2019-10-10 19:33:04 +01:00
bashrc 6ec9946a29 More reserved names 2019-10-10 19:30:25 +01:00
bashrc aaa60e2763 Calendar screen 2019-10-10 19:25:42 +01:00
bashrc 68cd2b9205 Beginning of calendar screen 2019-10-10 15:43:21 +01:00
bashrc 029bfc375b Icon sequence 2019-10-10 15:19:14 +01:00
bashrc 25034d0334 Calendar icon 2019-10-10 15:15:21 +01:00
bashrc 9be5b928d0 Get time zone 2019-10-10 14:48:05 +01:00
bashrc 65b8a744d1 Check for ending of time 2019-10-10 14:24:29 +01:00
bashrc 34618f64a9 Append seconds 2019-10-10 14:22:38 +01:00
bashrc 892700e057 Param defaults 2019-10-10 14:13:59 +01:00
bashrc 272cc92adf Include event parameters within tags 2019-10-10 14:12:13 +01:00
bashrc 94f301e983 emoji icon style 2019-10-10 12:30:51 +01:00
bashrc 503e079547 align time right 2019-10-10 12:22:16 +01:00
bashrc 7772489cb0 Calendar icon style 2019-10-10 12:10:18 +01:00
bashrc 5230de3d38 Calendar icon 2019-10-10 12:05:49 +01:00
bashrc 6b03e75aaa Date and time style 2019-10-10 11:44:10 +01:00
bashrc 26650a233d Positioning of date and time 2019-10-10 11:31:21 +01:00
bashrc 6c9834f2d7 Optional date, time and location on new posts 2019-10-10 11:26:33 +01:00
bashrc 6e51317ce5 Extra check to avoid infinite loop 2019-10-09 19:41:19 +01:00
bashrc dc135f49c0 Avoid infinite loop 2019-10-09 19:39:15 +01:00
bashrc 9f5bf60af0 Indentation 2019-10-09 19:34:59 +01:00
bashrc 9ad5b34002 No second colon 2019-10-09 19:32:53 +01:00
bashrc ffd290b681 Debug 2019-10-09 19:26:54 +01:00
bashrc 30dfa77774 Debug 2019-10-09 19:16:06 +01:00
bashrc 2edff7aa2e Debug 2019-10-09 19:11:54 +01:00
bashrc de15578d17 Detection of emoji 2019-10-09 19:05:24 +01:00
bashrc 8a1226d391 Extra debug 2019-10-09 18:24:16 +01:00
bashrc fe2b4e7156 Replace stray emoji 2019-10-09 18:03:07 +01:00
bashrc 440ba8e7f6 Extra emoji 2019-10-09 15:07:43 +01:00
bashrc f7cc9a48ff Getting actors from cache 2019-10-09 14:44:01 +01:00
bashrc 2d3c826eb4 Extra emoji 2019-10-09 14:38:56 +01:00
bashrc 6111c596ad Get reply actor 2019-10-09 14:25:53 +01:00
bashrc 4ac811e584 Obtain preferred name from cached actor 2019-10-09 14:24:14 +01:00
bashrc 1dbf4ed7c9 Extra emoji 2019-10-09 13:29:37 +01:00
bashrc 4736d144f4 Tidying 2019-10-09 13:23:20 +01:00
bashrc de2b62ab5f Remove very long words 2019-10-09 13:19:17 +01:00
bashrc 11d9d88902 Icon vertical alignment 2019-10-08 20:41:58 +01:00
bashrc bd2ba22055 Icon tweaks 2019-10-08 20:33:56 +01:00
bashrc 29bf1d4543 Include url within reply file 2019-10-06 16:11:10 +01:00
bashrc 8e780492d3 Include url within notification file 2019-10-06 16:07:40 +01:00
bashrc c016711dac Tidying of css 2019-10-06 11:47:15 +01:00
bashrc 42a1b4882e Move function to follow send 2019-10-06 11:34:40 +01:00
bashrc 36ffe273be Tidying 2019-10-06 10:57:49 +01:00
bashrc 49a044a2a7 Remove any follow requests rejected for the account being followed 2019-10-06 10:53:53 +01:00
bashrc 9ed20c111e Tidying 2019-10-06 10:48:37 +01:00
bashrc 193ac8916c Check if mention exists 2019-10-04 16:17:48 +01:00
bashrc 5b1692a3c7 Use full domain 2019-10-04 15:43:46 +01:00
bashrc a478588e1f String 2019-10-04 15:41:23 +01:00
bashrc 5613afb3d8 Create tag list if needed 2019-10-04 15:38:18 +01:00
bashrc 542f3267a1 Add mention for sender to posts sent to group members 2019-10-04 15:36:53 +01:00
bashrc 5fbaf00b04 Include the sending actor in posts to groups 2019-10-04 15:29:40 +01:00
bashrc 4bc99379ab Followers only 2019-10-04 15:18:04 +01:00
bashrc 128579f0dc Tidying 2019-10-04 15:15:46 +01:00
bashrc 80b62314ad Outside of loop 2019-10-04 15:09:48 +01:00
bashrc 33b7393a77 Set subject for posts sent to group 2019-10-04 15:08:57 +01:00
bashrc f8237edd26 Same cc 2019-10-04 15:02:55 +01:00
bashrc d0a0737627 Set recipients to be followers 2019-10-04 15:02:11 +01:00
bashrc f92c172da0 Use the preferred group name 2019-10-04 14:39:41 +01:00
bashrc 8142854dfe Include group name in subject 2019-10-04 14:31:30 +01:00
bashrc 43cdb1e4be Command to remove groups 2019-10-04 13:59:31 +01:00
bashrc 12873db070 Update readme for groups 2019-10-04 13:56:25 +01:00
bashrc 8acb8769b9 Add groups from the commandline 2019-10-04 13:39:46 +01:00
bashrc fa1f51a177 Sending posts to group members 2019-10-04 13:22:56 +01:00
bashrc cf854d0039 Comments 2019-10-04 11:00:57 +01:00
bashrc 00c8d96099 Tidying 2019-10-04 10:58:02 +01:00
bashrc 1043a857aa Prepare for groups 2019-10-04 10:23:38 +01:00
bashrc 517e44e24a Rely/announce avatar links to options 2019-10-04 09:42:53 +01:00
bashrc 4ca765a41d Set actor for reply 2019-10-03 19:07:45 +01:00
bashrc 88697ce382 Hero image width 2019-10-03 18:21:11 +01:00
bashrc d26610b6da Highlight button when a new reply arrives 2019-10-03 17:37:25 +01:00
bashrc e6c2fc11a3 Highlight DM button when a new DM arrives 2019-10-03 17:22:34 +01:00
bashrc a10645d871 Larger license link on login screen 2019-10-03 15:46:45 +01:00
bashrc 903677549f Source link on login screen 2019-10-03 15:43:47 +01:00
bashrc 121665b46a License doesn't need to be on every tab 2019-10-03 15:36:22 +01:00
bashrc 68515fcf48 License icon style 2019-10-03 15:34:13 +01:00
bashrc 6a74bac2bb License on profile page 2019-10-03 15:28:52 +01:00
bashrc 5cb313383d Extra emoji 2019-10-03 15:03:19 +01:00
bashrc 57aba3eaff Emoji 2019-10-03 14:54:00 +01:00
bashrc 133094acdb Better clean 2019-10-03 10:59:08 +01:00
bashrc 364d204564 Scripts directory 2019-10-03 10:55:11 +01:00
bashrc dbb40ec1b8 Script to switch to development repo 2019-10-03 10:51:27 +01:00
bashrc fb5551f1d4 nickname 2019-10-02 16:00:22 +01:00
bashrc cded055acc Add content warnings for replies to posts which have content warnings 2019-10-02 15:40:39 +01:00
bashrc 7442097384 Smaller icons 2019-10-02 13:38:20 +01:00
bashrc e3e9b88091 Image size 2019-10-02 13:28:58 +01:00
bashrc 206d72ca98 Border radius variable 2019-10-02 13:20:01 +01:00
bashrc 19ae36a161 Border radius variable 2019-10-02 13:17:03 +01:00
bashrc 7654860442 Button corner radius 2019-10-02 13:09:57 +01:00
bashrc 4dca599f06 More padding 2019-10-02 12:52:49 +01:00
bashrc 9a8d114dd5 Vertical align 2019-10-02 11:28:17 +01:00
bashrc 0e4bf81785 Middle align 2019-10-02 11:19:15 +01:00
bashrc a5d50e1d68 Vertical alignment of emoji 2019-10-02 11:15:08 +01:00
bashrc b8696491af Rounded border 2019-10-01 22:02:32 +01:00
bashrc ac5a94f05f Alias for arch 2019-10-01 19:08:52 +01:00
bashrc 349ad6321a Firefox emoji 2019-10-01 17:39:46 +01:00
bashrc b49a6ff91b Users or profile 2019-10-01 15:29:28 +01:00
bashrc 5b35225532 Handle unwrapped posts 2019-10-01 15:11:15 +01:00
bashrc c8de9ae6c8 Include actor 2019-10-01 15:00:06 +01:00
bashrc e986d30367 Get actor from status 2019-10-01 14:23:22 +01:00
bashrc a94665d9a0 Show actor 2019-10-01 14:10:46 +01:00
bashrc 5c6ca46d8b Tidying 2019-10-01 13:50:06 +01:00
bashrc c1acbf0deb Add a few retries 2019-10-01 13:35:39 +01:00
bashrc 1d3c74bd21 Obtaining actors for replies and announces 2019-10-01 13:28:13 +01:00
bashrc f31a9b4fd1 Debug message 2019-10-01 13:19:50 +01:00
bashrc 5a00ecaf8b Debug message 2019-10-01 13:17:09 +01:00
bashrc 0a99b20f4d Rename function 2019-10-01 13:13:49 +01:00
bashrc 73d1a89977 More than one invidious site 2019-10-01 12:31:29 +01:00
bashrc c9ec8d4d17 Support invidio.us links 2019-10-01 12:25:10 +01:00
bashrc 68934d0a73 Support invisible parts of links 2019-10-01 12:08:27 +01:00
bashrc 7b29c456b9 Include ending after ellipsis 2019-10-01 11:47:47 +01:00
bashrc 3d9398609c Linebreaks with extra space 2019-10-01 11:36:51 +01:00
bashrc 708f1d8a2a Support dat links 2019-10-01 09:54:52 +01:00
bashrc 3c6122c56c Exception handling 2019-09-30 23:39:02 +01:00
bashrc 358cd2ea40 Exception handling 2019-09-30 23:05:43 +01:00
bashrc 6a6f814e2c Always count 2019-09-30 21:45:25 +01:00
bashrc 2b318435b2 Tidying 2019-09-30 20:39:48 +01:00
bashrc 8b809fc984 Indentation 2019-09-30 20:37:50 +01:00
bashrc 313ce5bd9b Try to obtain actor for person replied to 2019-09-30 20:23:53 +01:00
bashrc aa0656f3dc Obtain actor for announces 2019-09-30 20:13:14 +01:00
bashrc d7be1ce7e4 Don't need the duplicate detection 2019-09-30 17:26:59 +01:00
bashrc 06474686cf Typo 2019-09-30 17:19:04 +01:00
bashrc f39825a80f Avoid repeated posts in timeline 2019-09-30 17:17:21 +01:00
bashrc f23d5f7c6a Avoid repeated posts in timeline 2019-09-30 16:52:37 +01:00
bashrc 58961cc5e1 Return to timeline 2019-09-30 15:04:46 +01:00
bashrc b0c1cb5712 Extra bad html tag 2019-09-30 12:12:02 +01:00
bashrc 1fa22a6777 If tags are something other than a list then replace with an empty list 2019-09-30 12:05:35 +01:00
bashrc b75faf7ac8 Include post id in reject messages 2019-09-30 11:37:34 +01:00
bashrc 0f2c863e4e Check that number of tags is not too large 2019-09-30 11:35:49 +01:00
bashrc 1480fed196 Script to show rejected posts 2019-09-30 11:18:05 +01:00
bashrc 865b4c3ce9 Hellthread mitigation 2019-09-30 11:15:57 +01:00
bashrc 11f6655530 Show the whole message content 2019-09-30 10:53:43 +01:00
bashrc 4aa56256e8 Validate post content 2019-09-30 10:43:46 +01:00
bashrc 20accfd2f2 Update distro emoji 2019-09-30 10:13:10 +01:00
bashrc c1c9440535 Bigger display name emoji on mobile 2019-09-30 09:45:01 +01:00
bashrc 19b1ce5d8b Bigger display name emoji on mobile 2019-09-30 09:42:37 +01:00
bashrc aa6809ea92 Add emoji to display names 2019-09-30 09:30:02 +01:00
bashrc 4614fa426c Profile 2019-09-29 23:18:42 +01:00
bashrc 1b7bd043b2 More emoji 2019-09-29 21:22:44 +01:00
bashrc 430df2480e Convert to string 2019-09-29 20:51:12 +01:00
bashrc 4f0db03374 Fix indentation 2019-09-29 20:45:19 +01:00
bashrc f9760476ab Extra debug 2019-09-29 20:39:35 +01:00
bashrc cd30e547b8 Unit test for emoji 2019-09-29 19:48:34 +01:00
bashrc bacc06f416 emoji replacement 2019-09-29 18:42:51 +01:00
bashrc 1b15e9ff43 Separate tag replacement functions 2019-09-29 18:20:10 +01:00
bashrc 1740cfad80 Function name 2019-09-29 18:10:34 +01:00
bashrc ee39901a49 Change media image to one with a dog 2019-09-29 17:54:43 +01:00
bashrc 4f39a0c7df Handle tag dictionary 2019-09-29 17:48:07 +01:00
bashrc add425a245 Add function import 2019-09-29 17:30:57 +01:00
bashrc 10d239ef2e Insert emoji 2019-09-29 17:28:02 +01:00
bashrc 2918582753 Only call function if needed 2019-09-29 16:57:54 +01:00
bashrc 3ed5e83a90 More description 2019-09-29 16:49:08 +01:00
bashrc c8d25f85cb Loading emoji 2019-09-29 15:48:17 +01:00
bashrc f32ee82683 Capital 2019-09-29 15:16:09 +01:00
bashrc 6d9416bb40 More debug 2019-09-29 15:06:53 +01:00
bashrc 9947411c45 More debug 2019-09-29 15:04:56 +01:00
bashrc b5bcb75c3c More debug 2019-09-29 14:58:05 +01:00
bashrc e311d61a6e Remove colons 2019-09-29 14:44:56 +01:00
bashrc d0517ef772 Return page number 2019-09-29 14:43:39 +01:00
bashrc fadefff30d Copy headers 2019-09-29 14:39:19 +01:00
bashrc 795d6b6f53 Create thread to send new posts 2019-09-29 14:30:24 +01:00
bashrc 3f8e4e0b2f Unfollow links to person options 2019-09-29 13:46:49 +01:00
bashrc 5e22ed5b07 path as parameter 2019-09-29 13:36:39 +01:00
bashrc 89529e1367 Update linx emoji 2019-09-29 12:19:00 +01:00
bashrc 4fbe7ad064 Ubuntu logo 2019-09-29 12:01:54 +01:00
bashrc c2f8af0bf8 Remove hash ending 2019-09-29 11:41:21 +01:00
bashrc e1ba56bc3d Extra debug 2019-09-29 11:13:00 +01:00
bashrc 98064881e4 Script to show errors 2019-09-29 11:07:34 +01:00
bashrc 3c77111796 Tidying 2019-09-29 10:20:01 +01:00
bashrc d11d8082e9 Download posts for announce activities as they arrive 2019-09-29 10:15:10 +01:00
bashrc 675e8a88d5 Timeline icon widths 2019-09-28 21:27:08 +01:00
bashrc 2b56830b6c Timeline icon style 2019-09-28 21:15:40 +01:00
bashrc 59dc9e3441 Tidying 2019-09-28 20:48:29 +01:00
bashrc 1de65ca6e1 Media feed length 2019-09-28 19:06:17 +01:00
bashrc 400296bb6b media timeline screenshot 2019-09-28 18:18:39 +01:00
bashrc 4c644b1d1f Move function 2019-09-28 17:58:21 +01:00
bashrc d60173def4 Missing import 2019-09-28 17:31:03 +01:00
bashrc 4670f4cf33 Stray colon 2019-09-28 17:23:02 +01:00
bashrc 4e3d9e75b4 Checking that announces contain images 2019-09-28 17:21:43 +01:00
bashrc 0907932a0a Move function 2019-09-28 17:10:45 +01:00
bashrc 17f13d191c Missing params 2019-09-28 17:08:52 +01:00
bashrc 48ae8dc2f2 Missing params 2019-09-28 17:07:39 +01:00
bashrc ba69013251 Width of images on media timeline 2019-09-28 17:05:47 +01:00
bashrc 8b68c83ed8 Tidying 2019-09-28 17:05:01 +01:00
bashrc 865ed2ef08 Tidying 2019-09-28 16:45:37 +01:00
bashrc bc9ece83e7 image links directly to post 2019-09-28 16:16:45 +01:00
bashrc c07387d4ff Center icon 2019-09-28 16:10:21 +01:00
bashrc cc769e731e Untangle links 2019-09-28 15:45:48 +01:00
bashrc 6c84b4a1b7 Image id 2019-09-28 15:36:58 +01:00
bashrc 535075b970 Icons directory 2019-09-28 15:33:00 +01:00
bashrc c9fdd23ac2 Gallery icon 2019-09-28 15:27:18 +01:00
bashrc 843bc9691a line break 2019-09-28 14:54:29 +01:00
bashrc ca258d3351 Only applies to create 2019-09-28 14:22:18 +01:00
bashrc fb900cae55 Extra div 2019-09-28 14:14:28 +01:00
bashrc db21d9fe2c More image padding 2019-09-28 14:07:48 +01:00
bashrc 1777f1940e Extra padding 2019-09-28 14:04:44 +01:00
bashrc dd3ba06447 Include announces in media timeline 2019-09-28 13:48:33 +01:00
bashrc 0b2a7c1676 Extra media check 2019-09-28 13:27:48 +01:00
bashrc 588f42a896 Don't post content 2019-09-28 13:07:48 +01:00
bashrc 29587679d9 Separator 2019-09-28 13:06:48 +01:00
bashrc 874d0e5ada Gallery image width on mobile 2019-09-28 13:06:20 +01:00
bashrc 381034674d Gallery image Width 2019-09-28 13:05:33 +01:00
bashrc 66109a7833 Gallery border 2019-09-28 12:59:31 +01:00
bashrc d563e3cf35 Extra lines 2019-09-28 12:58:41 +01:00
bashrc e840eee2b9 Gallery container 2019-09-28 12:49:16 +01:00
bashrc 4b3ab2940f media timeline 2019-09-28 12:40:42 +01:00
bashrc 7c579e821b Translations 2019-09-28 12:35:15 +01:00
bashrc 38024903b1 No backslash 2019-09-28 12:33:04 +01:00
bashrc 8ed3f132be Media timeline 2019-09-28 12:29:42 +01:00
bashrc 160f272b5d Matrix 2019-09-27 23:00:42 +01:00
bashrc c3208c6ad7 Font doesn't need to be big 2019-09-27 22:54:26 +01:00
bashrc b5042785d9 Matrix link on website 2019-09-27 22:52:09 +01:00
bashrc eea0aa85ab Link to chat room 2019-09-27 22:46:46 +01:00
bashrc 06b936f62e Use scandir 2019-09-27 13:09:04 +01:00
bashrc 139c2a1f13 coc update 2019-09-26 10:50:59 +01:00
bashrc c4406aee01 Smaller like buttons 2019-09-25 21:04:04 +01:00
bashrc 1c2ca215e9 Darker color 2019-09-25 21:01:45 +01:00
bashrc 6da0e1a672 Hacker style likes 2019-09-25 20:59:10 +01:00
bashrc 2f4e5a79c5 Follow request icon on light theme 2019-09-25 18:33:15 +01:00
bashrc 77afc8ac01 Extra light screenshot 2019-09-25 18:26:17 +01:00
bashrc 6c0ca0d589 Use light screenshot 2019-09-25 18:12:34 +01:00
bashrc d9e72bdc93 Use purple screenshot 2019-09-25 18:11:19 +01:00
bashrc 3d6dc815d9 Use light screenshot 2019-09-25 18:09:17 +01:00
bashrc 42b60e3192 Don't repeat name for self-boosts 2019-09-25 13:48:12 +01:00
bashrc 90810269e2 Authenticated fetch signature check 2019-09-25 11:22:49 +01:00
bashrc c3b8396084 Some exemptions from authenticated fetch due to prior authorization 2019-09-25 10:33:47 +01:00
bashrc de5e6d449a Start of authenticated fetch support 2019-09-25 10:22:10 +01:00
bashrc 23cf6f724a Extra timeline checks 2019-09-24 23:24:45 +01:00
bashrc 72867fd7bc Handle paging of inbox and outbox 2019-09-24 23:02:13 +01:00
bashrc 70a9fb0929 Fix the counting of posts 2019-09-24 22:56:53 +01:00
bashrc a117b21009 Use shared inbox for replies timeline 2019-09-24 22:41:48 +01:00
bashrc 5155c1f05e Tidying 2019-09-24 22:16:44 +01:00
bashrc a2b5e591c6 Border size 2019-09-24 18:34:59 +01:00
bashrc 7b84e0ea2d Border size 2019-09-24 18:32:45 +01:00
bashrc 15716532af Credits 2019-09-24 18:09:10 +01:00
bashrc aff3972690 Better resolution 2019-09-24 17:56:11 +01:00
bashrc b5c5b6d943 icon border 2019-09-24 17:46:22 +01:00
bashrc 4e5b85659d New follow icon 2019-09-24 17:43:07 +01:00
bashrc c69d029d0c Translations 2019-09-24 16:51:12 +01:00
bashrc aa6510baf2 Increase max posts 2019-09-24 14:29:58 +01:00
bashrc 3bd99d04ca Increase max posts 2019-09-24 14:27:16 +01:00
bashrc 6dc55a1988 Show announce avatar 2019-09-24 12:59:42 +01:00
bashrc 6b3e6258ca Smaller reply avatar 2019-09-24 12:27:23 +01:00
bashrc cb5af23139 Separate div for reply avatar 2019-09-24 12:15:29 +01:00
bashrc fc435375fb Without div 2019-09-24 12:11:45 +01:00
bashrc 5aca1d4999 Display reply avatar 2019-09-24 12:05:47 +01:00
bashrc 7962de5667 Buttons are taller on mobile so that you can get your finger on them 2019-09-24 11:48:57 +01:00
bashrc 5be718fc0f Reply to self 2019-09-24 11:09:35 +01:00
bashrc fd8f2c569f Consistent green 2019-09-24 10:55:41 +01:00
bashrc efdeb64fd6 Music emoji color 2019-09-24 10:48:10 +01:00
bashrc 7c497bb323 Add music emoji to music links 2019-09-24 10:27:34 +01:00
bashrc f5871ea7f8 Extra emoji 2019-09-24 10:25:43 +01:00
bashrc b024c6eeb9 Extra emoji 2019-09-24 10:23:16 +01:00
bashrc b956be89e7 Color variables 2019-09-24 10:07:36 +01:00
bashrc 2c485093d0 Follow approve button dimensions on mobile 2019-09-24 09:56:35 +01:00
bashrc 83ed1bd060 Highlighted selected button 2019-09-24 09:43:30 +01:00
bashrc 2009adb3f1 Highlighted button on mobile 2019-09-24 09:38:56 +01:00
bashrc 10c7216fb2 Selected button background 2019-09-23 22:58:42 +01:00
bashrc 4752f37fa1 Order of timeline option 2019-09-23 22:43:10 +01:00
bashrc ce76d3886c Include timeline parameter for like/repeat 2019-09-23 22:40:31 +01:00
bashrc 526f69c8b9 Replies check 2019-09-23 22:14:34 +01:00
bashrc 06086d9b6f Check for empty timeline 2019-09-23 22:05:31 +01:00
bashrc c2ce6b4064 Create replies timeline 2019-09-23 22:02:06 +01:00
bashrc 6f07240c3e Replies timeline 2019-09-23 21:44:40 +01:00
bashrc 534948b8fe Avoid clashing replies path 2019-09-23 21:43:18 +01:00
bashrc 2a3c05c482 object 2019-09-23 21:33:26 +01:00
bashrc f7419c1f21 Tidying 2019-09-23 21:31:49 +01:00
bashrc 5179a87198 else 2019-09-23 21:16:59 +01:00
bashrc 7bc44d10d3 Reverse logic 2019-09-23 21:16:36 +01:00
bashrc bae658a1d7 Check for actor 2019-09-23 21:15:21 +01:00
bashrc b8be75c3f4 Colon 2019-09-23 21:10:04 +01:00
bashrc 8ea1e3306b Replies timeline 2019-09-23 21:09:11 +01:00
bashrc 7ed6728594 Replies timeline 2019-09-23 20:53:18 +01:00
bashrc e311b995de Emoji codes 2019-09-23 14:27:15 +01:00
bashrc 040c963316 emoji size on profile 2019-09-23 13:46:19 +01:00
bashrc 6f4e308dc6 Separate class for profile image 2019-09-23 13:42:36 +01:00
bashrc 7d39837146 Emoji in profile description 2019-09-23 13:33:32 +01:00
bashrc 85c69ffada Displaying emoji in name on profile 2019-09-23 13:19:00 +01:00
bashrc dff6946442 Emoji style in header 2019-09-23 13:07:36 +01:00
bashrc 567a439598 Emoji style in header 2019-09-23 13:02:43 +01:00
bashrc 74ceb8dd28 Convert dictionary to list 2019-09-23 12:55:45 +01:00
bashrc 372edabd3d Tidying 2019-09-23 12:44:43 +01:00
bashrc 1a5ed483bb Switch arguments 2019-09-23 12:39:58 +01:00
bashrc 0580bd86de Remove argument 2019-09-23 12:36:54 +01:00
bashrc 2279b3f93c Typo 2019-09-23 12:34:56 +01:00
bashrc 218693f7b1 Replace emoji tags 2019-09-23 12:34:24 +01:00
bashrc a8689b749c Replacing emoji 2019-09-23 12:22:15 +01:00
bashrc 6611702ee1 Comments 2019-09-23 12:11:13 +01:00
bashrc d39dfa3f47 Tidying 2019-09-23 12:07:01 +01:00
bashrc 50b22d5126 Remove any initial paragraph markup 2019-09-23 11:38:06 +01:00
bashrc aa2bc646ec Remove paragraph markup 2019-09-23 11:36:23 +01:00
bashrc b8da814892 Handle emoji with trailing chatacters 2019-09-23 11:32:04 +01:00
bashrc 7dd794b531 Check for colon in display name 2019-09-23 11:11:13 +01:00
bashrc d2344663f6 Show emoji in display name 2019-09-23 11:05:16 +01:00
bashrc bc03ed9c41 Add kubuntu emoji 2019-09-23 10:41:45 +01:00
bashrc b92f4570a9 Avoid duplicates 2019-09-22 18:54:33 +01:00
bashrc e8510d5385 Avoid duplicates 2019-09-22 18:48:52 +01:00
bashrc e5993774af Brackets 2019-09-22 12:28:04 +01:00
bashrc c06e4183b6 Check the length of the text in textarea 2019-09-22 12:25:48 +01:00
bashrc ff138fb6ca value 2019-09-22 12:21:58 +01:00
bashrc 65541aff98 Explicit function calls 2019-09-22 12:20:14 +01:00
bashrc c21186e901 Remove autofocus 2019-09-22 12:13:49 +01:00
bashrc 854354acd8 Redo focus function 2019-09-22 12:12:10 +01:00
bashrc 6a4cf4c3b7 Focus on message 2019-09-22 11:52:26 +01:00
bashrc e1558e9cb0 Remove unused element 2019-09-22 11:19:25 +01:00
bashrc d4c277dffd Newlines 2019-09-22 11:16:59 +01:00
bashrc 7924f831e5 Focus on message 2019-09-22 10:48:17 +01:00
bashrc 044a15d6eb Set focus to message 2019-09-22 10:43:16 +01:00
bashrc c059d16f03 Try page show 2019-09-22 10:33:11 +01:00
bashrc 371a97dfa2 Also try onload 2019-09-22 10:30:37 +01:00
bashrc ed24695339 Get message by id 2019-09-22 10:26:52 +01:00
bashrc 6e0e8b0d12 Add moderation textbox focus 2019-09-22 10:22:38 +01:00
bashrc fb6a19a071 Move cursor to end of textarea when replying 2019-09-22 10:14:39 +01:00
bashrc faa0b2a8b5 Avoid duplication 2019-09-18 20:10:53 +01:00
bashrc d76c2b8b22 Reverse logic 2019-09-18 20:05:08 +01:00
bashrc 2dcf6a9af1 Don't store follow request if it has already been denied 2019-09-18 20:01:07 +01:00
bashrc 7f9b9c5c92 Typo 2019-09-18 18:31:14 +01:00
bashrc 5e57bf191b Remove from follow requests 2019-09-18 18:30:19 +01:00
bashrc 58579f48a2 Remove handle from follow requests 2019-09-18 18:04:19 +01:00
bashrc 4de04e7362 Dropdown hover color on light theme 2019-09-18 13:21:14 +01:00
bashrc a3b0a7c382 Dropdown background color on light theme 2019-09-18 13:18:36 +01:00
bashrc 06c17ae766 Add light theme screenshot 2019-09-18 13:12:43 +01:00
bashrc 6a22401c27 Follow request icon for light theme 2019-09-18 13:01:07 +01:00
bashrc 5b546d3611 Increase brightness of profile background 2019-09-18 12:53:03 +01:00
bashrc 5073708647 Profile text color on light theme 2019-09-18 12:51:52 +01:00
bashrc fbfcb78859 No darkening of banner on light theme 2019-09-18 12:47:12 +01:00
bashrc 5f821c64e6 white background 2019-09-18 12:37:40 +01:00
bashrc a4a72ddd88 Search background color 2019-09-18 12:32:21 +01:00
bashrc 9881a8b333 Light theme icons 2019-09-18 12:26:46 +01:00
bashrc b7ea51227a date color in light theme 2019-09-18 12:24:50 +01:00
bashrc c7b5ee6883 Add title to banner 2019-09-18 12:20:52 +01:00
bashrc 40400da296 Background for light theme 2019-09-18 11:51:35 +01:00
bashrc 07eefce640 Add style to header 2019-09-18 11:01:31 +01:00
bashrc af4fb2ed7b Use custom profile 2019-09-18 10:53:13 +01:00
bashrc 50e9417d87 Prevent links from becoming too long 2019-09-18 09:37:42 +01:00
bashrc 0920dbdcbe Extra emoji 2019-09-17 17:39:17 +01:00
bashrc 0eab60e3ba Change icon for follow request in purple theme 2019-09-17 13:23:27 +01:00
bashrc e53b6c5ff6 Exception handling for loading json files 2019-09-17 13:14:36 +01:00
bashrc 2210837a33 Handle failure to load post 2019-09-17 12:06:59 +01:00
bashrc ad89134511 Getting avatar url 2019-09-16 21:24:05 +01:00
bashrc c769cbb730 emoji update 2019-09-16 17:02:51 +01:00
bashrc f0fb417df3 Check for none 2019-09-16 14:06:38 +01:00
bashrc 0d51133942 Convert to string 2019-09-16 12:45:04 +01:00
bashrc 91534ba302 Increase maximum posts 2019-09-14 21:47:05 +01:00
bashrc 78fcf1618f Check status code 2019-09-14 20:39:51 +01:00
bashrc a99eb91544 Remove partial download 2019-09-14 20:34:35 +01:00
bashrc 743221b901 Check continuity of public key 2019-09-14 20:06:08 +01:00
bashrc e18fe78b9c Remove cached avatar image after actor update 2019-09-14 19:58:55 +01:00
bashrc 76c31b463e Too many ors 2019-09-14 19:40:47 +01:00
bashrc f20cd62c2d Avatar image doesn't necessarily end with extension 2019-09-14 19:40:03 +01:00
bashrc 4815caeddc Write the image content 2019-09-14 19:27:49 +01:00
bashrc 1be37a84d2 missing function 2019-09-14 19:17:09 +01:00
bashrc 7e4982e165 Use dashes 2019-09-14 19:00:03 +01:00
bashrc aaa396b6c9 Typo 2019-09-14 18:55:52 +01:00
bashrc 7285eaf7e5 Return path to cached avatar 2019-09-14 18:52:55 +01:00
bashrc 40aaad1a98 Use cached link to avatar image 2019-09-14 18:47:06 +01:00
bashrc 1346d0c932 Use id 2019-09-14 18:32:58 +01:00
bashrc 33989bb08b Reading cached avatars 2019-09-14 18:29:55 +01:00
bashrc 2975601956 Avatar cache filenames 2019-09-14 18:16:03 +01:00
bashrc 47225c686b Storing avatars in cache 2019-09-14 18:12:03 +01:00
bashrc 35531bda86 Loop through dictionary 2019-09-14 12:21:59 +01:00
bashrc 0710f3d38a Improve archiving by extracting status code 2019-09-14 12:18:34 +01:00
bashrc aaacd78d81 Voting 2019-09-13 20:01:33 +01:00
bashrc ef0498a772 Remove margin 2019-09-12 19:50:02 +01:00
bashrc 66f1a739aa Update website 2019-09-12 15:47:30 +01:00
bashrc 7952b80088 Screen shots 2019-09-12 15:27:49 +01:00
bashrc ba201316d5 Hacker theme images 2019-09-12 14:28:11 +01:00
bashrc ae149b77be Default banner in accordance with theme when account is created 2019-09-12 13:24:13 +01:00
bashrc 97b820b5ff Border size 2019-09-12 12:06:53 +01:00
bashrc eaf6bacc2d Refresh icon 2019-09-12 10:25:26 +01:00
bashrc 78414035cc Less confusing 2019-09-12 10:05:17 +01:00
bashrc 55b1d48f8f Add logo to banner 2019-09-12 10:03:40 +01:00
bashrc a4dffd7c09 Backgrounds for purple theme 2019-09-12 09:57:39 +01:00
bashrc d7a40db0a7 More border 2019-09-11 23:36:49 +01:00
bashrc c9ee405e83 New post icon 2019-09-11 23:33:35 +01:00
bashrc d66deb1a64 Select purple theme in config 2019-09-11 23:13:01 +01:00
bashrc 18a3ab2a7d Purple theme button colors 2019-09-11 23:10:52 +01:00
bashrc c90bc28a27 purple theme icons 2019-09-11 23:07:01 +01:00
bashrc 479f8d15c3 Button colors 2019-09-11 21:57:07 +01:00
bashrc b9c20c1cbe Button colors 2019-09-11 21:53:43 +01:00
bashrc 7bbf50cb48 Refresh icon 2019-09-11 21:44:46 +01:00
bashrc 4b321074bb css variables 2019-09-11 21:29:47 +01:00
bashrc dc726e2c78 Extra background colors 2019-09-11 21:20:28 +01:00
bashrc aefe7894c4 Button background color 2019-09-11 21:17:22 +01:00
bashrc 0a4e5a7e15 Time color 2019-09-11 21:04:18 +01:00
bashrc 7aee6e8b1a slash 2019-09-11 20:59:18 +01:00
bashrc b8a31d0fb6 Comma 2019-09-11 20:43:51 +01:00
bashrc 200989d3b9 Hacker theme icons 2019-09-11 20:42:07 +01:00
bashrc 2740d760c9 Optional separate directories for themed icons 2019-09-11 19:10:32 +01:00
bashrc e33d306970 Don't overwrite existing inbox arrivals 2019-09-11 18:42:55 +01:00
bashrc 3ae0f98f7c Check if a post was liked by the viewer 2019-09-11 17:16:28 +01:00
bashrc a4e8282028 Don't need to sort keys 2019-09-11 17:12:26 +01:00
bashrc 4004e231e5 Handle missing items list 2019-09-11 17:09:53 +01:00
bashrc 89f72579ca Document theme command 2019-09-11 15:27:25 +01:00
bashrc b34ba125a8 White background 2019-09-11 15:22:27 +01:00
bashrc d049807d64 Light theme 2019-09-11 15:20:01 +01:00
bashrc cc4bd2ccd7 Darker green 2019-09-11 13:08:03 +01:00
bashrc 52c6a2fc72 cw button colors 2019-09-11 13:05:47 +01:00
bashrc 728cb55904 Extra theming 2019-09-11 12:50:36 +01:00
bashrc e159b7b85e Hacker theme 2019-09-11 12:43:49 +01:00
bashrc 365f3daaa4 Theme command 2019-09-11 12:23:03 +01:00
bashrc 11afe35382 Describe style customization 2019-09-11 11:06:54 +01:00
bashrc 191c7e1725 css can be customised 2019-09-11 10:58:43 +01:00
bashrc e311fdebb2 Larger mobile fonts 2019-09-10 16:05:09 +01:00
346 changed files with 10244 additions and 3577 deletions

No files matched your search

+3 -1
View File
@@ -1,5 +1,7 @@
all:
debug:
clean:
rm -f *.txt~ *.md~ *.py~ *.json~ *.css~ Makefile~
rm -f *.*~ *~
rm -f orgs/*~
rm -f scripts/*~
rm -rf __pycache__
+8 -9
View File
@@ -6,9 +6,11 @@ Epicyon is a modern [ActivityPub](https://www.w3.org/TR/activitypub) compliant s
[Project Goals](README_goals.md) - [Commandline interface](README_commandline.md) - [Customizations](README_customizations.md) - [Object Capabilities](ocaps.md) - [Code of Conduct](code-of-conduct.md)
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)
Matrix room: **#epicyon:matrix.freedombone.net**
<img src="https://code.freedombone.net/bashrc/epicyon/raw/master/img/screenshots.jpg?raw=true" width="80%"/>
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).
<img src="https://code.freedombone.net/bashrc/epicyon/raw/main/img/screenshot_light.jpg" width="80%"/>
## Package Dependencies
@@ -26,7 +28,7 @@ Or on Debian:
``` bash
sudo apt-get -y install tor python3-pip python3-socks imagemagick \
python3-numpy python3-setuptools python3-crypto \
python3-dateutil python3-pil.imagetk certbot
python3-dateutil python3-pil.imagetk certbot nginx
sudo pip3 install commentjson beautifulsoup4 pycryptodome
```
@@ -34,6 +36,8 @@ sudo pip3 install commentjson beautifulsoup4 pycryptodome
In the most common case you'll be using systemd to set up a daemon to run the server.
The following instructions install Epicyon to the **/etc** directory. It's not essential that it be installed there, and it could be in any other preferred directory.
Add a dedicated user so that we don't have to run as root.
``` bash
@@ -53,7 +57,7 @@ Type=simple
User=epicyon
Group=epicyon
WorkingDirectory=/etc/epicyon
ExecStart=/usr/bin/python3 /etc/epicyon/epicyon.py --port 443 --proxy 7156 --domain YOUR_DOMAIN --registration open --debug
ExecStart=/usr/bin/python3 /etc/epicyon/epicyon.py --port 443 --proxy 7156 --domain YOUR_DOMAIN --registration open
Environment=USER=epicyon
Restart=always
StandardError=syslog
@@ -91,15 +95,11 @@ server {
listen 80;
listen [::]:80;
server_name YOUR_DOMAIN;
root /var/www/YOUR_DOMAIN/htdocs;
access_log /dev/null;
error_log /dev/null;
client_max_body_size 31m;
client_body_buffer_size 128k;
limit_conn conn_limit_per_ip 10;
limit_req zone=req_limit_per_ip burst=10 nodelay;
index index.html;
rewrite ^ https://$server_name$request_uri? permanent;
}
@@ -132,7 +132,6 @@ server {
access_log /dev/null;
error_log /dev/null;
root /var/www/YOUR_DOMAIN/htdocs;
index index.html;
location / {
+18
View File
@@ -34,6 +34,24 @@ To set the background image for an account:
python3 epicyon.py --nickname [nick] --domain [name] --background [image filename]
```
## Groups
Groups are a special type of account which relays any posts sent to it to its members (followers).
To create a group:
``` bash
python3 epicyon.py --addgroup nickname@domain --password [yourpassword]
```
To remove an account (be careful!):
``` bash
python3 epicyon.py --rmgroup nickname@domain
```
Setting avatar or changing background is the same as for any other account on the system. You can also moderate a group, applying filters, blocks or a perimeter, in the same way as for other acounts.
## Defining a perimeter
By default the server will federate with any others, but there may be cases where you want to limit this down to a defined set of servers within an organization.
+31
View File
@@ -26,3 +26,34 @@ When a moderator report is created the message at the top of the screen can be c
Extra emoji can be added to the *emoji* directory and you should then update the **emoji/emoji.json** file, which maps the name to the filename (without the .png extension).
## Style / Colors
There are a few predefined themes which you can change to. Move to the directory where Epicyon is installed, then you can use:
``` bash
theme default
theme light
theme hacker
theme purple
```
Alternatively if you want to create a much more customized theme then you can manually edit css files.
Create copies of the default files:
``` bash
cp epicyon-profile.css epicyon.css
cp epicyon-follow.css follow.css
cp epicyon-login.css login.css
cp epicyon-suspended.css suspended.css
```
You can then edit *epicyon.css*, *follow.css*, *login.css* and *follow.css* as needed and those files won't be overwritten if you upgrade.
*epicyon.css* is the main style for displaying profiles and timelines.
*follow.css* is used for displaying options when you select an avatar.
*login.css* defines the style of the login screen.
*suspended.css* is the style for the screen which shows that an account has been suspended.
+24 -27
View File
@@ -58,9 +58,12 @@ def createAcceptReject(baseDir: str,federationList: [], \
def createAccept(baseDir: str,federationList: [], \
nickname: str,domain: str,port: int, \
toUrl: str,ccUrl: str,httpPrefix: str, \
objectJson: {},acceptedCaps=["inbox:write","objects:read"]) -> {}:
objectJson: {}, \
acceptedCaps=["inbox:write","objects:read"]) -> {}:
# create capabilities accept
ocapNew=capabilitiesAccept(baseDir,httpPrefix,nickname,domain,port,toUrl,True,acceptedCaps)
ocapNew= \
capabilitiesAccept(baseDir,httpPrefix, \
nickname,domain,port,toUrl,True,acceptedCaps)
return createAcceptReject(baseDir,federationList, \
nickname,domain,port, \
toUrl,ccUrl,httpPrefix, \
@@ -94,17 +97,6 @@ def acceptFollow(baseDir: str,domain : str,messageJson: {}, \
if debug:
print('DEBUG: No "to" parameter in follow Accept')
return
#if len(messageJson['object']['to'])!=1:
# if debug:
# print('DEBUG: "to" does not contain a single recipient')
# print(str(messageJson['object']['to']))
# if messageJson['object'].get('object'):
# if not isinstance(messageJson['object']['object'], str):
# messageJson['object']['to']=messageJson['object']['object']
# else:
# return
# else:
# return
if debug:
print('DEBUG: follow Accept received')
thisActor=messageJson['object']['actor']
@@ -117,19 +109,16 @@ def acceptFollow(baseDir: str,domain : str,messageJson: {}, \
if debug:
print('DEBUG: domain not found in '+thisActor)
return
#if acceptedDomain != domain:
# if debug:
# print('DEBUG: domain mismatch '+acceptedDomain+' != '+domain)
# return
if not nickname:
if debug:
print('DEBUG: nickname not found in '+thisActor)
return
if acceptedPort:
if not '/'+acceptedDomain+':'+str(acceptedPort)+'/users/'+nickname in thisActor:
if '/'+acceptedDomain+':'+str(acceptedPort)+'/users/'+nickname not in thisActor:
if debug:
print('Port: '+str(acceptedPort))
print('Expected: /'+acceptedDomain+':'+str(acceptedPort)+'/users/'+nickname)
print('Expected: /'+acceptedDomain+':'+str(acceptedPort)+ \
'/users/'+nickname)
print('Actual: '+thisActor)
print('DEBUG: unrecognized actor '+thisActor)
return
@@ -167,10 +156,13 @@ def acceptFollow(baseDir: str,domain : str,messageJson: {}, \
followedNickname,followedDomainFull, \
federationList,debug):
if debug:
print('DEBUG: '+nickname+'@'+acceptedDomainFull+' followed '+followedNickname+'@'+followedDomainFull)
print('DEBUG: '+nickname+'@'+acceptedDomainFull+ \
' followed '+followedNickname+'@'+followedDomainFull)
else:
if debug:
print('DEBUG: Unable to create follow - '+nickname+'@'+acceptedDomain+' -> '+followedNickname+'@'+followedDomain)
print('DEBUG: Unable to create follow - '+ \
nickname+'@'+acceptedDomain+' -> '+ \
followedNickname+'@'+followedDomain)
def receiveAcceptReject(session,baseDir: str, \
httpPrefix: str,domain :str,port: int, \
@@ -185,20 +177,25 @@ def receiveAcceptReject(session,baseDir: str, \
if debug:
print('DEBUG: '+messageJson['type']+' has no actor')
return False
if '/users/' not in messageJson['actor'] and '/profile/' not in messageJson['actor']:
if '/users/' not in messageJson['actor'] and \
'/channel/' not in messageJson['actor'] and \
'/profile/' not in messageJson['actor']:
if debug:
print('DEBUG: "users" or "profile" missing from actor in '+messageJson['type'])
return False
print('DEBUG: "users" or "profile" missing from actor in '+ \
messageJson['type']+'. Assuming single user instance.')
domain,tempPort=getDomainFromActor(messageJson['actor'])
if not domainPermitted(domain,federationList):
if debug:
print('DEBUG: '+messageJson['type']+' from domain not permitted - '+domain)
print('DEBUG: '+messageJson['type']+ \
' from domain not permitted - '+domain)
return False
nickname=getNicknameFromActor(messageJson['actor'])
if not nickname:
# single user instance
nickname='dev'
if debug:
print('DEBUG: '+messageJson['type']+' does not contain a nickname')
return False
print('DEBUG: '+messageJson['type']+ \
' does not contain a nickname. Assuming single user instance.')
handle=nickname.lower()+'@'+domain.lower()
# receive follow accept
acceptFollow(baseDir,domain,messageJson,federationList,debug)
+60 -30
View File
@@ -6,6 +6,8 @@ __maintainer__ = "Bob Mottram"
__email__ = "bob@freedombone.net"
__status__ = "Production"
import os
import time
import json
import commentjson
from pprint import pprint
@@ -15,6 +17,9 @@ from utils import urlPermitted
from utils import getNicknameFromActor
from utils import getDomainFromActor
from utils import locatePost
from utils import getCachedPostFilename
from utils import loadJson
from utils import saveJson
from posts import sendSignedJson
from posts import getPersonBox
from session import postJson
@@ -41,7 +46,8 @@ def outboxAnnounce(baseDir: str,messageJson: {},debug: bool) -> bool:
domain,port=getDomainFromActor(messageJson['actor'])
postFilename=locatePost(baseDir,nickname,domain,messageJson['object'])
if postFilename:
updateAnnounceCollection(postFilename,messageJson['actor'],debug)
updateAnnounceCollection(baseDir,postFilename, \
messageJson['actor'],domain,debug)
return True
if messageJson['type']=='Undo':
if not isinstance(messageJson['object'], dict):
@@ -56,19 +62,32 @@ def outboxAnnounce(baseDir: str,messageJson: {},debug: bool) -> bool:
print('WARN: no nickname found in '+messageJson['actor'])
return False
domain,port=getDomainFromActor(messageJson['actor'])
postFilename=locatePost(baseDir,nickname,domain,messageJson['object']['object'])
postFilename= \
locatePost(baseDir,nickname,domain, \
messageJson['object']['object'])
if postFilename:
undoAnnounceCollectionEntry(postFilename,messageJson['actor'],debug)
undoAnnounceCollectionEntry(baseDir,postFilename, \
messageJson['actor'], \
domain,debug)
return True
return False
def undoAnnounceCollectionEntry(postFilename: str,actor: str,debug: bool) -> None:
"""Undoes an announce for a particular actor by removing it from the "shares"
collection within a post. Note that the "shares" collection has no relation
to shared items in shares.py. It's shares of posts, not shares of physical objects.
def undoAnnounceCollectionEntry(baseDir: str,postFilename: str, \
actor: str,domain: str,debug: bool) -> None:
"""Undoes an announce for a particular actor by removing it from
the "shares" collection within a post. Note that the "shares"
collection has no relation to shared items in shares.py. It's
shares of posts, not shares of physical objects.
"""
with open(postFilename, 'r') as fp:
postJsonObject=commentjson.load(fp)
postJsonObject=loadJson(postFilename)
if postJsonObject:
# remove any cached version of this announce so that the like icon is changed
nickname=getNicknameFromActor(actor)
cachedPostFilename= \
getCachedPostFilename(baseDir,nickname,domain,postJsonObject)
if os.path.isfile(cachedPostFilename):
os.remove(cachedPostFilename)
if not postJsonObject.get('type'):
return
if postJsonObject['type']!='Create':
@@ -102,17 +121,27 @@ def undoAnnounceCollectionEntry(postFilename: str,actor: str,debug: bool) -> Non
print('DEBUG: shares (announcements) was removed from post')
del postJsonObject['object']['shares']
else:
postJsonObject['object']['shares']['totalItems']=len(postJsonObject['object']['shares']['items'])
with open(postFilename, 'w') as fp:
commentjson.dump(postJsonObject, fp, indent=4, sort_keys=True)
postJsonObject['object']['shares']['totalItems']= \
len(postJsonObject['object']['shares']['items'])
saveJson(postJsonObject,postFilename)
def updateAnnounceCollection(postFilename: str,actor: str,debug: bool) -> None:
def updateAnnounceCollection(baseDir: str,postFilename: str, \
actor: str,domain: str,debug: bool) -> None:
"""Updates the announcements collection within a post
Confusingly this is known as "shares", but isn't the same as shared items within shares.py
Confusingly this is known as "shares", but isn't the
same as shared items within shares.py
It's shares of posts, not shares of physical objects.
"""
with open(postFilename, 'r') as fp:
postJsonObject=commentjson.load(fp)
postJsonObject=loadJson(postFilename)
if postJsonObject:
# remove any cached version of this announce so that the like
# icon is changed
nickname=getNicknameFromActor(actor)
cachedPostFilename= \
getCachedPostFilename(baseDir,nickname,domain,postJsonObject)
if os.path.isfile(cachedPostFilename):
os.remove(cachedPostFilename)
if not postJsonObject.get('object'):
if debug:
pprint(postJsonObject)
@@ -123,7 +152,8 @@ def updateAnnounceCollection(postFilename: str,actor: str,debug: bool) -> None:
postUrl=postJsonObject['id'].replace('/activity','')+'/shares'
if not postJsonObject['object'].get('shares'):
if debug:
print('DEBUG: Adding initial shares (announcements) to '+postUrl)
print('DEBUG: Adding initial shares (announcements) to '+ \
postUrl)
announcementsJson = {
"@context": "https://www.w3.org/ns/activitystreams",
'id': postUrl,
@@ -146,7 +176,8 @@ def updateAnnounceCollection(postFilename: str,actor: str,debug: bool) -> None:
'actor': actor
}
postJsonObject['object']['shares']['items'].append(newAnnounce)
postJsonObject['object']['shares']['totalItems']=len(postJsonObject['object']['shares']['items'])
postJsonObject['object']['shares']['totalItems']= \
len(postJsonObject['object']['shares']['items'])
else:
if debug:
print('DEBUG: shares (announcements) section of post has no items list')
@@ -154,8 +185,7 @@ def updateAnnounceCollection(postFilename: str,actor: str,debug: bool) -> None:
if debug:
print('DEBUG: saving post with shares (announcements) added')
pprint(postJsonObject)
with open(postFilename, 'w') as fp:
commentjson.dump(postJsonObject, fp, indent=4, sort_keys=True)
saveJson(postJsonObject,postFilename)
def announcedByPerson(postJsonObject: {}, nickname: str,domain: str) -> bool:
"""Returns True if the given post is announced by the given person
@@ -218,13 +248,14 @@ def createAnnounce(session,baseDir: str,federationList: [], \
if saveToFile:
outboxDir = createOutboxDir(nickname,domain,baseDir)
filename=outboxDir+'/'+newAnnounceId.replace('/','#')+'.json'
with open(filename, 'w') as fp:
commentjson.dump(newAnnounce, fp, indent=4, sort_keys=False)
saveJson(newAnnounce,filename)
announceNickname=None
announceDomain=None
announcePort=None
if '/users/' in objectUrl or '/profile/' in objectUrl:
if '/users/' in objectUrl or \
'/channel/' in objectUrl or \
'/profile/' in objectUrl:
announceNickname=getNicknameFromActor(objectUrl)
announceDomain,announcePort=getDomainFromActor(objectUrl)
@@ -335,7 +366,9 @@ def undoAnnounce(session,baseDir: str,federationList: [], \
announceNickname=None
announceDomain=None
announcePort=None
if '/users/' in objectUrl or '/profile/' in objectUrl:
if '/users/' in objectUrl or \
'/channel/' in objectUrl or \
'/profile/' in objectUrl:
announceNickname=getNicknameFromActor(objectUrl)
announceDomain,announcePort=getDomainFromActor(objectUrl)
@@ -424,7 +457,8 @@ def sendAnnounceViaServer(baseDir: str,session, \
statusNumber,published = getStatusNumber()
newAnnounceId= \
httpPrefix+'://'+fromDomainFull+'/users/'+fromNickname+'/statuses/'+statusNumber
httpPrefix+'://'+fromDomainFull+'/users/'+ \
fromNickname+'/statuses/'+statusNumber
newAnnounceJson = {
"@context": "https://www.w3.org/ns/activitystreams",
'actor': httpPrefix+'://'+fromDomainFull+'/users/'+fromNickname,
@@ -453,7 +487,7 @@ def sendAnnounceViaServer(baseDir: str,session, \
# get the actor inbox for the To handle
inboxUrl,pubKeyId,pubKey,fromPersonId,sharedInbox,capabilityAcquisition,avatarUrl,displayName = \
getPersonBox(baseDir,session,wfRequest,personCache, \
projectVersion,httpPrefix,fromDomain,postToBox)
projectVersion,httpPrefix,fromNickname,fromDomain,postToBox)
if not inboxUrl:
if debug:
@@ -471,10 +505,6 @@ def sendAnnounceViaServer(baseDir: str,session, \
'Authorization': authHeader}
postResult = \
postJson(session,newAnnounceJson,[],inboxUrl,headers,"inbox:write")
#if not postResult:
# if debug:
# print('DEBUG: POST announce failed for c2s to '+inboxUrl)
# return 5
if debug:
print('DEBUG: c2s POST announce success')
+6 -2
View File
@@ -17,7 +17,9 @@ def hashPassword(password: str) -> str:
"""Hash a password for storing
"""
salt = hashlib.sha256(os.urandom(60)).hexdigest().encode('ascii')
pwdhash = hashlib.pbkdf2_hmac('sha512', password.encode('utf-8'), salt, 100000)
pwdhash = hashlib.pbkdf2_hmac('sha512', \
password.encode('utf-8'), \
salt, 100000)
pwdhash = binascii.hexlify(pwdhash)
return (salt + pwdhash).decode('ascii')
@@ -46,7 +48,9 @@ def authorizeBasic(baseDir: str,path: str,authHeader: str,debug: bool) -> bool:
if debug:
print('DEBUG: Authorixation header does not contain a space character')
return False
if '/users/' not in path and '/profile/' not in path:
if '/users/' not in path and \
'/channel/' not in path and \
'/profile/' not in path:
if debug:
print('DEBUG: Path for Authorization does not contain a user')
return False
+11 -12
View File
@@ -7,6 +7,7 @@ __email__ = "bob@freedombone.net"
__status__ = "Production"
import json
import time
import commentjson
import os
from webfinger import webfingerHandle
@@ -15,6 +16,8 @@ from posts import getPersonBox
from session import postJson
from utils import getNicknameFromActor
from utils import getDomainFromActor
from utils import loadJson
from utils import saveJson
def setAvailability(baseDir: str,nickname: str,domain: str, \
status: str) -> bool:
@@ -26,11 +29,10 @@ def setAvailability(baseDir: str,nickname: str,domain: str, \
actorFilename=baseDir+'/accounts/'+nickname+'@'+domain+'.json'
if not os.path.isfile(actorFilename):
return False
with open(actorFilename, 'r') as fp:
actorJson=commentjson.load(fp)
actorJson=loadJson(actorFilename)
if actorJson:
actorJson['availability']=status
with open(actorFilename, 'w') as fp:
commentjson.dump(actorJson, fp, indent=4, sort_keys=False)
saveJson(actorJson,actorFilename)
return True
def getAvailability(baseDir: str,nickname: str,domain: str) -> str:
@@ -39,14 +41,15 @@ def getAvailability(baseDir: str,nickname: str,domain: str) -> str:
actorFilename=baseDir+'/accounts/'+nickname+'@'+domain+'.json'
if not os.path.isfile(actorFilename):
return False
with open(actorFilename, 'r') as fp:
actorJson=commentjson.load(fp)
actorJson=loadJson(actorFilename)
if actorJson:
if not actorJson.get('availability'):
return None
return actorJson['availability']
return None
def outboxAvailability(baseDir: str,nickname: str,messageJson: {},debug: bool) -> bool:
def outboxAvailability(baseDir: str,nickname: str,messageJson: {}, \
debug: bool) -> bool:
"""Handles receiving an availability update
"""
if not messageJson.get('type'):
@@ -113,7 +116,7 @@ def sendAvailabilityViaServer(baseDir: str,session, \
# get the actor inbox for the To handle
inboxUrl,pubKeyId,pubKey,fromPersonId,sharedInbox,capabilityAcquisition,avatarUrl,displayName = \
getPersonBox(baseDir,session,wfRequest,personCache, \
projectVersion,httpPrefix,domain,postToBox)
projectVersion,httpPrefix,nickname,domain,postToBox)
if not inboxUrl:
if debug:
@@ -131,10 +134,6 @@ def sendAvailabilityViaServer(baseDir: str,session, \
'Authorization': authHeader}
postResult = \
postJson(session,newAvailabilityJson,[],inboxUrl,headers,"inbox:write")
#if not postResult:
# if debug:
# print('DEBUG: POST announce failed for c2s to '+inboxUrl)
# return 5
if debug:
print('DEBUG: c2s POST availability success')
+23 -20
View File
@@ -137,11 +137,13 @@ def isBlocked(baseDir: str,nickname: str,domain: str, \
blockHandle=blockNickname+'@'+blockDomain
if blockHandle in open(globalBlockingFilename).read():
return True
allowFilename=baseDir+'/accounts/'+nickname+'@'+domain+'/allowedinstances.txt'
allowFilename= \
baseDir+'/accounts/'+nickname+'@'+domain+'/allowedinstances.txt'
if os.path.isfile(allowFilename):
if blockDomain not in open(allowFilename).read():
return True
blockingFilename=baseDir+'/accounts/'+nickname+'@'+domain+'/blocking.txt'
blockingFilename= \
baseDir+'/accounts/'+nickname+'@'+domain+'/blocking.txt'
if os.path.isfile(blockingFilename):
if '*@'+blockDomain in open(blockingFilename).read():
return True
@@ -168,8 +170,9 @@ def sendBlockViaServer(baseDir: str,session, \
if ':' not in fromDomain:
fromDomainFull=fromDomain+':'+str(fromPort)
toUrl = 'https://www.w3.org/ns/activitystreams#Public'
ccUrl = httpPrefix + '://'+fromDomainFull+'/users/'+fromNickname+'/followers'
toUrl= 'https://www.w3.org/ns/activitystreams#Public'
ccUrl= \
httpPrefix + '://'+fromDomainFull+'/users/'+fromNickname+'/followers'
blockActor=httpPrefix+'://'+fromDomainFull+'/users/'+fromNickname
newBlockJson = {
@@ -196,7 +199,8 @@ def sendBlockViaServer(baseDir: str,session, \
# get the actor inbox for the To handle
inboxUrl,pubKeyId,pubKey,fromPersonId,sharedInbox,capabilityAcquisition,avatarUrl,displayName = \
getPersonBox(baseDir,session,wfRequest,personCache, \
projectVersion,httpPrefix,fromDomain,postToBox)
projectVersion,httpPrefix,fromNickname, \
fromDomain,postToBox)
if not inboxUrl:
if debug:
@@ -214,10 +218,6 @@ def sendBlockViaServer(baseDir: str,session, \
'Authorization': authHeader}
postResult = \
postJson(session,newBlockJson,[],inboxUrl,headers,"inbox:write")
#if not postResult:
# if debug:
# print('DEBUG: POST announce failed for c2s to '+inboxUrl)
# return 5
if debug:
print('DEBUG: c2s POST block success')
@@ -242,8 +242,9 @@ def sendUndoBlockViaServer(baseDir: str,session, \
if ':' not in fromDomain:
fromDomainFull=fromDomain+':'+str(fromPort)
toUrl = 'https://www.w3.org/ns/activitystreams#Public'
ccUrl = httpPrefix + '://'+fromDomainFull+'/users/'+fromNickname+'/followers'
toUrl= 'https://www.w3.org/ns/activitystreams#Public'
ccUrl= \
httpPrefix + '://'+fromDomainFull+'/users/'+fromNickname+'/followers'
blockActor=httpPrefix+'://'+fromDomainFull+'/users/'+fromNickname
newBlockJson = {
@@ -262,8 +263,9 @@ def sendUndoBlockViaServer(baseDir: str,session, \
handle=httpPrefix+'://'+fromDomainFull+'/@'+fromNickname
# lookup the inbox for the To handle
wfRequest = webfingerHandle(session,handle,httpPrefix,cachedWebfingers, \
fromDomain,projectVersion)
wfRequest= \
webfingerHandle(session,handle,httpPrefix,cachedWebfingers, \
fromDomain,projectVersion)
if not wfRequest:
if debug:
print('DEBUG: announce webfinger failed for '+handle)
@@ -274,7 +276,8 @@ def sendUndoBlockViaServer(baseDir: str,session, \
# get the actor inbox for the To handle
inboxUrl,pubKeyId,pubKey,fromPersonId,sharedInbox,capabilityAcquisition,avatarUrl,displayName = \
getPersonBox(baseDir,session,wfRequest,personCache, \
projectVersion,httpPrefix,fromDomain,postToBox)
projectVersion,httpPrefix,fromNickname, \
fromDomain,postToBox)
if not inboxUrl:
if debug:
@@ -292,10 +295,6 @@ def sendUndoBlockViaServer(baseDir: str,session, \
'Authorization': authHeader}
postResult = \
postJson(session,newBlockJson,[],inboxUrl,headers,"inbox:write")
#if not postResult:
# if debug:
# print('DEBUG: POST announce failed for c2s to '+inboxUrl)
# return 5
if debug:
print('DEBUG: c2s POST block success')
@@ -331,7 +330,9 @@ def outboxBlock(baseDir: str,httpPrefix: str, \
if debug:
print('DEBUG: c2s block object is not a status')
return
if '/users/' not in messageId and '/profile/' not in messageId:
if '/users/' not in messageId and \
'/channel/' not in messageId and \
'/profile/' not in messageId:
if debug:
print('DEBUG: c2s block object has no nickname')
return
@@ -406,7 +407,9 @@ def outboxUndoBlock(baseDir: str,httpPrefix: str, \
if debug:
print('DEBUG: c2s undo block object is not a status')
return
if '/users/' not in messageId and '/profile/' not in messageId:
if '/users/' not in messageId and \
'/channel/' not in messageId and \
'/profile/' not in messageId:
if debug:
print('DEBUG: c2s undo block object has no nickname')
return
+5 -10
View File
@@ -10,7 +10,9 @@ import os
import time
import datetime
import commentjson
from utils import loadJson
from utils import saveJson
def storePersonInCache(baseDir: str,personUrl: str,personJson: {},personCache: {}) -> None:
"""Store an actor in the cache
"""
@@ -26,8 +28,7 @@ def storePersonInCache(baseDir: str,personUrl: str,personJson: {},personCache: {
if os.path.isdir(baseDir+'/cache/actors'):
cacheFilename=baseDir+'/cache/actors/'+personUrl.replace('/','#')+'.json'
if not os.path.isfile(cacheFilename):
with open(cacheFilename, 'w') as fp:
commentjson.dump(personJson, fp, indent=4, sort_keys=False)
saveJson(personJson,cacheFilename)
def getPersonFromCache(baseDir: str,personUrl: str,personCache: {}) -> {}:
"""Get an actor from the cache
@@ -37,13 +38,7 @@ def getPersonFromCache(baseDir: str,personUrl: str,personCache: {}) -> {}:
if not personCache.get(personUrl):
cacheFilename=baseDir+'/cache/actors/'+personUrl.replace('/','#')+'.json'
if os.path.isfile(cacheFilename):
personJson=None
try:
with open(cacheFilename, 'r') as fp:
personJson=commentjson.load(fp)
except Exception as e:
print('ERROR: unable to load actor from cache '+cacheFilename)
print(e)
personJson=loadJson(cacheFilename)
if personJson:
storePersonInCache(baseDir,personUrl,personJson,personCache)
loadedFromFile=True
+13 -17
View File
@@ -14,6 +14,8 @@ import commentjson
from auth import createPassword
from utils import getNicknameFromActor
from utils import getDomainFromActor
from utils import loadJson
from utils import saveJson
def getOcapFilename(baseDir :str,nickname: str,domain: str,actor :str,subdir: str) -> str:
"""Returns the filename for a particular capability accepted or granted
@@ -127,8 +129,7 @@ def capabilitiesAccept(baseDir: str,httpPrefix: str, \
# if the capability already exists then load it from file
if os.path.isfile(ocapFilename):
with open(ocapFilename, 'r') as fp:
ocapAccept=commentjson.load(fp)
ocapAccept=loadJson(ocapFilename)
# otherwise create a new capability
if not ocapAccept:
acceptedActorNickname=getNicknameFromActor(acceptedActor)
@@ -152,8 +153,7 @@ def capabilitiesAccept(baseDir: str,httpPrefix: str, \
ocapAccept['actor']=httpPrefix+"://"+fullDomain+'/users/'+nickname
if saveToFile:
with open(ocapFilename, 'w') as fp:
commentjson.dump(ocapAccept, fp, indent=4, sort_keys=False)
saveJson(ocapAccept,ocapFilename)
return ocapAccept
def capabilitiesGrantedSave(baseDir :str,nickname :str,domain :str,ocap: {}) -> bool:
@@ -165,8 +165,7 @@ def capabilitiesGrantedSave(baseDir :str,nickname :str,domain :str,ocap: {}) ->
ocapFilename=getOcapFilename(baseDir,nickname,domain,ocap['actor'],'granted')
if not ocapFilename:
return False
with open(ocapFilename, 'w') as fp:
commentjson.dump(ocap, fp, indent=4, sort_keys=False)
saveJson(ocap,ocapFilename)
return True
def capabilitiesUpdate(baseDir: str,httpPrefix: str, \
@@ -208,8 +207,7 @@ def capabilitiesUpdate(baseDir: str,httpPrefix: str, \
}
# read the existing capability
with open(ocapFilename, 'r') as fp:
ocapJson=commentjson.load(fp)
ocapJson=loadJson(ocapFilename)
# set the new capabilities list. eg. ["inbox:write","objects:read"]
ocapJson['capability']=updateCaps
@@ -228,9 +226,8 @@ def capabilitiesUpdate(baseDir: str,httpPrefix: str, \
ocapUpdate['object']=ocapJson
# save it again
with open(ocapFilename, 'w') as fp:
commentjson.dump(ocapJson, fp, indent=4, sort_keys=False)
saveJson(ocapJson,ocapFilename)
return ocapUpdate
def capabilitiesReceiveUpdate(baseDir :str, \
@@ -251,12 +248,11 @@ def capabilitiesReceiveUpdate(baseDir :str, \
print(ocapFilename)
return False
with open(ocapFilename, 'r') as fp:
ocapJson=commentjson.load(fp)
ocapJson=loadJson(ocapFilename)
if ocapJson:
ocapJson['id']=newCapabilitiesId
ocapJson['capability']=capabilityList
with open(ocapFilename, 'w') as fp:
commentjson.dump(ocapJson, fp, indent=4, sort_keys=False)
return True
return saveJson(ocapJson,ocapFilename)
return False
+2 -4
View File
@@ -38,7 +38,7 @@ In cases where criticism of ideology or culture remains on-topic, respectfully d
## No proprietary software
This is a Free Software project and there is no intention to support or endorse any software which is proprietary, including that which may be running on client devices. For example, supporting iThings or Windows users is out of scope of the project. It's possible that Epicyon may work with those systems, but if there are problems it's not within the scope of this project to resolve compatibility issues with proprietary browsers or platforms.
This is a Free Software project and there is no intention to support or endorse any software which is proprietary, including that which may be running on client devices or corporate silo systems. For example, supporting iThings or Windows users is out of scope of the project. So too would be integration with Twitter or Google's sevices.
## Raising concerns
@@ -46,9 +46,7 @@ If you're raising concerns about something or someone, there must be demonstrabl
This is not a big project and so there is no division of labor or special enforcement committee or bureaucratic process.
If your concern is something which is suitable for public discussion then raise it in one of the chat rooms mentioned above. Be mindful to do so in a polite and considerate manner. Hostile communication towards anyone raising concerns publicly will be considered a code of conduct violation.
Private complaints should be sent to bob@freedombone.net, preferably via XMPP/Conversations with OMEMO enabled but you can also use the same address for email correspondence.
Complaints should be either reported in the Matrix chat room **#epicyon:matrix.freedombone.net** or sent to bob@freedombone.net, preferably via XMPP/Conversations with OMEMO enabled but you can also use the same address for email correspondence.
## In case of violations
+12 -10
View File
@@ -7,8 +7,11 @@ __email__ = "bob@freedombone.net"
__status__ = "Production"
import os
import time
import json
import commentjson
from utils import loadJson
from utils import saveJson
def createConfig(baseDir: str) -> None:
"""Creates a configuration file
@@ -18,27 +21,26 @@ def createConfig(baseDir: str) -> None:
return
configJson = {
}
with open(configFilename, 'w') as fp:
commentjson.dump(configJson, fp, indent=4, sort_keys=True)
saveJson(configJson,configFilename)
def setConfigParam(baseDir: str, variableName: str, variableValue) -> None:
"""Sets a configuration value
"""
createConfig(baseDir)
configFilename=baseDir+'/config.json'
with open(configFilename, 'r') as fp:
configJson=commentjson.load(fp)
configJson={}
if os.path.isfile(configFilename):
configJson=loadJson(configFilename)
configJson[variableName]=variableValue
with open(configFilename, 'w') as fp:
commentjson.dump(configJson, fp, indent=4, sort_keys=True)
saveJson(configJson,configFilename)
def getConfigParam(baseDir: str, variableName: str):
"""Gets a configuration value
"""
createConfig(baseDir)
configFilename=baseDir+'/config.json'
with open(configFilename, 'r') as fp:
configJson=commentjson.load(fp)
if configJson.get(variableName):
return configJson[variableName]
configJson=loadJson(configFilename)
if configJson:
if configJson.get(variableName):
return configJson[variableName]
return None
+154 -46
View File
@@ -7,9 +7,35 @@ __email__ = "bob@freedombone.net"
__status__ = "Production"
import os
import time
import commentjson
from shutil import copyfile
def replaceEmojiFromTags(content: str,tag: [],messageType: str) -> str:
"""Uses the tags to replace :emoji: with html image markup
"""
for tagItem in tag:
if not tagItem.get('type'):
continue
if tagItem['type']!='Emoji':
continue
if not tagItem.get('name'):
continue
if not tagItem.get('icon'):
continue
if not tagItem['icon'].get('url'):
continue
if tagItem['name'] not in content:
continue
htmlClass='emoji'
if messageType=='post header':
htmlClass='emojiheader'
if messageType=='profile':
htmlClass='emojiprofile'
emojiHtml="<img src=\""+tagItem['icon']['url']+"\" alt=\""+tagItem['name'].replace(':','')+"\" align=\"middle\" class=\""+htmlClass+"\"/>"
content=content.replace(tagItem['name'],emojiHtml)
return content
def addMusicTag(content: str,tag: str) -> str:
"""If a music link is found then ensure that the post is tagged appropriately
"""
@@ -25,7 +51,7 @@ def addMusicTag(content: str,tag: str) -> str:
break
if not musicSiteFound:
return content
return content+' '+tag+' '
return ':music: '+content+' '+tag+' '
def addWebLinks(content: str) -> str:
"""Adds markup for web links
@@ -33,10 +59,13 @@ def addWebLinks(content: str) -> str:
if not ('https://' in content or 'http://' in content):
return content
words=content.replace('\n',' --linebreak--').split(' ')
maxLinkLength=40
words=content.replace('\n',' --linebreak-- ').split(' ')
replaceDict={}
for w in words:
if w.startswith('https://') or w.startswith('http://'):
if w.startswith('https://') or \
w.startswith('http://') or \
w.startswith('dat://'):
if w.endswith('.') or w.endswith(';'):
w=w[:-1]
markup='<a href="'+w+'" rel="nofollow noopener" target="_blank">'
@@ -44,11 +73,19 @@ def addWebLinks(content: str) -> str:
markup+='<span class="invisible">https://</span>'
elif w.startswith('http://'):
markup+='<span class="invisible">http://</span>'
markup+='<span class="ellipsis">'+w.replace('https://','').replace('http://','')+'</span></a>'
elif w.startswith('dat://'):
markup+='<span class="invisible">dat://</span>'
linkText=w.replace('https://','').replace('http://','').replace('dat://','')
# prevent links from becoming too long
if len(linkText)>maxLinkLength:
markup+='<span class="ellipsis">'+linkText[:maxLinkLength]+'</span>'
markup+='<span class="invisible">'+linkText[maxLinkLength:]+'</span></a>'
else:
markup+='<span class="ellipsis">'+linkText+'</span></a>'
replaceDict[w]=markup
for url,markup in replaceDict.items():
content=content.replace(url,markup)
content=content.replace(' --linebreak--','<br>')
content=content.replace(' --linebreak-- ','<br>')
return content
def validHashTag(hashtag: str) -> bool:
@@ -63,10 +100,6 @@ def addHashTags(wordStr: str,httpPrefix: str,domain: str,replaceHashTags: {},pos
"""Detects hashtags and adds them to the replacements dict
Also updates the hashtags list to be added to the post
"""
if not wordStr.startswith('#'):
return False
if len(wordStr)<2:
return False
if replaceHashTags.get(wordStr):
return True
hashtag=wordStr[1:]
@@ -119,8 +152,10 @@ def addEmoji(baseDir: str,wordStr: str,httpPrefix: str,domain: str,replaceEmoji:
return False
if replaceEmoji.get(wordStr):
return True
# remove leading and trailing : characters
emoji=wordStr[1:]
emoji=emoji[:-1]
# is the text of the emoji valid?
if not validHashTag(emoji):
return False
if not emojiDict.get(emoji):
@@ -143,10 +178,6 @@ def addEmoji(baseDir: str,wordStr: str,httpPrefix: str,domain: str,replaceEmoji:
def addMention(wordStr: str,httpPrefix: str,following: str,replaceMentions: {},recipients: [],tags: {}) -> bool:
"""Detects mentions and adds them to the replacements dict and recipients list
"""
if not wordStr.startswith('@'):
return False
if len(wordStr)<2:
return False
possibleHandle=wordStr[1:]
# @nick
if following and '@' not in possibleHandle:
@@ -167,8 +198,16 @@ def addMention(wordStr: str,httpPrefix: str,following: str,replaceMentions: {},r
replaceMentions[wordStr]="<span class=\"h-card\"><a href=\""+httpPrefix+"://"+replaceDomain+"/@"+possibleNickname+"\" class=\"u-url mention\">@<span>"+possibleNickname+"</span></a></span>"
return True
return False
possibleNickname=None
possibleDomain=None
if '@' not in possibleHandle:
return False
possibleNickname=possibleHandle.split('@')[0]
if not possibleNickname:
return False
possibleDomain=possibleHandle.split('@')[1].strip('\n')
if not possibleDomain:
return False
if following:
for follow in following:
if follow.replace('\n','')!=possibleHandle:
@@ -184,29 +223,67 @@ def addMention(wordStr: str,httpPrefix: str,following: str,replaceMentions: {},r
replaceMentions[wordStr]="<span class=\"h-card\"><a href=\""+httpPrefix+"://"+possibleDomain+"/@"+possibleNickname+"\" class=\"u-url mention\">@<span>"+possibleNickname+"</span></a></span>"
return True
# @nick@domain
if '@' in possibleHandle:
if not (possibleDomain=='localhost' or '.' in possibleDomain):
return False
recipientActor=httpPrefix+"://"+possibleDomain+"/users/"+possibleNickname
if recipientActor not in recipients:
recipients.append(recipientActor)
tags[wordStr]={
'href': recipientActor,
'name': wordStr,
'type': 'Mention'
}
replaceMentions[wordStr]="<span class=\"h-card\"><a href=\""+httpPrefix+"://"+possibleDomain+"/@"+possibleNickname+"\" class=\"u-url mention\">@<span>"+possibleNickname+"</span></a></span>"
return True
return False
if not (possibleDomain=='localhost' or '.' in possibleDomain):
return False
recipientActor=httpPrefix+"://"+possibleDomain+"/users/"+possibleNickname
if recipientActor not in recipients:
recipients.append(recipientActor)
tags[wordStr]={
'href': recipientActor,
'name': wordStr,
'type': 'Mention'
}
replaceMentions[wordStr]="<span class=\"h-card\"><a href=\""+httpPrefix+"://"+possibleDomain+"/@"+possibleNickname+"\" class=\"u-url mention\">@<span>"+possibleNickname+"</span></a></span>"
return True
def removeLongWords(content: str,maxWordLength: int,longWordsList: []) -> str:
"""Breaks up long words so that on mobile screens this doesn't disrupt the layout
"""
words=content.split(' ')
if not longWordsList:
longWordsList=[]
for wordStr in words:
if len(wordStr)>maxWordLength:
if wordStr not in longWordsList:
longWordsList.append(wordStr)
for wordStr in longWordsList:
if wordStr.startswith('<'):
continue
if '=\"' in wordStr:
continue
if '@' in wordStr:
if '@@' not in wordStr:
continue
if 'https:' in wordStr:
continue
elif 'http:' in wordStr:
continue
elif 'dat:' in wordStr:
continue
if '<' in wordStr:
wordStr=wordStr.split('<',1)[0]
if '/' in wordStr:
continue
if len(wordStr[maxWordLength:])<maxWordLength:
content= \
content.replace(wordStr, \
wordStr[:maxWordLength]+'\n'+ \
wordStr[maxWordLength:])
else:
content= \
content.replace(wordStr, \
wordStr[:maxWordLength])
return content
def addHtmlTags(baseDir: str,httpPrefix: str, \
nickname: str,domain: str,content: str, \
recipients: [],hashtags: {}) -> str:
recipients: [],hashtags: {},isJsonContent=False) -> str:
""" Replaces plaintext mentions such as @nick@domain into html
by matching against known following accounts
"""
if content.startswith('<p>'):
return content
maxWordLength=40
content=content.replace('\n',' --linebreak-- ')
content=addMusicTag(content,'nowplaying')
words=content.replace(',',' ').replace(';',' ').split(' ')
@@ -236,34 +313,64 @@ def addHtmlTags(baseDir: str,httpPrefix: str, \
# read the following list so that we can detect just @nick
# in addition to @nick@domain
following=None
if os.path.isfile(followingFilename):
with open(followingFilename, "r") as f:
following = f.readlines()
if '@' in words:
if os.path.isfile(followingFilename):
with open(followingFilename, "r") as f:
following = f.readlines()
# extract mentions and tags from words
longWordsList=[]
for wordStr in words:
if addMention(wordStr,httpPrefix,following,replaceMentions,recipients,hashtags):
continue
if addHashTags(wordStr,httpPrefix,originalDomain,replaceHashTags,hashtags):
continue
if len(wordStr)>2 and wordStr.startswith(':') and wordStr.endswith(':') and not emojiDict:
print('Loading emoji lookup')
if not os.path.isfile(baseDir+'/emoji/emoji.json'):
copyfile(baseDir+'/emoji/default_emoji.json',baseDir+'/emoji/emoji.json')
with open(baseDir+'/emoji/emoji.json', 'r') as fp:
emojiDict=commentjson.load(fp)
wordLen=len(wordStr)
if wordLen>2:
if wordLen>maxWordLength:
longWordsList.append(wordStr)
firstChar=wordStr[0]
if firstChar=='@':
if addMention(wordStr,httpPrefix,following,replaceMentions,recipients,hashtags):
continue
elif firstChar=='#':
if addHashTags(wordStr,httpPrefix,originalDomain,replaceHashTags,hashtags):
continue
elif ':' in wordStr:
#print('TAG: emoji located - '+wordStr)
wordStr2=wordStr.split(':')[1]
if not emojiDict:
# emoji.json is generated so that it can be customized and the changes
# will be retained even if default_emoji.json is subsequently updated
if not os.path.isfile(baseDir+'/emoji/emoji.json'):
copyfile(baseDir+'/emoji/default_emoji.json',baseDir+'/emoji/emoji.json')
emojiDictCtr=0
while not emojiDict and emojiDictCtr<5:
if emojiDictCtr>0:
print('Retry emoji load '+baseDir+'/emoji/emoji.json')
try:
with open(baseDir+'/emoji/emoji.json', 'r') as fp:
emojiDict=commentjson.load(fp)
if emojiDictCtr>0:
print('emojiDict loaded on try '+str(emojiDictCtr))
break
except:
print('WARN: commentjson exception addHtmlTags')
print('Failed to load emoji (try '+str(emojiDictCtr)+'): '+baseDir+'/emoji/emoji.json')
time.sleep(1)
emojiDictCtr+=1
addEmoji(baseDir,wordStr,httpPrefix,originalDomain,replaceEmoji,hashtags,emojiDict)
#print('TAG: looking up emoji for :'+wordStr2+':')
addEmoji(baseDir,':'+wordStr2+':',httpPrefix,originalDomain,replaceEmoji,hashtags,emojiDict)
# replace words with their html versions
for wordStr,replaceStr in replaceMentions.items():
content=content.replace(wordStr,replaceStr)
for wordStr,replaceStr in replaceHashTags.items():
content=content.replace(wordStr,replaceStr)
for wordStr,replaceStr in replaceEmoji.items():
content=content.replace(wordStr,replaceStr)
if not isJsonContent:
for wordStr,replaceStr in replaceEmoji.items():
content=content.replace(wordStr,replaceStr)
content=addWebLinks(content)
if longWordsList:
content=removeLongWords(content,maxWordLength,longWordsList)
content=content.replace(' --linebreak-- ','</p><p>')
return '<p>'+content+'</p>'
@@ -280,5 +387,6 @@ def getMentionsFromHtml(htmlText: str,matchStr="<span class=\"h-card\"><a href=\
actorStr=mentionStr.split('"')[0]
if actorStr.startswith('http') or \
actorStr.startswith('dat:'):
mentions.append(actorStr)
if actorStr not in mentions:
mentions.append(actorStr)
return mentions
+1603 -629
View File
File diff suppressed because it is too large. Load diff
+8 -4
View File
@@ -20,18 +20,22 @@
<p>Content found to be non-compliant with this policy will be removed and any accounts on this instance producing, repeating or linking to such content will be deleted typically without prior notification.</p>
<h3>Federation Policy</h3>
<p>In a proactive effort to avoid the classic fate of <i>"embrace, extend, extinguish"</i> this system will block any instance launched, acquired or funded by Alphabet, Facebook, Twitter, Microsoft, Apple, Amazon, Elsevier or other monopolistic Silicon Valley companies.</p>
<p>This system will not federate with instances whose moderation policy is incompatible with the content policy described above. If an instance lacks a moderation policy, or refuses to enforce one, it will be assumed to be incompatible.</p>
<h3>Commercial Use</h3>
<p>Commercial use of original content on this instance is strictly forbidden without the prior written permission of individual account holders. The instance administrator does not hold copyright on any original content posted by account holders. Publication or federation of content does not imply permission for commercial use.</p>
<p>Commercial use includes the harvesting of data to create products which are then sold, such as statistics, business reports or machine learning models.</p>
<h3>Federation with Monopolies</h3>
In a proactive effort to avoid the classic fate of <i>"embrace, extend, extinguish"</i> this system will block any instance launched, acquired or funded by Alphabet, Facebook, Twitter, Microsoft, Apple, Amazon, Elsevier or other monopolistic Silicon Valley companies.
<h3>Copyrights</h3>
<p>Epicyon is licensed under <a href="https://www.gnu.org/licenses/agpl-3.0-standalone.html">GNU AGPL version 3</a>
<p>Emojis designed by <a href="https://openmoji.org">OpenMoji</a> – the open-source emoji and icon project. License: <a href="https://creativecommons.org/licenses/by-sa/4.0">CC BY-SA 4.0</a></p>
<p>Blob Cat Emoji and Meowmoji were made by Nitro Blob Hub, licensed under <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0</a>.</p>
+8 -3
View File
@@ -68,7 +68,9 @@ def createDelete(session,baseDir: str,federationList: [], \
deleteNickname=None
deleteDomain=None
deletePort=None
if '/users/' in objectUrl or '/profile/' in objectUrl:
if '/users/' in objectUrl or \
'/channel/' in objectUrl or \
'/profile/' in objectUrl:
deleteNickname=getNicknameFromActor(objectUrl)
deleteDomain,deletePort=getDomainFromActor(objectUrl)
@@ -127,7 +129,8 @@ def sendDeleteViaServer(baseDir: str,session, \
# get the actor inbox for the To handle
inboxUrl,pubKeyId,pubKey,fromPersonId,sharedInbox,capabilityAcquisition,avatarUrl,displayName = \
getPersonBox(baseDir,session,wfRequest,personCache, \
projectVersion,httpPrefix,fromDomain,postToBox)
projectVersion,httpPrefix,fromNickname, \
fromDomain,postToBox)
if not inboxUrl:
if debug:
@@ -241,7 +244,9 @@ def outboxDelete(baseDir: str,httpPrefix: str, \
if debug:
print('DEBUG: c2s delete object is not a status')
return
if '/users/' not in messageId and '/profile/' not in messageId:
if '/users/' not in messageId and \
'/channel/' not in messageId and \
'/profile/' not in messageId:
if debug:
print('DEBUG: c2s delete object has no nickname')
return
+73
View File
@@ -0,0 +1,73 @@
__filename__ = "donate.py"
__author__ = "Bob Mottram"
__license__ = "AGPL3+"
__version__ = "1.0.0"
__maintainer__ = "Bob Mottram"
__email__ = "bob@freedombone.net"
__status__ = "Production"
import json
def getDonationTypes() -> str:
return ('patreon','paypal','gofundme','liberapay', \
'kickstarter','indiegogo','crowdsupply', \
'subscribestar')
def getDonationUrl(actorJson: {}) -> str:
"""Returns a link used for donations
"""
if not actorJson.get('attachment'):
return ''
donationType=getDonationTypes()
for propertyValue in actorJson['attachment']:
if not propertyValue.get('name'):
continue
if propertyValue['name'].lower() not in donationType:
continue
if not propertyValue.get('type'):
continue
if not propertyValue.get('value'):
continue
if propertyValue['type']!='PropertyValue':
continue
if '<a href="' not in propertyValue['value']:
continue
donateUrl=propertyValue['value'].split('<a href="')[1]
if '"' in donateUrl:
return donateUrl.split('"')[0]
return ''
def setDonationUrl(actorJson: {},donateUrl: str) -> None:
"""Sets a link used for donations
"""
if not actorJson.get('attachment'):
actorJson['attachment']=[]
donationType=getDonationTypes()
donateName=None
for paymentService in donationType:
if paymentService in donateUrl:
donateName=paymentService
if not donateName:
return
donateValue='<a href="'+donateUrl+'" rel="me nofollow noopener noreferrer" target="_blank">'+donateUrl+'</a>'
for propertyValue in actorJson['attachment']:
if not propertyValue.get('name'):
continue
if not propertyValue.get('type'):
continue
if propertyValue['name'].lower()!=donateName:
continue
if propertyValue['type']!='PropertyValue':
continue
propertyValue['value']=donateValue
return
newDonate={
"name": donateName,
"type": "PropertyValue",
"value": donateValue
}
actorJson['attachment'].append(newDonate)
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

+189 -2
View File
@@ -437,7 +437,6 @@
"tent": "26FA",
"thermometer": "1F321",
"thinking": "1F914",
"thinkingstallman": "7B2F1",
"tick": "2714",
"tiger": "1F405",
"tomato": "1F345",
@@ -530,8 +529,11 @@
"manjaro": "manjaro",
"mint": "mint",
"ubuntu": "ubuntu",
"ubuntumate": "ubuntumate",
"kubuntu": "kubuntu",
"opensuse": "opensuse",
"arch": "arch",
"archlinux": "arch",
"debian": "debian",
"zorin": "zorin",
"solus": "solus",
@@ -543,5 +545,190 @@
"intersex": "intersex",
"lesbianflag": "lesbianflag",
"transflag": "transflag",
"transfem": "transfem"
"transfem": "transfem",
"trebuchet": "trebuchet",
"molotov": "molotov",
"walkdog": "E182",
"signpost": "E094",
"parents": "E081",
"redcross": "E090",
"firehazard": "E089",
"firstaid": "E140",
"download": "E252",
"upload": "E251",
"wifi": "E254",
"lighter": "E143",
"power": "E097",
"sleep": "1F4A4",
"goose": "1F9A2",
"shower": "1F6BF",
"shopping": "1F6D2",
"maple": "1F341",
"shamrock2": "1F340",
"shootingstar": "1F320",
"rain": "1F327",
"snow": "1F328",
"lightning2": "1F329",
"sunny": "1F324",
"free": "1F193",
"headphones": "1F3A7",
"wildcat": "wildcat",
"footprints": "1F463",
"pear": "1F350",
"snorkel": "1F93F",
"pineapple": "1F34D",
"statueliberty": "1F5FD",
"grapeheart": "grapeheart",
"firefox": "firefox",
"dove": "dove",
"unspecifiedgoose": "unspecifiedgoose",
"lesbian_heart": "lesbian_heart",
"heart_trans": "heart_trans",
"greensun": "greensun",
"calendar": "1F5D3",
"thinkpadthinking": "thinkpadthinking",
"meowflushed": "meowflushed",
"meowpeek": "meowpeek",
"meowamused": "meowamused",
"meowaww": "meowaww",
"meowkissblush": "meowkissblush",
"meowthumbsup": "meowthumbsup",
"meowthinking": "meowthinking",
"meowrollingeyes": "meowrollingeyes",
"meownervous": "meownervous",
"meowshh": "meowshh",
"meowsmilehappyeyes": "meowsmilehappyeyes",
"meowfacepalm": "meowfacepalm",
"meowmelt": "meowmelt",
"meowheart": "meowheart",
"meowsmirk": "meowsmirk",
"meowhyperthink": "meowhyperthink",
"meowuwu": "meowuwu",
"meowowo": "meowowo",
"meowthinkingcool": "meowthinkingcool",
"meowdrool": "meowdrool",
"meownauseated": "meownauseated",
"meowpopcorn": "meowpopcorn",
"meowwaitwhat": "meowwaitwhat",
"meowupset": "meowupset",
"meowtilt": "meowtilt",
"meowsleepless": "meowsleepless",
"meowtired": "meowtired",
"meowpats": "meowpats",
"meowglare": "meowglare",
"meowowoevil": "meowowoevil",
"meowpurrfecto": "meowpurrfecto",
"meowblush": "meowblush",
"meowthinkingsmirk": "meowthinkingsmirk",
"meowstop": "meowstop",
"meowsad": "meowsad",
"meowcowboy": "meowcowboy",
"meowwave": "meowwave",
"meowpolice": "meowpolice",
"meowdevil": "meowdevil",
"meowkiss": "meowkiss",
"meowpout": "meowpout",
"meowcoy": "meowcoy",
"meowcheer": "meowcheer",
"meowmeltmeltmeltmelt": "meowmeltmeltmeltmelt",
"meowsweats": "meowsweats",
"meowokhand": "meowokhand",
"meowreachrev": "meowreachrev",
"meowreach": "meowreach",
"meowopenmouth": "meowopenmouth",
"meowweary": "meowweary",
"meownomcookie": "meownomcookie",
"meowwink": "meowwink",
"meowthumbsdown": "meowthumbsdown",
"meowthinkingglare": "meowthinkingglare",
"meowscream": "meowscream",
"meowgift": "meowgift",
"meowhearteyes": "meowhearteyes",
"meowdizzy": "meowdizzy",
"meowupsidedown": "meowupsidedown",
"meownom": "meownom",
"meowneutral": "meowneutral",
"meowwaverev": "meowwaverev",
"meowsmile": "meowsmile",
"meowsleeping": "meowsleeping",
"meowhuh": "meowhuh",
"meowmelttears": "meowmelttears",
"meowsadpats": "meowsadpats",
"meowsnuggle": "meowsnuggle",
"meowcamera": "meowcamera",
"meowtongue": "meowtongue",
"meowangel": "meowangel",
"meowmeltmelt": "meowmeltmelt",
"meowmeltmeltmelt": "meowmeltmeltmelt",
"meowsob": "meowsob",
"meowdab": "meowdab",
"meowwhistle": "meowwhistle",
"meowsmileopenmouth": "meowsmileopenmouth",
"meowterrified": "meowterrified",
"meowtonguewink": "meowtonguewink",
"meowcry": "meowcry",
"meowthonkang": "meowthonkang",
"meowhearthug": "meowhearthug",
"meowcoffee": "meowcoffee",
"meowmorning": "meowmorning",
"meowevening": "meowevening",
"meowdetective": "meowdetective",
"meowxd": "meowxd",
"meowheadphones": "meowheadphones",
"meowreachsad": "meowreachsad",
"meowreachsadrev": "meowreachsadrev",
"meowthinksmart": "meowthinksmart",
"meowshrug": "meowshrug",
"meowwavepeek": "meowwavepeek",
"meowthinkingportal": "meowthinkingportal",
"meowsmilesweat": "meowsmilesweat",
"meowghostwave": "meowghostwave",
"meowmeltthumbsup": "meowmeltthumbsup",
"meowtihihi": "meowtihihi",
"meowinlove": "meowinlove",
"meowbox": "meowbox",
"meownwn": "meownwn",
"meowderpy": "meowderpy",
"blobcat": "blobcat",
"blobcathappy": "blobcathappy",
"blobcoolcat": "blobcoolcat",
"blobcatwink": "blobcatwink",
"blobcatwinktongue": "blobcatwinktongue",
"blobcatcoffee": "blobcatcoffee",
"blobcatsad": "blobcatsad",
"blobcatblep": "blobcatblep",
"blobcatevil": "blobcatevil",
"blobcataww": "blobcataww",
"blobcatpats": "blobcatpats",
"blobcatangry": "blobcatangry",
"blobcatmlem": "blobcatmlem",
"blobcatthumbsup": "blobcatthumbsup",
"blobcatthumbsdown": "blobcatthumbsdown",
"blobcatsleep": "blobcatsleep",
"blobcatblush": "blobcatblush",
"blobcatsneezing": "blobcatsneezing",
"blobcatsnuggle": "blobcatsnuggle",
"blobcathighfive": "blobcathighfive",
"blobcatheart": "blobcatheart",
"blobcatfearful": "blobcatfearful",
"blobcattilt": "blobcattilt",
"blobcatfingerguns": "blobcatfingerguns",
"blobcattea": "blobcattea",
"blobcatkissheart": "blobcatkissheart",
"blobcatshy": "blobcatshy",
"blobcathissing": "blobcathissing",
"blobcattableflip": "blobcattableflip",
"blobcathug": "blobcathug",
"blobcatlewd": "blobcatlewd",
"blobcatdab": "blobcatdab",
"blobcatcouple": "blobcatcouple",
"blobcatjava": "blobcatjava",
"blobcatunamused": "blobcatunamused",
"blobcatscared": "blobcatscared",
"blobcatmorningcoffee": "blobcatmorningcoffee",
"blobcat3c": "blobcat3c",
"blobcatbusiness": "blobcatbusiness",
"blobcatdeficit": "blobcatdeficit",
"blobcatscience": "blobcatscience",
"blobcatstop": "blobcatstop"
}
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 11 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Loaded 100 of 346 files, more files were not shown because too many files have changed in this diff. Show more