| 
									
										
										
										
											2020-04-03 16:59:12 +00:00
										 |  |  | __filename__ = "metadata.py" | 
					
						
							|  |  |  | __author__ = "Bob Mottram" | 
					
						
							|  |  |  | __license__ = "AGPL3+" | 
					
						
							| 
									
										
										
										
											2024-12-22 23:37:30 +00:00
										 |  |  | __version__ = "1.6.0" | 
					
						
							| 
									
										
										
										
											2020-04-03 16:59:12 +00:00
										 |  |  | __maintainer__ = "Bob Mottram" | 
					
						
							| 
									
										
										
										
											2021-09-10 16:14:50 +00:00
										 |  |  | __email__ = "bob@libreserver.org" | 
					
						
							| 
									
										
										
										
											2020-04-03 16:59:12 +00:00
										 |  |  | __status__ = "Production" | 
					
						
							| 
									
										
										
										
											2021-06-15 15:08:12 +00:00
										 |  |  | __module_group__ = "Metadata" | 
					
						
							| 
									
										
										
										
											2019-11-13 10:32:12 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-13 12:45:41 +00:00
										 |  |  | import os | 
					
						
							| 
									
										
										
										
											2021-12-28 14:41:10 +00:00
										 |  |  | from utils import no_of_active_accounts_monthly | 
					
						
							| 
									
										
										
										
											2023-10-02 18:56:22 +00:00
										 |  |  | from utils import no_of_accounts | 
					
						
							|  |  |  | from utils import get_status_count | 
					
						
							| 
									
										
										
										
											2021-06-05 09:22:35 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-28 17:20:43 +00:00
										 |  |  | def meta_data_node_info(base_dir: str, | 
					
						
							| 
									
										
										
										
											2022-01-03 10:27:55 +00:00
										 |  |  |                         about_url: str, | 
					
						
							|  |  |  |                         terms_of_service_url: str, | 
					
						
							| 
									
										
										
										
											2021-12-28 17:20:43 +00:00
										 |  |  |                         registration: bool, version: str, | 
					
						
							| 
									
										
										
										
											2024-05-16 10:05:14 +00:00
										 |  |  |                         show_accounts: bool, | 
					
						
							| 
									
										
										
										
											2024-06-04 18:18:02 +00:00
										 |  |  |                         domain: str, | 
					
						
							| 
									
										
										
										
											2024-06-04 18:52:03 +00:00
										 |  |  |                         instance_description_short: str, | 
					
						
							| 
									
										
										
										
											2024-06-04 18:18:02 +00:00
										 |  |  |                         instance_description: str) -> {}: | 
					
						
							|  |  |  |     """ /nodeinfo/2.2 endpoint
 | 
					
						
							| 
									
										
										
										
											2021-05-03 10:05:05 +00:00
										 |  |  |     Also see https://socialhub.activitypub.rocks/t/ | 
					
						
							|  |  |  |     fep-f1d5-nodeinfo-in-fediverse-software/1190/4 | 
					
						
							| 
									
										
										
										
											2025-05-20 09:21:35 +00:00
										 |  |  |     https://github.com/jhass/nodeinfo/blob/main/schemas/2.2/example.json | 
					
						
							| 
									
										
										
										
											2021-05-03 10:05:05 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     Note that there are security considerations with this. If an adversary | 
					
						
							|  |  |  |     sees a lot of accounts and "local" posts then the instance may be | 
					
						
							|  |  |  |     considered a higher priority target. | 
					
						
							|  |  |  |     Also exposure of the version number and number of accounts could be | 
					
						
							|  |  |  |     sensitive | 
					
						
							| 
									
										
										
										
											2019-11-13 10:32:12 +00:00
										 |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2022-05-30 15:15:17 +00:00
										 |  |  |     if show_accounts: | 
					
						
							| 
									
										
										
										
											2022-01-03 10:27:55 +00:00
										 |  |  |         active_accounts = no_of_accounts(base_dir) | 
					
						
							|  |  |  |         active_accounts_monthly = no_of_active_accounts_monthly(base_dir, 1) | 
					
						
							|  |  |  |         active_accounts_half_year = no_of_active_accounts_monthly(base_dir, 6) | 
					
						
							| 
									
										
										
										
											2023-10-02 18:56:22 +00:00
										 |  |  |         local_posts = get_status_count(base_dir) | 
					
						
							| 
									
										
										
										
											2021-05-03 10:05:05 +00:00
										 |  |  |     else: | 
					
						
							| 
									
										
										
										
											2022-01-03 10:27:55 +00:00
										 |  |  |         active_accounts = 1 | 
					
						
							|  |  |  |         active_accounts_monthly = 1 | 
					
						
							|  |  |  |         active_accounts_half_year = 1 | 
					
						
							|  |  |  |         local_posts = 1 | 
					
						
							| 
									
										
										
										
											2021-05-03 10:05:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-03 16:59:12 +00:00
										 |  |  |     nodeinfo = { | 
					
						
							| 
									
										
										
										
											2024-06-04 18:18:02 +00:00
										 |  |  |         "version": "2.2", | 
					
						
							| 
									
										
										
										
											2021-05-04 09:39:15 +00:00
										 |  |  |         'documents': { | 
					
						
							| 
									
										
										
										
											2022-01-03 10:27:55 +00:00
										 |  |  |             'about': about_url, | 
					
						
							|  |  |  |             'terms': terms_of_service_url | 
					
						
							| 
									
										
										
										
											2021-05-04 09:39:15 +00:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2024-06-04 18:18:02 +00:00
										 |  |  |         "instance": { | 
					
						
							| 
									
										
										
										
											2024-06-04 18:52:03 +00:00
										 |  |  |             "name": instance_description_short, | 
					
						
							| 
									
										
										
										
											2024-06-04 18:18:02 +00:00
										 |  |  |             "description": instance_description | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         "software": { | 
					
						
							|  |  |  |             "name": "epicyon", | 
					
						
							|  |  |  |             "repository": "https://gitlab.com/bashrc2/epicyon", | 
					
						
							|  |  |  |             "homepage": "https://gitlab.com/bashrc2/epicyon", | 
					
						
							|  |  |  |             "version": version | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         "protocols": ["activitypub"], | 
					
						
							|  |  |  |         "services": { | 
					
						
							|  |  |  |             "outbound": ["rss2.0"] | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         "openRegistrations": registration, | 
					
						
							|  |  |  |         "usage": { | 
					
						
							|  |  |  |             "localComments": 0, | 
					
						
							|  |  |  |             "localPosts": local_posts, | 
					
						
							|  |  |  |             "users": { | 
					
						
							|  |  |  |                 "activeHalfyear": active_accounts_half_year, | 
					
						
							|  |  |  |                 "activeMonth": active_accounts_monthly, | 
					
						
							|  |  |  |                 "total": active_accounts | 
					
						
							| 
									
										
										
										
											2019-11-13 10:32:12 +00:00
										 |  |  |             } | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2024-06-04 18:18:02 +00:00
										 |  |  |         "metadata": { | 
					
						
							|  |  |  |             "accountActivationRequired": False, | 
					
						
							|  |  |  |             "features": [ | 
					
						
							|  |  |  |                 "editing", | 
					
						
							|  |  |  |                 "exposable_reactions" | 
					
						
							| 
									
										
										
										
											2024-05-16 10:05:14 +00:00
										 |  |  |             ], | 
					
						
							| 
									
										
										
										
											2024-06-04 18:18:02 +00:00
										 |  |  |             "chat_enabled": False, | 
					
						
							|  |  |  |             "federatedTimelineAvailable": False, | 
					
						
							|  |  |  |             "federation": { | 
					
						
							|  |  |  |                 "enabled": True | 
					
						
							| 
									
										
										
										
											2024-05-16 10:05:14 +00:00
										 |  |  |             }, | 
					
						
							| 
									
										
										
										
											2024-06-04 18:18:02 +00:00
										 |  |  |             "suggestions": { | 
					
						
							|  |  |  |                 "enabled": False | 
					
						
							| 
									
										
										
										
											2024-05-16 10:05:14 +00:00
										 |  |  |             }, | 
					
						
							| 
									
										
										
										
											2024-06-04 18:18:02 +00:00
										 |  |  |             "invitesEnabled": False, | 
					
						
							|  |  |  |             "private": True, | 
					
						
							|  |  |  |             "privilegedStaff": True, | 
					
						
							|  |  |  |             "nodeName": domain, | 
					
						
							|  |  |  |             "mailerEnabled": False, | 
					
						
							|  |  |  |             "publicTimelineVisibility": {}, | 
					
						
							| 
									
										
										
										
											2024-08-13 09:15:59 +00:00
										 |  |  |             "postFormats": ["text/plain", "text/html", | 
					
						
							|  |  |  |                             "text/markdown", "text/x.misskeymarkdown"], | 
					
						
							| 
									
										
										
										
											2024-06-04 18:18:02 +00:00
										 |  |  |             "FEPs": ["c648", "521a", "8fcf", "4ccd", "c118", "fffd", | 
					
						
							| 
									
										
										
										
											2024-10-06 16:22:13 +00:00
										 |  |  |                      "1970", "0837", "7628", "2677", "5e53", "c16b", | 
					
						
							| 
									
										
										
										
											2025-04-06 20:09:00 +00:00
										 |  |  |                      "5e53", "268d", "b2b8", "9967", "dd4b", "5711", | 
					
						
							| 
									
										
										
										
											2025-05-17 10:56:12 +00:00
										 |  |  |                      "044f", "82f6"] | 
					
						
							| 
									
										
										
										
											2024-06-04 18:18:02 +00:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2019-11-13 10:32:12 +00:00
										 |  |  |     } | 
					
						
							|  |  |  |     return nodeinfo | 
					
						
							| 
									
										
										
										
											2019-11-13 12:45:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-03 16:59:12 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-28 17:20:43 +00:00
										 |  |  | def metadata_custom_emoji(base_dir: str, | 
					
						
							|  |  |  |                           http_prefix: str, domain_full: str) -> {}: | 
					
						
							| 
									
										
										
										
											2021-05-27 22:08:49 +00:00
										 |  |  |     """Returns the custom emoji
 | 
					
						
							|  |  |  |     Endpoint /api/v1/custom_emojis | 
					
						
							|  |  |  |     See https://docs.joinmastodon.org/methods/instance/custom_emojis | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2024-12-23 17:45:20 +00:00
										 |  |  |     result: list[dict] = [] | 
					
						
							| 
									
										
										
										
											2022-01-03 10:27:55 +00:00
										 |  |  |     emojis_url = http_prefix + '://' + domain_full + '/emoji' | 
					
						
							|  |  |  |     for _, _, files in os.walk(base_dir + '/emoji'): | 
					
						
							|  |  |  |         for fname in files: | 
					
						
							|  |  |  |             if len(fname) < 3: | 
					
						
							| 
									
										
										
										
											2021-05-27 22:19:52 +00:00
										 |  |  |                 continue | 
					
						
							| 
									
										
										
										
											2022-01-03 10:27:55 +00:00
										 |  |  |             if fname[0].isdigit() or fname[1].isdigit(): | 
					
						
							| 
									
										
										
										
											2021-05-27 22:08:49 +00:00
										 |  |  |                 continue | 
					
						
							| 
									
										
										
										
											2022-01-03 10:27:55 +00:00
										 |  |  |             if not fname.endswith('.png'): | 
					
						
							| 
									
										
										
										
											2021-05-27 22:08:49 +00:00
										 |  |  |                 continue | 
					
						
							| 
									
										
										
										
											2022-01-03 10:27:55 +00:00
										 |  |  |             url = os.path.join(emojis_url, fname) | 
					
						
							| 
									
										
										
										
											2021-05-27 22:08:49 +00:00
										 |  |  |             result.append({ | 
					
						
							| 
									
										
										
										
											2022-01-03 10:27:55 +00:00
										 |  |  |                 "shortcode": fname.replace('.png', ''), | 
					
						
							| 
									
										
										
										
											2021-05-27 22:08:49 +00:00
										 |  |  |                 "url": url, | 
					
						
							|  |  |  |                 "static_url": url, | 
					
						
							|  |  |  |                 "visible_in_picker": True | 
					
						
							|  |  |  |             }) | 
					
						
							|  |  |  |         break | 
					
						
							|  |  |  |     return result |