From f3a6500d9bf84fefb77c4b5c53c4644178b79fe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?s=C3=B8renpeter?= Date: Sun, 17 Mar 2024 01:01:16 +0100 Subject: [PATCH] Webmentions now working --- views/new_twt.php | 38 ++++++++++++++++++++++++++++----- views/webmention_endpoint.php | 40 +++++++++++++++++++++++++---------- 2 files changed, 62 insertions(+), 16 deletions(-) diff --git a/views/new_twt.php b/views/new_twt.php index 80260bb..db48d3c 100644 --- a/views/new_twt.php +++ b/views/new_twt.php @@ -65,7 +65,7 @@ if (isset($_POST['submit'])) { $datetime = date('Y-m-d\TH:i:sp'); // abracting to be used for webmentions $twt = "\n" . $datetime . "\t" .$new_post; // NB: only works with PHP 8 - // TODO: Turn off append at top?! + // TODO: Delete? /*if (strpos($contents, NEW_TWT_MARKER) !== false) { // Add the previous marker // Take note that doesn't not work if twtxt file has CRLF line ending @@ -80,15 +80,43 @@ if (isset($_POST['submit'])) { // Append twt at the end of file $contents .= $twt; - - // TODO: Add error handling if write to the file fails +// TODO: Add error handling if write to the file fails // For example due to permissions problems // https://www.w3docs.com/snippets/php/how-can-i-handle-the-warning-of-file-get-contents-function-in-php.html - $file_write_result = file_put_contents($txt_file_path, $contents); + + $file_write_result = file_put_contents($txt_file_path, $contents); +// TODO: replace with file_put_contents($logfile, $log, FILE_APPEND) -- https://www.w3schools.com/php/func_filesystem_file_put_contents.asp + + // Send webmentions (TODO: move to it own file?) + $new_mentions = getMentionsFromTwt($twt); + + foreach ($new_mentions as $mention) { + //print_r(getMentionsFromTwt($twt)); + //echo $mention["nick"] . " from " . $mention["url"]."
"; + + // TODO: detect endpoint via $mention["url"] + + $targets_webmention_endpoint = "https://darch.dk/timeline/webmention"; + + $your_url = "https://darch.dk/twtxt.txt#:~:text=".$datetime; + //$your_url = "https://darch.dk/twtxt.txt#:~:text=2024-03-16T20:38:31Z"; + $target_url = $mention["url"]; + + $payload = "source=".$your_url."&target=".$target_url; + + echo $payload; + + $curl = curl_init(); + curl_setopt($curl, CURLOPT_URL, $targets_webmention_endpoint); + curl_setopt($curl, CURLOPT_POST, TRUE); + curl_setopt($curl, CURLOPT_POSTFIELDS, $payload); + $data = curl_exec($curl); + curl_close($curl); + } //header('Refresh:0; url=.'); header("Location: refresh?url=".$public_txt_url); // Trying to fix issue with douple posting - exit; // + exit; } else { require_once("partials/base.php"); diff --git a/views/webmention_endpoint.php b/views/webmention_endpoint.php index 321324a..26296a9 100644 --- a/views/webmention_endpoint.php +++ b/views/webmention_endpoint.php @@ -4,9 +4,9 @@ # http://creativecommons.org/publicdomain/zero/1.0/ if (!isset($_POST['source']) || !isset($_POST['target'])) { - print('Please send a propper webmention to this endpoint'); - header($_SERVER['SERVER_PROTOCOL'] . ' 400 Bad Request'); - exit; + print('Please send a propper webmention to this endpoint'); + header($_SERVER['SERVER_PROTOCOL'] . ' 400 Bad Request'); + exit; } ob_start(); @@ -19,17 +19,35 @@ $source = ob_get_contents(); ob_end_clean(); if (stristr($source, $_POST['target'])) { -header($_SERVER['SERVER_PROTOCOL'] . ' 202 Accepted'); + header($_SERVER['SERVER_PROTOCOL'] . ' 202 Accepted'); -# Now do something with $source e.g. parse it for h-entry and h-card and store what you find. + # Now do something with $source e.g. parse it for h-entry and h-card and store what you find. -$logfile = './mentions.txt'; /* Make sure file is writeable */ + // TODO: test if $datetime is to be found in $source + // and then write the $twt to the $log + + $datetime = explode( ":~:text=", $_POST['source'] ); + $pattern = '/^'.$datetime[1].'\t(.*?)$/m'; + preg_match($pattern, $source, $twt); // $twt[1] contains your line. + + //preg_match('/^'.$datetime[1].'\t(.*?)$/m', $source, $twt); + + $logfile = './mentions.txt'; /* Make sure file is writeable */ + + $log = date("Y-m-d\TH:i:s\Z") . "\t" + ."You were mentioned in: ".$_POST['source'] + ."
" + ."> ". $twt[1] + //."Recived webmention from ".$_POST['source'] + //." mentioning ".$_POST['target'] + //." (IP: ".$_SERVER['REMOTE_ADDR'].")" + .PHP_EOL; + file_put_contents($logfile, $log, FILE_APPEND); + + + +# Send email fork: https://gist.github.com/otherjoel/9301d985622f0d3d1a09 -$log = date("Y-m-d\TH:i:s\Z") . "\t" - ."Recived webmention from ".$_POST['source'] - ." mentioning ".$_POST['target'] - ." (IP: ".$_SERVER['REMOTE_ADDR'].")".PHP_EOL; - file_put_contents($logfile, $log, FILE_APPEND); } else {