Update activitypub.extend.php

This commit is contained in:
Namhyeon Go 2022-07-05 16:24:27 +09:00 committed by GitHub
parent 351862c898
commit 560c722921
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -8,10 +8,13 @@ if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
// References: // References:
// * https://www.w3.org/TR/activitypub/ // * https://www.w3.org/TR/activitypub/
// * https://www.w3.org/TR/activitystreams-core/
// * https://www.w3.org/TR/activitystreams-vocabulary/
// * https://github.com/w3c/activitypub/issues/194 // * https://github.com/w3c/activitypub/issues/194
// * https://docs.joinmastodon.org/spec/webfinger/ // * https://docs.joinmastodon.org/spec/webfinger/
// * https://organicdesign.nz/ActivityPub_Code // * https://organicdesign.nz/ActivityPub_Code
// * https://socialhub.activitypub.rocks/t/posting-to-pleroma-inbox/1184 // * https://socialhub.activitypub.rocks/t/posting-to-pleroma-inbox/1184
// * https://github.com/broidHQ/integrations/tree/master/broid-schemas#readme
define("ACTIVITYPUB_INSTANCE_ID", md5_file(G5_DATA_PATH . "/dbconfig.php")); define("ACTIVITYPUB_INSTANCE_ID", md5_file(G5_DATA_PATH . "/dbconfig.php"));
define("ACTIVITYPUB_HOST", (empty(G5_DOMAIN) ? $_SERVER['HTTP_HOST'] : G5_DOMAIN)); define("ACTIVITYPUB_HOST", (empty(G5_DOMAIN) ? $_SERVER['HTTP_HOST'] : G5_DOMAIN));
@ -24,6 +27,7 @@ define("ACTIVITYPUB_G5_NEW_DAYS", (empty($config['cf_new_del']) ? 30 : $config['
define("ACTIVITYPUB_ACCESS_TOKEN", "server1.example.org=xxuPtHDkMgYQfcy9; server2.example.org=PC6ujkjQXhL6lUtS;"); define("ACTIVITYPUB_ACCESS_TOKEN", "server1.example.org=xxuPtHDkMgYQfcy9; server2.example.org=PC6ujkjQXhL6lUtS;");
define("NAMESPACE_ACTIVITYSTREAMS", "https://www.w3.org/ns/activitystreams"); define("NAMESPACE_ACTIVITYSTREAMS", "https://www.w3.org/ns/activitystreams");
define("NAMESPACE_ACTIVITYSTREAMS_PUBLIC", "https://www.w3.org/ns/activitystreams#Public"); define("NAMESPACE_ACTIVITYSTREAMS_PUBLIC", "https://www.w3.org/ns/activitystreams#Public");
define("ACTIVITYPUB_ENABLE_GEOLOCATION", true);
function activitypub_json_encode($arr) { function activitypub_json_encode($arr) {
return json_encode($arr); return json_encode($arr);
@ -264,7 +268,7 @@ function activitypub_http_post($url, $rawdata, $access_token = '') {
return activitypub_json_decode($response, true); return activitypub_json_decode($response, true);
} }
function activitypub_publish_content($content, $id, $mb, $_object = array(), $_added_to = array()) { function activitypub_publish_content($content, $id, $mb, $_added_object = array(), $_added_to = array()) {
// 컨텐츠 파싱 // 컨텐츠 파싱
$terms = activitypub_parse_content($content); $terms = activitypub_parse_content($content);
@ -306,13 +310,34 @@ function activitypub_publish_content($content, $id, $mb, $_object = array(), $_a
} }
} }
// 전문 생성 // 전문 생성 시작
$object = array_merge(array( $object = array(
"type" => "Note", "type" => "Note",
"generator" => "GNUBOARD5 ActivityPub Plugin (INSTANCE_ID: " . ACTIVITYPUB_INSTANCE_ID . ")",
"id" => $id, "id" => $id,
"attributedTo" => activitypub_get_url("user", array("mb_id" => $mb['mb_id'])), "attributedTo" => activitypub_get_url("user", array("mb_id" => $mb['mb_id'])),
"content" => $content "content" => $content,
), $_object); "icon" => activitypub_get_icon($mb)
);
// 위치정보가 활성화되어 있으면
if (ACTIVITYPUB_ENABLE_GEOLOCATION) {
/*
$object = array_merge($object, array(
"location" => array(
"name" => "",
"type" => "Place",
"longitude" => 12.34,
"latitude" => 56.78,
"altitude" => 90,
"units" => "m"
)
));
*/
}
// 전문 생성 완료
$object = array_merge($object, $_added_object);
// 외부로 보낼 전문 생성 // 외부로 보낼 전문 생성
$data = array( $data = array(
@ -454,7 +479,7 @@ function activitypub_add_activity($inbox = "inbox", $data, $mb = array("mb_id" =
} }
$wr_7 = implode(',', $receivers); $wr_7 = implode(',', $receivers);
// 상태 저장 // 상태 작업
// * 주어진 임무를 진행하기 전이라면: draft // * 주어진 임무를 진행하기 전이라면: draft
// * 일을 저지른 뒤라면: published // * 일을 저지른 뒤라면: published
$wr_8 = $status; $wr_8 = $status;
@ -499,6 +524,13 @@ function activitypub_add_activity($inbox = "inbox", $data, $mb = array("mb_id" =
sql_query($sql); sql_query($sql);
$wr_id = sql_insert_id(); $wr_id = sql_insert_id();
// 저장 전 데이터 처리
$now_utc_tz = str_replace('+00:00', 'Z', gmdate('c'));
if ($status == "published") {
$data['published'] = $now_utc_tz;
}
$data['updated'] = $now_utc_tz;
// 요청 전문은 파일로 저장 // 요청 전문은 파일로 저장
$raw_context = activitypub_json_encode($data); $raw_context = activitypub_json_encode($data);
$time_ms = floor(microtime(true) * 1000); $time_ms = floor(microtime(true) * 1000);
@ -535,11 +567,10 @@ function activitypub_add_activity($inbox = "inbox", $data, $mb = array("mb_id" =
return $wr_id; return $wr_id;
} }
function activitypub_get_activities($inbox = "inbox", $mb_id = '') { function activitypub_get_objects($inbox = "inbox", $mb_id = '') {
global $g5; global $g5;
// 반환할 변수 $items = array();
$activities = array();
// 정보 불러오기 // 정보 불러오기
$sql = ""; $sql = "";
@ -566,12 +597,21 @@ function activitypub_get_activities($inbox = "inbox", $mb_id = '') {
$filename = $row2['bf_file']; $filename = $row2['bf_file'];
$filepath = G5_DATA_PATH . "/file/" . ACTIVITYPUB_G5_BOARDNAME . "/" . $filename; $filepath = G5_DATA_PATH . "/file/" . ACTIVITYPUB_G5_BOARDNAME . "/" . $filename;
if(file_exists($filepath)) { if(file_exists($filepath)) {
array_push($activities, activitypub_json_decode(file_get_contents($filepath), true)); array_push($items, activitypub_json_decode(file_get_contents($filepath))['object']);
} }
} }
} }
// 전문 만들기
$context = array(
"@context" => NAMESPACE_ACTIVITYSTREAMS,
"summary" => "Latest items",
"type" => "Collection",
"totalItems" => count($items),
"items" => $items
);
return $activities; return $context;
} }
class _GNUBOARD_ActivityPub { class _GNUBOARD_ActivityPub {