[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fbHnvh_xab-nWbG8mhd9E0C-44lqCHHk8GbNBGpKnR8Y":3},{"slug":4,"name":5,"version":6,"author":7,"author_profile":8,"description":9,"short_description":10,"active_installs":11,"downloaded":12,"rating":13,"num_ratings":14,"last_updated":15,"tested_up_to":16,"requires_at_least":17,"requires_php":18,"tags":19,"homepage":18,"download_link":25,"security_score":26,"vuln_count":27,"unpatched_count":27,"last_vuln_date":28,"fetched_at":29,"vulnerabilities":30,"developer":31,"crawl_stats":28,"alternatives":35,"analysis":133,"fingerprints":292},"tootpress","TootPress","0.5","unmus","https:\u002F\u002Fprofiles.wordpress.org\u002Funmus\u002F","\u003Cp>TootPress copies your toots from Mastodon to WordPress continuously. The toots can be displayed chronologically in the blog, making your timeline accessible to other people outside of Mastodon. In addition, you regain ownership of your own data back.\u003C\u002Fp>\n\u003Ch4>Features\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Copy your toots back\u003C\u002Fli>\n\u003Cli>Copy your tooted images back\u003C\u002Fli>\n\u003Cli>Display your toots on the blog\u003C\u002Fli>\n\u003Cli>Retrieve your complete timeline\u003C\u002Fli>\n\u003Cli>Languague: English, German (only FrontEnd)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Live Demo\u003C\u002Fh4>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fwww.unmus.de\u002Ftroets\u002F\" rel=\"nofollow ugc\">Here!\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch3>Setup Manual\u003C\u002Fh3>\n\u003Col>\n\u003Cli>Install the Plugin in WordPress\u003C\u002Fli>\n\u003Cli>Create an Application on your Mastodon Instance to get API Access (under Settings\u002FDevelopment)\u003C\u002Fli>\n\u003Cli>Restrict the Authorization of the created Application to Read (all data)\u003C\u002Fli>\n\u003Cli>Maintain Mastodon Instance and Access Token in the TootPress Settings\u003C\u002Fli>\n\u003Cli>Retrieve your Account ID (in WordPress under Tools\u002FToots)\u003C\u002Fli>\n\u003Cli>Maintain the Account ID in the TootPress Settings\u003C\u002Fli>\n\u003Cli>Create a new WordPress Page and add the Page to your Menu\u003C\u002Fli>\n\u003Cli>Maintain the Page ID in the TootPress Settings (you find the Page ID in URL of the Browser when editing the Page in WordPress)\u003C\u002Fli>\n\u003Cli>Run Mastodon API Request once (in WordPress under Tools\u002FToots)\u003C\u002Fli>\n\u003Cli>Activate Steady Fetch\u003C\u002Fli>\n\u003Cli>That’s it!\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3>Instructions for Use\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>You find TootPress in WordPress in the area of Settings and Tools\u003C\u002Fli>\n\u003Cli>Steady Fetch activates the automatic and regular load of new toots\u003C\u002Fli>\n\u003Cli>First API Request will copy your last 40 toots\u003C\u002Fli>\n\u003Cli>New toots will be loaded every 15 minutes (customizable)\u003C\u002Fli>\n\u003Cli>You can load your complete timeline into WordPress with the eponymous function\u003C\u002Fli>\n\u003Cli>Loading your complete timeline can take several hours depending of the amount of toots\u003C\u002Fli>\n\u003Cli>480 toots are loaded per hour as maximum\u003C\u002Fli>\n\u003Cli>You can run a Mastodon API Request everytime at your own with the eponymous function\u003C\u002Fli>\n\u003Cli>There is no prescribed order for the execution of Steady Fetch, Complete Timeline or manual requests\u003C\u002Fli>\n\u003Cli>If problems occur, TootPress provides a Healthy Check\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Further Information\u003C\u002Fh3>\n\u003Ch4>Supported Toot Objects\u003C\u002Fh4>\n\u003Cp>Following toot objects are supported.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Text\u003C\u002Fli>\n\u003Cli>Images\u003C\u002Fli>\n\u003Cli>Galleries\u003C\u002Fli>\n\u003Cli>URLs\u003C\u002Fli>\n\u003Cli>Hashtags\u003C\u002Fli>\n\u003Cli>Mentions\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Not supported Toot Objects\u003C\u002Fh4>\n\u003Cp>Following toot objects are not supported.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Audio\u003C\u002Fli>\n\u003Cli>Video\u003C\u002Fli>\n\u003Cli>Poll\u003C\u002Fli>\n\u003Cli>Teaser\u003C\u002Fli>\n\u003Cli>Quotes\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Excluded Toot Types\u003C\u002Fh4>\n\u003Cp>Following toot types are excluded from the data transfer.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Boosts\u003C\u002Fli>\n\u003Cli>Replys\u003C\u002Fli>\n\u003Cli>Private Toots\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Architecture\u003C\u002Fh4>\n\u003Cp>Data storage and process logic is separated from the WordPress Framework. The toots are not saved in the table wp_posts. And TootPress is not registering a custom post type for the toots as well.\u003C\u002Fp>\n\u003Ch4>CSS classes\u003C\u002Fh4>\n\u003Cp>TootPress comes with basic CSS Styles. For best fit it is required to add additional styles in your theme. All TootPress UI elements can be addressed with individual CSS selectors. Please use the browser development tools to find the right classes.\u003C\u002Fp>\n\u003Ch4>Data & Files\u003C\u002Fh4>\n\u003Cp>TootPress creates 2 folders within the WordPress Uploads Directory.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>tootpress-mastodonapidata = Archive of the received Mastodon API data\u003C\u002Fli>\n\u003Cli>tootpress-images = Toot Image Folder \u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>wpCrons\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Steady Fetch (every 15 minutes, customizable)\u003C\u002Fli>\n\u003Cli>Load Complete Timeline (every 5 minutes)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>TootPress API\u003C\u002Fh4>\n\u003Cp>\u003Cstrong>Action: tootpress_toots_update\u003C\u002Fstrong>\u003Cbr \u002F>\nIt will be fired after toot update to execute custom post-processing.\u003Cbr \u002F>\nYou can use the following code.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>function tootpress_toots_update_postprocessing() {\n\n    \u002F\u002F Add your code to be executed here\n\n}\nadd_action('tootpress_toots_update', 'tootpress_toots_update_postprocessing');\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Filter: tootpress_preamble_filter\u003C\u002Fstrong>\u003Cbr \u002F>\nIt outputs html content before the toot loop.\u003Cbr \u002F>\nYou can use the following code.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>function tootpress_preamble_add( $preamble ) {\n\n    \u002F\u002F Add your filter code here\n    \u002F\u002F Example: $preamble='\u003Cp>Hello World.\u003C\u002Fp>';\n\n    return $preamble;\n\n}\nadd_filter( 'tootpress_preamble_filter', 'tootpress_preamble_add', 10, 1 );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Filter: tootpress_closing_filter\u003C\u002Fstrong>\u003Cbr \u002F>\nIt outputs html content after the last toot loop.\u003Cbr \u002F>\nYou can use the following code.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>function tootpress_closing_add( $content ) {\n\n    \u002F\u002F Add your filter code here\n    \u002F\u002F Example: $content='\u003Cp>Hello World.\u003C\u002Fp>';\n\n    return $content;\n\n}\nadd_filter( 'tootpress_closing_filter', 'tootpress_closing_add', 10, 1 );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Filter: tootpress_menu_forward_label\u003C\u002Fstrong>\u003Cbr \u002F>\nThis filter overwrites the forward label in the bottom navigation.\u003Cbr \u002F>\nYou can use the following code.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>function tootpress_menu_forward_label_change( $label ) {\n\n    \u002F\u002F Add your filter code here\n    \u002F\u002F Example: $label='Newer Posts';\n\n    return $label;\n\n}\nadd_filter( 'tootpress_menu_forward_label', 'tootpress_menu_forward_label_change', 10, 1 );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Filter: tootpress_menu_backward_label\u003C\u002Fstrong>\u003Cbr \u002F>\nThis filter overwrites the backward label in the bottom navigation.\u003Cbr \u002F>\nYou can use the following code.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>function tootpress_menu_backward_label_change( $label ) {\n\n    \u002F\u002F Add your filter code here\n    \u002F\u002F Example: $label='Older Posts';\n\n    return $label;\n\n}\nadd_filter( 'tootpress_menu_backward_label', 'tootpress_menu_backward_label_change', 10, 1 );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Filter: tootpress_beforeloop_filter\u003C\u002Fstrong>\u003Cbr \u002F>\nThis filter outputs content before the toot loop (on all tootpress pages).\u003Cbr \u002F>\nYou can use the following code.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>function tootpress_beforeloop_filter_add( $content, $page_number ) {\n\n    \u002F\u002F Add your filter code here\n    \u002F\u002F Example: $content='\u003Cp>Page '.$page_number.'\u003C\u002Fp>';\n\n    return $label;\n\n}\nadd_filter( 'tootpress_beforeloop_filter', 'tootpress_beforeloop_filter_add', 10, 2 );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Filter: tootpress_afterloop_filter\u003C\u002Fstrong>\u003Cbr \u002F>\nThis filter outputs content after the toot loop (on all tootpress pages).\u003Cbr \u002F>\nYou can use the following code.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>function tootpress_afterloop_add( $content, $current_page_number, $last_page_number ) {\n\n    \u002F\u002F Add your filter code here\n    \u002F\u002F Example: $content='\u003Cp>Page '.$current_page_number.' of '.$last_page_number.'\u003C\u002Fp>';\n\n    return $content;\n\n}\nadd_filter( 'tootpress_afterloop_filter', 'tootpress_afterloop_add', 10, 3 );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Filter: tootpress_mastodon_logo_filter\u003C\u002Fstrong>\u003Cbr \u002F>\nThis filter overwrites the Mastodon Logo with Custom Logo.\u003Cbr \u002F>\nYou can use the following code.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>function tootpress_mastodon_logo_change ( $img ) {\n\n    \u002F\u002F Standard Value\n    \u002F\u002F \u003Cimg class=\"toot-symbol\" src=\"FILE-URL\" alt=\"Toot Symbol\" width=\"35\" height=\"37\"\u002F>\n\n    \u002F\u002F Add your filter code here\n    \u002F\u002F Example: $img='\u003Cimg class=\"toot-symbol\" src=\"FILE-URL\" alt=\"Custom Toot Symbol\" width=\"32\" height=\"32\"\u002F>';\n\n    return $img;\n\n}\nadd_filter( 'tootpress_mastodon_logo_filter', 'tootpress_mastodon_logo_change', 10, 1 );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Filter: tootpress_between_filter\u003C\u002Fstrong>\u003Cbr \u002F>\nThis filter adds custom HTML between the toots.\u003Cbr \u002F>\nYou can use the following code.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>function tootpress_create_element_between ( $content ) {\n\n    \u002F\u002F Add your filter code here\n    \u002F\u002F $content='\u003Chr\u002F>';\n\n    return $content;\n\n}\nadd_filter( 'tootpress_between_filter', 'tootpress_create_element_between', 10, 1 );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Filter: tootpress_toot_content_filter\u003C\u002Fstrong>\u003Cbr \u002F>\nThis filter can be used to manipulate the toot content.\u003Cbr \u002F>\nYou can use the following code.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>function tootpress_manipulate_content ( $content ) {\n\n    \u002F\u002F Add your filter code here\n    \u002F\u002F $content=str_replace('href=','target=\"_blank\" href=',$content); \n\n    return $content;\n\n}\nadd_filter( 'tootpress_toot_content_filter', 'tootpress_manipulate_content', 10, 1 );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Filter: tootpress_date_filter\u003C\u002Fstrong>\u003Cbr \u002F>\nThis filter overwrites the date output with custom format.\u003Cbr \u002F>\nYou can use the following code.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>function tootpress_date_custom_format ( $date, $year, $month, $day, $hour, $minute, $second ) {\n\n    \u002F\u002F $date = 2023-05-30 22:40:28\n    \u002F\u002F $year = 2023\n    \u002F\u002F $month = 05\n    \u002F\u002F $day = 30\n    \u002F\u002F $hour = 22\n    \u002F\u002F $minute = 40\n    \u002F\u002F $second = 28\n\n    \u002F\u002F Add your filter code here\n    \u002F\u002F $date=$day.'.'.$month.'.'.$year.' '.$hour.':'.$minute.':'.$second;\n\n    return $date;\n\n}\nadd_filter( 'tootpress_date_filter', 'tootpress_date_custom_format', 10, 7 );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Filter: tootpress_image_filter\u003C\u002Fstrong>\u003Cbr \u002F>\nThis filter can be used to manipulate image tags.\u003Cbr \u002F>\nYou can use the following code.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>function tootpress_image_manipulate ($img_tag,$filename,$description,$width,$height,$image_directory_path,$amount_of_images,$image_number) {\n\n    \u002F\u002F Amount of Images\n    \u002F\u002F ----------------\n    \u002F\u002F 1 = Single Image\n    \u002F\u002F >1 = Gallery + Size of Gallery\n\n    \u002F\u002F Image Number\n    \u002F\u002F ------------\n    \u002F\u002F This number indicates position within the gallery\n\n    \u002F\u002F Add your filter code here\n    \u002F\u002F $img_tag=str_replace('alt=','class=\"tootpress-image\" alt=',$img_tag);\n\n    return $img_tag;\n\n}\nadd_filter( 'tootpress_image_filter', 'tootpress_image_manipulate', 1, 8 );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Related Links\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fcircuscode\u002Ftootpress\" rel=\"nofollow ugc\">Source Code @ GitHub\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.unmus.de\u002Ftootpress\u002F\" rel=\"nofollow ugc\">Official Plugin Page\u003C\u002Fa> (German)\u003C\u002Fli>\n\u003C\u002Ful>\n","TootPress copies your toots from Mastodon to WordPress.",30,3017,90,4,"2025-07-19T17:43:00.000Z","6.8.5","6.1","",[20,21,22,23,24],"blog","fediverse","mastodon","microblogging","toots","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Ftootpress.0.5.zip",100,0,null,"2026-03-15T15:16:48.613Z",[],{"slug":7,"display_name":7,"profile_url":8,"plugin_count":32,"total_installs":13,"avg_security_score":26,"avg_patch_time_days":11,"trust_score":33,"computed_at":34},2,94,"2026-04-05T08:44:39.273Z",[36,58,77,96,113],{"slug":37,"name":38,"version":39,"author":40,"author_profile":41,"description":42,"short_description":43,"active_installs":44,"downloaded":45,"rating":46,"num_ratings":47,"last_updated":48,"tested_up_to":49,"requires_at_least":50,"requires_php":51,"tags":52,"homepage":56,"download_link":57,"security_score":26,"vuln_count":27,"unpatched_count":27,"last_vuln_date":28,"fetched_at":29},"share-on-mastodon","Share on Mastodon","0.20.1","Jan Boddez","https:\u002F\u002Fprofiles.wordpress.org\u002Fjanboddez\u002F","\u003Cp>Automatically share WordPress posts on \u003Ca href=\"https:\u002F\u002Fjoinmastodon.org\u002F\" rel=\"nofollow ugc\">Mastodon\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>You choose which post types are shared, and sharing can still be disabled on a per-post basis.\u003C\u002Fp>\n\u003Cp>Supports WordPress’ new block editor, image uploads and alt text, “template tags,” and comes with a number of filter hooks for developers.\u003C\u002Fp>\n\u003Cp>More details can be found on \u003Ca href=\"https:\u002F\u002Fjan.boddez.net\u002Fwordpress\u002Fshare-on-mastodon\" rel=\"nofollow ugc\">this plugin’s web page\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch4>Credit\u003C\u002Fh4>\n\u003Cp>Share icon by \u003Ca href=\"https:\u002F\u002Fheroicons.dev\u002F\" rel=\"nofollow ugc\">Heroicons\u003C\u002Fa>, licensed under the terms of the MIT License. Elephant illustration sourced from Mastodon’s \u003Ca href=\"https:\u002F\u002Fjoinmastodon.org\u002Fpress-kit.zip\" rel=\"nofollow ugc\">Press Kit\u003C\u002Fa>.\u003C\u002Fp>\n","Automatically share WordPress posts on Mastodon.",1000,29553,96,10,"2026-01-31T14:49:00.000Z","6.9.4","5.9","7.2",[53,21,22,54,55],"adopt-me","posse","syndication","https:\u002F\u002Fjan.boddez.net\u002Fwordpress\u002Fshare-on-mastodon","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fshare-on-mastodon.0.20.1.zip",{"slug":59,"name":60,"version":61,"author":62,"author_profile":63,"description":64,"short_description":65,"active_installs":66,"downloaded":67,"rating":26,"num_ratings":68,"last_updated":69,"tested_up_to":70,"requires_at_least":17,"requires_php":71,"tags":72,"homepage":74,"download_link":75,"security_score":76,"vuln_count":27,"unpatched_count":27,"last_vuln_date":28,"fetched_at":29},"simple-mastodon-verification","Simple Mastodon Verification","2.0.3","OpenDNA","https:\u002F\u002Fprofiles.wordpress.org\u002Fopendna\u002F","\u003Cp>Provides a General Settings menu option to define a rel=\\”me\\” in metatags for the whole site and also individual contributors.\u003C\u002Fp>\n\u003Ch4>Admin verification\u003C\u002Fh4>\n\u003Cp>The plugin will add a field at the bottom of the \u003Cem>General Settings\u003C\u002Fem> page (Admin Dashboard > Settings>General Settings), labelled “Verify Mastodon URL”. The field should accept any valid mastodon user URL up to three sub-domains deep. i.e. https:\u002F\u002Fmastodon.social\u002F@user to https:\u002F\u002Fmy.mastodon.del.icio.us\u002F@user The plugin does \u003Cem>not\u003C\u002Fem> accept Mastodon addresses (@user@domain.tld)\u003C\u002Fp>\n\u003Cp>When a valid URL has been saved, a tag containing a rel=”me” link pointing to the Mastodon user profile will be added near the top of the site’s metadata (between  elements). If a link to the WordPress instance is added as one of that user’s profile metadata, the Mastodon instance will validate the ownership of the URL and add a green “verified” banner to the URL.\u003C\u002Fp>\n\u003Ch4>Author verification\u003C\u002Fh4>\n\u003Cp>If an Administrator enables the “Verify Authors’ profiles” option on the \u003Cem>General Settings\u003C\u002Fem> page (Admin Dashboard > Settings>General Settings), a field labelled “Mastodon URL” will be added to users’ profile pages (under “contact info”).\u003C\u002Fp>\n\u003Cp>When a valid URL has been saved, a tag containing a rel=”me” link will be added to the metadata (between  elements) on the Author’s archive page \u003Cem>only\u003C\u002Fem>. If a link to the WordPress Author archive is added as one of that’s user’s profile metadata, the Mastodon instance will validate the ownership of the URL and add a green “verified” banner to the URL.\u003C\u002Fp>\n\u003Ch4>Plugin Development\u003C\u002Fh4>\n\u003Cp>\u003Cem>Simple Mastodon Verification\u003C\u002Fem> development is managed on GitHub, with official releases published on WordPress.org. The GitHub repo can be found at https:\u002F\u002Fgithub.com\u002Fmckinnon\u002Fsimple-mastodon-verification.\u003C\u002Fp>\n","Provides a General Settings menu option to define a rel=\\\"me\\\" in metatags for the whole site and also individual contributors.",800,7835,3,"2024-10-15T19:38:00.000Z","6.6.5","7.4",[21,22,73],"verification","https:\u002F\u002Fgithub.com\u002Fmckinnon\u002Fsimple-mastodon-verification","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fsimple-mastodon-verification.2.0.3.zip",92,{"slug":78,"name":79,"version":80,"author":81,"author_profile":82,"description":83,"short_description":84,"active_installs":85,"downloaded":86,"rating":87,"num_ratings":88,"last_updated":89,"tested_up_to":16,"requires_at_least":90,"requires_php":71,"tags":91,"homepage":94,"download_link":95,"security_score":26,"vuln_count":27,"unpatched_count":27,"last_vuln_date":28,"fetched_at":29},"enable-mastodon-apps","Enable Mastodon Apps","1.4.6","Alex Kirk","https:\u002F\u002Fprofiles.wordpress.org\u002Fakirk\u002F","\u003Cp>Despite Mastodon implying that you would use this plugin for engaging on Mastodon (when you have enabled it for that, see below), the plugin is useful when installed on a plain WordPress.\u003C\u002Fp>\n\u003Cp>When you use a Mastodon app, you’ll enter your own blog URL to connect and log in to your blog in the following screens.\u003C\u002Fp>\n\u003Cp>You’ll then see just the posts on your blog which can already be useful in a multi-author environment (e.g. private blogs). You can also use that Mastodon app to create simple posts with a message + attachment(s) which can be better suited for your usecase than using the Gutenberg-capable WordPress mobile app.\u003C\u002Fp>\n\u003Cp>When used in combination with the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Factivitypub\u002F\" rel=\"ugc\">ActivityPub\u003C\u002Fa> (for being followed via Mastodon) and \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Ffriends\u002F\" rel=\"ugc\">Friends\u003C\u002Fa> (for following people on Mastodon or via RSS) plugins, the Enable Mastodon Apps plugin will show you your feed of people you follow and you can follow and unfollow people from within the app.\u003C\u002Fp>\n\u003Cp>Be aware that an app will have a post format associated (see the settings page). The plugin will check for the existance of the Friends plugin to find a resonable default (status with Friends plugin, standard otherwise). When you create a post with your Mastodon app, the post format that you selected for the app will be used.\u003C\u002Fp>\n\u003Cp>The plugin has been tested with quite a number of Mastodon clients, among them are:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Felk.zone\u002F\" rel=\"nofollow ugc\">Elk\u003C\u002Fa> (Web)\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fpinafore.social\u002F\" rel=\"nofollow ugc\">Pinafore\u003C\u002Fa> (Web)\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Ftusky.app\u002F\" rel=\"nofollow ugc\">Tusky\u003C\u002Fa> (Android)\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Ftapbots.com\u002Fivory\u002F\" rel=\"nofollow ugc\">Ivory\u003C\u002Fa> (macOS and iOS)\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fmastodon.social\u002F@MonaApp\" rel=\"nofollow ugc\">Mona\u003C\u002Fa> (macOS)\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FDimillian\u002FIceCubesApp\" rel=\"nofollow ugc\">IceCubes\u003C\u002Fa> (macOS)\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgetmammoth.app\u002F\" rel=\"nofollow ugc\">Mammoth\u003C\u002Fa> (macOS and iOS)\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fphanpy.social\" rel=\"nofollow ugc\">Phanpy\u003C\u002Fa> (Web)\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fmastodon.social\u002F@MonaApp\" rel=\"nofollow ugc\">Mona\u003C\u002Fa> (macOS and iOS)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Many more, see the \u003Ca href=\"https:\u002F\u002Fjoinmastodon.org\u002Fapps\" rel=\"nofollow ugc\">Third-party apps section on joinmastodon.org\u002Fapps\u003C\u002Fa>. Each app might have its quirks, \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fakirk\u002Fenable-mastodon-apps\u002Fissues\" rel=\"nofollow ugc\">please report an issue when you have troubles\u003C\u002Fa>. There is also a chance that the API has not been implemented yet (see below.)\u003C\u002Fp>\n\u003Ch3>Mastodon API Implementation\u003C\u002Fh3>\n\u003Cp>The plugin implements the \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fapi\u002F\" rel=\"nofollow ugc\">Mastodon API as documented on joinmastodon.org\u003C\u002Fa>: The OAuth API for logging in (you will see your WordPress login screen when logging in to your Mastodon app, it also works with 2FA plugins) and the REST API for accessing your data.\u003C\u002Fp>\n\u003Cp>Here is a list of endpoints and their implementation status:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>[x] \u003Ccode>GET \u002Foauth\u002Fauthorize\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Foauth\u002F#authorize\" rel=\"nofollow ugc\">Authorize a user\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>POST \u002Foauth\u002Ftoken\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Foauth\u002F#authorize\" rel=\"nofollow ugc\">Obtain a token\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>POST \u002Foauth\u002Frevoke\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Foauth\u002F#revoke\" rel=\"nofollow ugc\">Revoke a token\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[ ] \u003Ccode>GET \u002Fapi\u002Fv1\u002Femails\u002Fconfirmation\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Femails\u002F#confirmation\" rel=\"nofollow ugc\">Resend confirmation email\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[ ] \u003Ccode>GET \u002Fapi\u002Fv1\u002Faccounts\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Faccounts\u002F#create\" rel=\"nofollow ugc\">Register an account\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>POST \u002Fapi\u002Fv1\u002Fapps\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fapps\u002F#create\" rel=\"nofollow ugc\">Create an application\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[ ] \u003Ccode>GET \u002Fapi\u002Fv1\u002Fapps\u002Fverify_credentials\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fapps\u002F#verify_credentials\" rel=\"nofollow ugc\">Verify your app works\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>GET \u002Fapi\u002Fv1\u002Finstance\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Finstance\u002F\" rel=\"nofollow ugc\">View server information\u003C\u002Fa> (v1!)\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>GET \u002Fapi\u002Fnodeinfo\u002F2.0.json\u003C\u002Fcode> (used by Pixelfed)\u003C\u002Fli>\n\u003Cli>[ ] \u003Ccode>GET \u002Fapi\u002Fv1\u002Fannouncements\u003C\u002Fcode> (implemented as empty) \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fannouncements\u002F#get\" rel=\"nofollow ugc\">View all announcements\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[ ] \u003Ccode>POST \u002Fapi\u002Fv1\u002Fannouncements\u002F:id\u002Fdismiss\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fannouncements\u002F#dismiss\" rel=\"nofollow ugc\">Dismiss an announcement\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[ ] \u003Ccode>POST \u002Fapi\u002Fv1\u002Fannouncements\u002F:id\u002Freactions\u002F:name\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fannouncements\u002F#put-reactions\" rel=\"nofollow ugc\">Reactions to an announcement\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[ ] \u003Ccode>GET \u002Fapi\u002Fv1\u002Ffilters\u003C\u002Fcode> (implemented as empty)\u003C\u002Fli>\n\u003Cli>[ ] \u003Ccode>GET \u002Fapi\u002Fv1\u002Flists\u003C\u002Fcode> (implemented as empty)\u003C\u002Fli>\n\u003Cli>[ ] \u003Ccode>GET \u002Fapi\u002Fv1\u002Fcustom_emojis\u003C\u002Fcode> (implemented as empty) \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fcustom_emojis\u002F#get\" rel=\"nofollow ugc\">View all custom emojis\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>GET \u002Fapi\u002Fv1\u002Faccounts\u002Fverify_credentials\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Faccounts\u002F#verify_credentials\" rel=\"nofollow ugc\">Verify account credentials\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>PATCH \u002Fapi\u002Fv1\u002Faccounts\u002Fupdate_credentials\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Faccounts\u002F#update_credentials\" rel=\"nofollow ugc\">Update account credentials\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>GET \u002Fapi\u002Fv1\u002Faccounts\u002F:id\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Faccounts\u002F#get\" rel=\"nofollow ugc\">Get account\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>GET \u002Fapi\u002Fv1\u002Faccounts\u002F:id\u002Fstatuses\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Faccounts\u002Fstatuses\u002F#get\" rel=\"nofollow ugc\">Get account’s statuses\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>GET \u002Fapi\u002Fv1\u002Faccounts\u002F:id\u002Ffollowers\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Faccounts\u002F#followers\" rel=\"nofollow ugc\">Get account’s followers\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[ ] \u003Ccode>GET \u002Fapi\u002Fv1\u002Faccounts\u002F:id\u002Ffollowing\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Faccounts\u002F#following\" rel=\"nofollow ugc\">Get account’s following\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[ ] \u003Ccode>GET \u002Fapi\u002Fv1\u002Faccounts\u002F:id\u002Ffeatured_tags\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Faccounts\u002F#featured_tags\" rel=\"nofollow ugc\">Get account’s featured tags\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[ ] \u003Ccode>GET \u002Fapi\u002Fv1\u002Faccounts\u002F:id\u002Flists\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Faccounts\u002F#lists\" rel=\"nofollow ugc\">Get lists containing this account\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>GET \u002Fapi\u002Fv1\u002Faccounts\u002F:id\u002Ffollow\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Faccounts\u002F#follow\" rel=\"nofollow ugc\">Follow account\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>GET \u002Fapi\u002Fv1\u002Faccounts\u002F:id\u002Funfollow\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Faccounts\u002F#unfollow\" rel=\"nofollow ugc\">Unfollow account\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>GET \u002Fapi\u002Fv1\u002Faccounts\u002Frelationships\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Faccounts\u002F#relationships\" rel=\"nofollow ugc\">Check relationships to other accounts\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>POST \u002Fapi\u002Fv2\u002Fmedia\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fmedia\u002F#v2\" rel=\"nofollow ugc\">Upload media as an attachment (async)\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>GET \u002Fapi\u002Fv1\u002Fmedia\u002F:id\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fmedia\u002F#get\" rel=\"nofollow ugc\">Get media attachment\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>POST \u002Fapi\u002Fv1\u002Fstatuses\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fstatuses\u002F#post\" rel=\"nofollow ugc\">Post a new status\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>GET \u002Fapi\u002Fv1\u002Fstatuses\u002F:id\u002Fcontext\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fstatuses\u002F#context\" rel=\"nofollow ugc\">Get parent and child statuses in context\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>POST \u002Fapi\u002Fv1\u002Fstatuses\u002F:id\u002Ffavourite\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fstatuses\u002F#favourite\" rel=\"nofollow ugc\">Favourite a status\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>POST \u002Fapi\u002Fv1\u002Fstatuses\u002F:id\u002Funfavourite\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fstatuses\u002F#unfavourite\" rel=\"nofollow ugc\">Unfavourite a status\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>POST \u002Fapi\u002Fv1\u002Fstatuses\u002F:id\u002Freblog\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fstatuses\u002F#boost\" rel=\"nofollow ugc\">Boost a status\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>POST \u002Fapi\u002Fv1\u002Fstatuses\u002F:id\u002Funreblog\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fstatuses\u002F#unreblog\" rel=\"nofollow ugc\">Undo the boost a status\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>GET \u002Fapi\u002Fv1\u002Fstatuses\u002F:id\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fstatuses\u002F#get\" rel=\"nofollow ugc\">View a single status\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>GET \u002Fapi\u002Fv1\u002Fnotifications\u002F\u003C\u002Fcode> (partial, just mentions) \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fnotifications\u002F#get\" rel=\"nofollow ugc\">Get all notifications\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>GET \u002Fapi\u002Fv1\u002Fnotifications\u002F:id\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fnotifications\u002F#get-one\" rel=\"nofollow ugc\">Get a single notification\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>POST \u002Fapi\u002Fv1\u002Fnotifications\u002Fclear\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fnotifications\u002F#clear\" rel=\"nofollow ugc\">Dismiss all notification\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>POST \u002Fapi\u002Fv1\u002Fnotifications\u002F:id\u002Fdismiss\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fnotifications\u002F#dismiss\" rel=\"nofollow ugc\">Dismiss a single notification\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>GET \u002Fapi\u002Fv1\u002Ftimelines\u002Fhome\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Ftimelines\u002F#home\" rel=\"nofollow ugc\">View home timeline\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>GET \u002Fapi\u002Fv1\u002Ftimelines\u002Fpublic\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Ftimelines\u002F#public\" rel=\"nofollow ugc\">View public timeline\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[ ] \u003Ccode>GET \u002Fapi\u002Fv1\u002Fmarkers\u003C\u002Fcode> (implemented as empty) \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fmarkers\u002F#get\" rel=\"nofollow ugc\">Get saved timeline positions\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[ ] \u003Ccode>POST \u002Fapi\u002Fv1\u002Fmarkers\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fmarkers\u002F#create\" rel=\"nofollow ugc\">Save your position in a timeline\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>GET \u002Fapi\u002Fv2\u002Fsearch\u003C\u002Fcode> (partial, accounts (local and exact match for remote) and statuses in the local db) \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fsearch\u002F#v2\" rel=\"nofollow ugc\">Perform a search\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>GET \u002Fapi\u002Fv1\u002Ffavourites\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Ffavourites\u002F#get\" rel=\"nofollow ugc\">View your favourites\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>[x] \u003Ccode>GET \u002Fapi\u002Fv1\u002Fbookmarks\u003C\u002Fcode> \u003Ca href=\"https:\u002F\u002Fdocs.joinmastodon.org\u002Fmethods\u002Fbookmarks\u002F#get\" rel=\"nofollow ugc\">View your bookmarks\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Unmentioned endpoints are not implemented. Contributions welcome!\u003C\u002Fp>\n\u003Cp>Endpoints around interacting with non-local users require the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Factivitypub\" rel=\"ugc\">ActivityPub plugin\u003C\u002Fa>. Following users requires the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Ffriends\" rel=\"ugc\">Friends plugin\u003C\u002Fa>. Lists-related endpoints require the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fakirk\u002Ffriends-roles\" rel=\"nofollow ugc\">Friends Roles plugin\u003C\u002Fa>.\u003C\u002Fp>\n","Allow accessing your WordPress with Mastodon clients. Just enter your own blog URL as your instance.",600,17887,76,5,"2025-05-09T03:25:00.000Z","5.0",[92,21,93,22],"activitypub","friends","https:\u002F\u002Fgithub.com\u002Fakirk\u002Fenable-mastodon-apps","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fenable-mastodon-apps.1.4.6.zip",{"slug":97,"name":98,"version":99,"author":100,"author_profile":101,"description":102,"short_description":103,"active_installs":104,"downloaded":105,"rating":26,"num_ratings":14,"last_updated":106,"tested_up_to":70,"requires_at_least":107,"requires_php":108,"tags":109,"homepage":111,"download_link":112,"security_score":76,"vuln_count":27,"unpatched_count":27,"last_vuln_date":28,"fetched_at":29},"link-verification-for-mastodon","Link Verification for Mastodon","1.1.4","overengineer","https:\u002F\u002Fprofiles.wordpress.org\u002Foverengineer\u002F","\u003Cp>This WordPress plugin is super simple. It just adds something like this \u003Ccode>\u003Clink rel=\"me\" href=\"https:\u002F\u002Fyour.mastodon.instance\u002F@yourusername\" \u002F>\u003C\u002Fcode> to your website’s \u003Ccode>\u003Chead>\u003C\u002Fcode>.\u003C\u002Fp>\n","An unofficial WordPress plugin to quickly verify a link on your Mastodon profile.",500,7523,"2024-08-05T20:33:00.000Z","4.4","5.6.20",[21,22,110],"social","https:\u002F\u002Fover-engineer.com\u002Fprojects\u002Flink-verification-for-mastodon","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Flink-verification-for-mastodon.1.1.4.zip",{"slug":114,"name":115,"version":116,"author":117,"author_profile":118,"description":119,"short_description":120,"active_installs":121,"downloaded":122,"rating":123,"num_ratings":68,"last_updated":124,"tested_up_to":70,"requires_at_least":125,"requires_php":126,"tags":127,"homepage":131,"download_link":132,"security_score":76,"vuln_count":27,"unpatched_count":27,"last_vuln_date":28,"fetched_at":29},"share-on-bluesky","Share on Bluesky","2.1.0","Matthias Pfefferle","https:\u002F\u002Fprofiles.wordpress.org\u002Fpfefferle\u002F","\u003Cp>“Share on Bluesky” is a WordPress plugin that allows you to automatically share new posts using your Bluesky-Profile.\u003C\u002Fp>\n","A simple Crossposter for Bluesky (AT Protocol)",200,3942,74,"2024-10-14T18:18:00.000Z","4.9","5.6",[128,129,130,23],"atproto","atprotocol","bluesky","https:\u002F\u002Fgithub.com\u002Fpfefferle\u002Fwordpress-bluesky","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fshare-on-bluesky.2.1.0.zip",{"attackSurface":134,"codeSignals":229,"taintFlows":277,"riskAssessment":278,"analyzedAt":291},{"hooks":135,"ajaxHandlers":221,"restRoutes":222,"shortcodes":223,"cronEvents":224,"entryPointCount":27,"unprotectedCount":27},[136,142,145,150,154,158,161,165,170,174,177,180,183,185,190,194,198,202,207,212,216],{"type":137,"name":138,"callback":139,"file":140,"line":141},"filter","cron_schedules","tootpress_cron_schedule_newtoots","tootpress_cron.php",33,{"type":137,"name":138,"callback":143,"file":140,"line":144},"tootpress_cron_schedule_alltoots",53,{"type":146,"name":147,"callback":148,"file":140,"line":149},"action","tootpress_cron_hook_newtoots","tootpress_cron_process_newtoots",81,{"type":146,"name":151,"callback":152,"file":140,"line":153},"tootpress_cron_hook_alltoots","tootpress_cron_process_alltoots",109,{"type":146,"name":155,"callback":156,"file":157,"line":141},"admin_menu","tootpress_tools_dev_menu","tootpress_developer.php",{"type":146,"name":155,"callback":159,"file":157,"line":160},"tootpress_options_dev_menu",192,{"type":146,"name":162,"callback":163,"file":157,"line":164},"admin_init","tootpress_options_dev_display",264,{"type":137,"name":166,"callback":167,"file":168,"line":169},"the_content","tootpress_content","tootpress_loop.php",63,{"type":146,"name":155,"callback":171,"file":172,"line":173},"tootpress_options_menu","tootpress_options.php",23,{"type":146,"name":162,"callback":175,"file":172,"line":176},"tootpress_options_mastodonapi_display",197,{"type":146,"name":162,"callback":178,"file":172,"line":179},"tootpress_options_plugin_display",198,{"type":146,"name":162,"callback":181,"file":172,"line":182},"tootpress_options_userinterface_display",199,{"type":146,"name":162,"callback":184,"file":172,"line":121},"tootpress_options_expert_display",{"type":146,"name":186,"callback":187,"file":188,"line":189},"wp_enqueue_scripts","tootpress_blogs_css","tootpress_plugin.php",29,{"type":146,"name":191,"callback":192,"file":188,"line":193},"admin_enqueue_scripts","tootpress_admin_css",47,{"type":137,"name":195,"callback":196,"file":188,"line":197},"body_class","tootpress_flag",69,{"type":146,"name":155,"callback":199,"file":200,"line":201},"tootpress_tools_menu","tootpress_tools.php",28,{"type":146,"name":203,"callback":204,"file":205,"line":206},"plugins_loaded","tootpress_update","tootpress_update.php",57,{"type":137,"name":208,"callback":209,"file":210,"line":211},"query_vars","tootpress_urlvars","tootpress_url.php",27,{"type":137,"name":213,"callback":214,"file":210,"line":215},"rewrite_rules_array","tootpress_insert_rewrite",84,{"type":137,"name":217,"callback":218,"file":219,"line":220},"dashboard_glance_items","tootpress_glance_counter","tootpress_widgets.php",32,[],[],[],[225,227],{"hook":147,"callback":147,"file":140,"line":226},119,{"hook":151,"callback":151,"file":140,"line":228},122,{"dangerousFunctions":230,"sqlUsage":231,"outputEscaping":263,"fileOperations":14,"externalRequests":14,"nonceChecks":27,"capabilityChecks":27,"bundledLibraries":276},[],{"prepared":27,"raw":232,"locations":233},12,[234,238,240,242,244,246,248,251,253,256,258,261],{"file":235,"line":236,"context":237},"tootpress_database.php",71,"$wpdb->query() with variable interpolation",{"file":235,"line":239,"context":237},72,{"file":235,"line":46,"context":241},"$wpdb->get_var() with variable interpolation",{"file":235,"line":243,"context":241},98,{"file":235,"line":245,"context":241},139,{"file":235,"line":247,"context":241},141,{"file":235,"line":249,"context":250},221,"$wpdb->get_results() with variable interpolation",{"file":235,"line":252,"context":250},247,{"file":254,"line":255,"context":241},"tootpress_reports.php",39,{"file":254,"line":257,"context":241},54,{"file":259,"line":260,"context":241},"tootpress_set.php",24,{"file":259,"line":262,"context":241},40,{"escaped":123,"rawEcho":264,"locations":265},6,[266,268,270,271,273,275],{"file":157,"line":76,"context":267},"raw output",{"file":172,"line":269,"context":267},93,{"file":172,"line":46,"context":267},{"file":172,"line":272,"context":267},102,{"file":172,"line":274,"context":267},107,{"file":219,"line":189,"context":267},[],[],{"summary":279,"deductions":280},"The tootpress plugin v0.5 exhibits a mixed security posture. On the positive side, static analysis reveals no critical or high severity taint flows, no dangerous functions, and a high percentage (93%) of properly escaped output, suggesting good practices in output sanitization. The absence of known CVEs and a clean vulnerability history further indicate a potentially stable and secure plugin. However, several significant concerns are present. The complete lack of nonce checks and capability checks across all analyzed entry points (even though the attack surface is reported as 0, this implies no explicitly exposed entry points were analyzed for these checks) is a major red flag. Additionally, 100% of the 12 SQL queries are not using prepared statements, which is a substantial risk for SQL injection vulnerabilities, especially if any input can indirectly influence these queries. The presence of file operations and external HTTP requests also warrants careful consideration, as these can be vectors for attack if not properly secured. While the plugin currently appears free of known vulnerabilities, the identified code-level weaknesses represent a latent risk that could be exploited in the future.",[281,283,285,287,289],{"reason":282,"points":47},"100% of SQL queries are not prepared",{"reason":284,"points":47},"No nonce checks found",{"reason":286,"points":47},"No capability checks found",{"reason":288,"points":88},"File operations present without explicit checks",{"reason":290,"points":88},"External HTTP requests present without explicit checks","2026-03-16T22:33:06.351Z",{"wat":293,"direct":300},{"assetPaths":294,"generatorPatterns":297,"scriptPaths":298,"versionParams":299},[295,296],"\u002Fwp-content\u002Fplugins\u002Ftootpress\u002Ftootpress_toots.css","\u002Fwp-content\u002Fplugins\u002Ftootpress\u002Ftootpress_tools.css",[],[],[],{"cssClasses":301,"htmlComments":304,"htmlAttributes":305,"restEndpoints":306,"jsGlobals":307,"shortcodeOutput":308},[302,303],"tootpress-is-here","tootpress-is-not-here",[],[],[],[],[]]