1
0
mirror of https://github.com/Daichimarukana/uwuzu.git synced 2026-06-04 19:14:41 +00:00

uwuzu v1.6.0 Hapuego

This commit is contained in:
だいちまる
2025-08-05 13:46:18 +09:00
parent 0d7c0a8879
commit e15b52a205
70 changed files with 7406 additions and 5172 deletions
+12 -8
View File
@@ -1,22 +1,25 @@
RewriteEngine on RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}\.php -f RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [L] RewriteRule ^(.*)$ $1.php [L]
# --- アクセス制限ルール ---
RewriteRule ^\.htaccess$ - [F] RewriteRule ^\.htaccess$ - [F]
RewriteRule ^db\.php$ - [F] RewriteRule ^db\.php$ - [F]
RewriteRule ^settings_admin/CloudflareTurnstile_settings/ - [F] RewriteRule ^settings_admin/CloudflareTurnstile_settings/ - [F]
RewriteRule ^settings_admin/hCaptcha_settings/ - [F] RewriteRule ^settings_admin/hCaptcha_settings/ - [F]
RewriteRule ^settings_admin/plugin_settings/ - [F] RewriteRule ^settings_admin/plugin_settings/ - [F]
RewriteBase / # --- その他の独自ルーティング ---
RewriteRule ^(@\w+)$ /user/index.php?userid=$1 [QSA,L]
RewriteRule ^(@\w+)$ /user/index.php?uwuzuid=$1 [QSA,L] RewriteRule ^@([^@]+)@([^/]+)$ /user/index.php?userid=$1&domain=$2 [QSA,L]
RewriteRule ^!(\w+)~(\w+)$ /ueuse/index.php?ueuseid=$1&touser=$2 [QSA,L] RewriteRule ^!(\w+)~(\w+)$ /ueuse/index.php?ueuseid=$1&touser=$2 [QSA,L]
RewriteRule ^!(\w+)$ /ueuse/index.php?ueuseid=$1 [QSA,L] RewriteRule ^!(\w+)$ /ueuse/index.php?ueuseid=$1 [QSA,L]
# --- エラーハンドリング ---
ErrorDocument 400 /errorpage/httperror.php ErrorDocument 400 /errorpage/httperror.php
ErrorDocument 401 /errorpage/httperror.php ErrorDocument 401 /errorpage/httperror.php
ErrorDocument 403 /errorpage/httperror.php ErrorDocument 403 /errorpage/httperror.php
@@ -25,4 +28,5 @@ ErrorDocument 413 /errorpage/httperror.php
ErrorDocument 500 /errorpage/httperror.php ErrorDocument 500 /errorpage/httperror.php
ErrorDocument 503 /errorpage/httperror.php ErrorDocument 503 /errorpage/httperror.php
Header set X-FRAME-OPTIONS "DENY" # --- セキュリティヘッダ ---
Header set X-FRAME-OPTIONS "DENY"
+22
View File
@@ -0,0 +1,22 @@
<?php
$serversettings_file = __DIR__ . "/../server/serversettings.ini";
$serversettings = parse_ini_file($serversettings_file, true);
require(__DIR__ . '/../db.php');
require(__DIR__ . "/../function/function.php");
blockedIP($_SERVER['REMOTE_ADDR']);
if(safetext($serversettings["serverinfo"]["server_activitypub"]) === "true"){
header("Content-Type: application/xml; charset=UTF-8");
header("Access-Control-Allow-Origin: *");
$domain = $_SERVER['HTTP_HOST'];
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">';
echo '<Link rel="lrdd" type="application/xrd+xml" template="https://'.$domain.'/.well-known/webfinger?resource={uri}"/>';
echo '</XRD>';
}else{
header("HTTP/1.1 410 Gone");
}
?>
+1 -20
View File
@@ -1,22 +1,3 @@
<?php <?php
$serversettings_file = "../../server/serversettings.ini"; require('../host-meta.php');
$serversettings = parse_ini_file($serversettings_file, true);
require('../../db.php');
require("../../function/function.php");
blockedIP($_SERVER['REMOTE_ADDR']);
if(safetext($serversettings["serverinfo"]["server_activitypub"]) === "true"){
header("Content-Type: application/xml; charset=UTF-8");
header("Access-Control-Allow-Origin: *");
$domain = $_SERVER['HTTP_HOST'];
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">';
echo '<Link rel="lrdd" type="application/xrd+xml" template="https://'.$domain.'/.well-known/webfinger?resource={uri}"/>';
echo '</XRD>';
}else{
header("HTTP/1.1 410 Gone");
}
?> ?>
+28
View File
@@ -0,0 +1,28 @@
<?php
$serversettings_file = __DIR__ . "/../server/serversettings.ini";
$serversettings = parse_ini_file($serversettings_file, true);
require(__DIR__ . '/../db.php');
require(__DIR__ . "/../function/function.php");
blockedIP($_SERVER['REMOTE_ADDR']);
if(safetext($serversettings["serverinfo"]["server_activitypub"]) === "true"){
header("Content-Type: application/activity+json; charset=utf-8");
header("Access-Control-Allow-Origin: *");
$domain = $_SERVER['HTTP_HOST'];
$item = array(
"links" => [
array(
"rel" => "http://nodeinfo.diaspora.software/ns/schema/2.1",
"href" => "https://".$domain."/nodeinfo/2.1",
),
],
);
echo json_encode($item, JSON_UNESCAPED_UNICODE);
}else{
header("HTTP/1.1 410 Gone");
}
?>
+1 -26
View File
@@ -1,28 +1,3 @@
<?php <?php
$serversettings_file = "../../server/serversettings.ini"; require('../nodeinfo.php');
$serversettings = parse_ini_file($serversettings_file, true);
require('../../db.php');
require("../../function/function.php");
blockedIP($_SERVER['REMOTE_ADDR']);
if(safetext($serversettings["serverinfo"]["server_activitypub"]) === "true"){
header("Content-Type: application/activity+json; charset=utf-8");
header("Access-Control-Allow-Origin: *");
$domain = $_SERVER['HTTP_HOST'];
$item = array(
"links" => [
array(
"rel" => "http://nodeinfo.diaspora.software/ns/schema/2.1",
"href" => "https://".$domain."/nodeinfo/2.1",
),
],
);
echo json_encode($item, JSON_UNESCAPED_UNICODE);
}else{
header("HTTP/1.1 410 Gone");
}
?> ?>
+47
View File
@@ -0,0 +1,47 @@
<?php
$serversettings_file = __DIR__ . "/../server/serversettings.ini";
$serversettings = parse_ini_file($serversettings_file, true);
require(__DIR__ . '/../db.php');
require(__DIR__ . "/../function/function.php");
blockedIP($_SERVER['REMOTE_ADDR']);
if(safetext($serversettings["serverinfo"]["server_activitypub"]) === "true"){
header("Content-Type: application/jrd+json; charset=utf-8");
header("Access-Control-Allow-Origin: *");
$domain = $_SERVER['HTTP_HOST'];
// データベースに接続
try {
$option = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_MULTI_STATEMENTS => false
);
$pdo = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, $option);
} catch (PDOException $e) {
// 接続エラーのときエラー内容を取得する
$error_message[] = $e->getMessage();
}
if(isset($_GET['resource'])){
$user = htmlentities($_GET['resource']);
$userid = str_replace('acct:','', str_replace('@'.$domain.'', '', $user));
$item = array(
"subject" => "acct:".$userid.'@'.$domain.'',
"links" => [
array(
"rel" => "self",
"type" => "application/activity+json",
"href" => "https://".$domain."/actor/?actor=@".$userid.'',
),
],
);
echo json_encode($item, JSON_UNESCAPED_UNICODE);
}
}else{
header("HTTP/1.1 410 Gone");
}
?>
+1 -45
View File
@@ -1,47 +1,3 @@
<?php <?php
$serversettings_file = "../../server/serversettings.ini"; require('../webfinger.php');
$serversettings = parse_ini_file($serversettings_file, true);
require('../../db.php');
require("../../function/function.php");
blockedIP($_SERVER['REMOTE_ADDR']);
if(safetext($serversettings["serverinfo"]["server_activitypub"]) === "true"){
header("Content-Type: application/jrd+json; charset=utf-8");
header("Access-Control-Allow-Origin: *");
$domain = $_SERVER['HTTP_HOST'];
// データベースに接続
try {
$option = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_MULTI_STATEMENTS => false
);
$pdo = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, $option);
} catch (PDOException $e) {
// 接続エラーのときエラー内容を取得する
$error_message[] = $e->getMessage();
}
if(isset($_GET['resource'])){
$user = htmlentities($_GET['resource']);
$userid = str_replace('acct:','', str_replace('@'.$domain.'', '', $user));
$item = array(
"subject" => "acct:".$userid.'@'.$domain.'',
"links" => [
array(
"rel" => "self",
"type" => "application/activity+json",
"href" => "https://".$domain."/actor/?actor=@".$userid.'',
),
],
);
echo json_encode($item, JSON_UNESCAPED_UNICODE);
}
}else{
header("HTTP/1.1 410 Gone");
}
?> ?>
+1 -1
View File
@@ -63,7 +63,7 @@ if(safetext($serversettings["serverinfo"]["server_activitypub"]) === "true"){
"type" => "Person", "type" => "Person",
"preferredUsername" => "".$userData["userid"]."", "preferredUsername" => "".$userData["userid"]."",
"name" => "".$userData["username"]."", "name" => "".$userData["username"]."",
"summary" => "".nl2br($userData["profile"])."", "summary" => "".preg_replace('/\r\n/i', "", nl2br($userData["profile"]))."",
"followers" => "https://".$domain."/user/followers/?actor=@".$userid."", "followers" => "https://".$domain."/user/followers/?actor=@".$userid."",
"following" => "https://".$domain."/user/following/?actor=@".$userid."", "following" => "https://".$domain."/user/following/?actor=@".$userid."",
"inbox" => "https://".$domain."/user/inbox/?actor=@".$userid."", "inbox" => "https://".$domain."/user/inbox/?actor=@".$userid."",
+327
View File
@@ -0,0 +1,327 @@
<?php
function random_token($length = 64)
{
return substr(str_shuffle('1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), 0, $length);
}
$domain = $_SERVER['HTTP_HOST'];
$serversettings_file = "../server/serversettings.ini";
$serversettings = parse_ini_file($serversettings_file, true);
function random($length){
return substr(str_shuffle('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'), 0, $length);
}
require('../db.php');
require("../function/function.php");
// 変数の初期化
$datetime = array();
$user_name = null;
$message = array();
$message_data = null;
$error_message = array();
$pdo = null;
$stmt = null;
$res = null;
$option = null;
session_name('uwuzu_s_id');
session_set_cookie_params([
'lifetime' => 0,
'path' => '/',
'domain' => '',
'secure' => true,
'httponly' => true,
'samesite' => 'Lax'
]);
session_start();
session_regenerate_id(true);
// データベースに接続
try {
$option = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_MULTI_STATEMENTS => false
);
$pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option);
} catch(PDOException $e) {
// 接続エラーのときエラー内容を取得する
$error_message[] = $e->getMessage();
}
//ログイン認証---------------------------------------------------
blockedIP($_SERVER['REMOTE_ADDR']);
$is_login = uwuzuUserLogin($_SESSION, $_COOKIE, $_SERVER['REMOTE_ADDR'], "user");
if($is_login === false){
header("Location: ../index.php");
exit;
}else{
$userid = safetext($is_login['userid']);
$username = safetext($is_login['username']);
$loginid = safetext($is_login["loginid"]);
$role = safetext($is_login["role"]);
$sacinfo = safetext($is_login["sacinfo"]);
$myblocklist = safetext($is_login["blocklist"]);
$myfollowlist = safetext($is_login["follow"]);
$is_Admin = safetext($is_login["admin"]);
}
$notiQuery = $pdo->prepare("SELECT COUNT(*) as notification_count FROM notification WHERE touserid = :userid AND userchk = 'none'");
$notiQuery->bindValue(':userid', $userid);
$notiQuery->execute();
$notiData = $notiQuery->fetch(PDO::FETCH_ASSOC);
$notificationcount = $notiData['notification_count'];
if( !empty($pdo) ) {
// データベース接続の設定
$dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
));
$userQuery = $dbh->prepare("SELECT userid,role,datetime FROM account WHERE userid = :userid");
$userQuery->bindValue(':userid', $userid);
$userQuery->execute();
$userData = $userQuery->fetch();
}
$is_trueclient = false;
if(!(empty($_GET["session"])) && !(empty($_GET["client"])) && !(empty($_GET["scope"]))){
$is_trueclient = true;
$session_code = safetext($_GET["session"]);
if(strlen($session_code) > 512){
$is_trueclient = false;
}
$client_name = safetext($_GET["client"]);
if(isset($_GET["icon"])){
$client_icon = safetext(urldecode($_GET["icon"]));
}else{
$client_icon = "../img/sysimage/errorimage/emoji_404.png";
}
if(isset($_GET["scope"])){
$client_scope_base = safetext(urldecode($_GET["scope"]));
$client_scope_base = array_unique(array_map('trim', explode(",", $client_scope_base)));
$client_scope = [];
$securityScopes = ["write:me", "write:ueuse", "write:follow", "write:favorite", "write:notifications", "write:bookmark", "read:bookmark"];
$securityScopesView = false;
foreach ($client_scope_base as $scope) {
if (GetAPIScopes($scope)) {
$client_scope[] = GetAPIScopes($scope);
if($securityScopesView === false && in_array($scope, $securityScopes)){
$securityScopesView = true;
}
} else {
$client_scope[] = "未知のスコープ ($scope)";
}
}
}else{
$client_scope[] = "権限なし";
}
if(isset($_GET["about"])){
$client_about = safetext(urldecode($_GET["about"]));
}else{
$client_about = "クライアントによる説明はありません。";
}
if(isset($_GET["callback"])){
$client_callback = safetext(urldecode($_GET["callback"]));
}else{
$client_callback = null;
}
}else{
$is_trueclient = false;
}
if(!(isset($is_done))){
$is_done = false;
}
if($is_trueclient === true){
if( !empty($_POST['allow_submit']) ) {
$tokenQuery = $pdo->prepare("SELECT userid, token FROM api WHERE sessionid = :sessionid");
$tokenQuery->bindValue(':sessionid', $session_code);
$tokenQuery->execute();
$tokenData = $tokenQuery->fetch();
if(!(empty($tokenData["userid"]))){
$error_message[] = "不正なリクエストです。";
}
foreach ($client_scope_base as $scope) {
if (GetAPIScopes($scope)) {
$client_scope_done[] = $scope;
}else{
$client_scope_done = array();
}
}
$client_scope_done = implode(",", $client_scope_done);
if(empty($client_scope_done)){
$error_message[] = "不正な権限要求です。";
}
if($role == "ice"){
$error_message[] = "アカウントが凍結されているためAPIトークンの発行は行えません。";
}
if(empty($error_message)){
$pdo->beginTransaction();
try {
$uniqid = createUniqId();
$token = GenAPIToken();
$datetime = date("Y-m-d H:i:s");
$stmt = $pdo->prepare("INSERT INTO api (uniqid, userid, token, scope, datetime, clientname, sessionid) VALUES (:uniqid, :userid, :token, :scope, :datetime, :clientname, :sessionid)");
$stmt->bindParam(':uniqid', $uniqid, PDO::PARAM_STR);
$stmt->bindParam(':userid', $userid, PDO::PARAM_STR);
$stmt->bindParam(':token', $token, PDO::PARAM_STR);
$stmt->bindParam(':scope', $client_scope_done, PDO::PARAM_STR);
$stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR);
$stmt->bindParam(':clientname', $client_name, PDO::PARAM_STR);
$stmt->bindParam(':sessionid', $session_code, PDO::PARAM_STR);
$res = $stmt->execute();
$res = $pdo->commit();
} catch(Exception $e) {
$pdo->rollBack();
}
if($res) {
if(!(empty($client_callback))){
header("Location: ".$client_callback."");
exit;
}else{
$is_done = true;
}
}else{
$is_done = false;
actionLog($userid, "error", "api/auth", $client_name, $e->getMessage(), 3);
$error_message[] = "APIトークンの生成に失敗しました...(REGISTED_DAME)";
}
}
}
}
require('../logout/logout.php');
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="../../css/home.css">
<script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1">
<script src="../js/jquery-min.js"></script>
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title>アクセス許可確認 - <?php echo safetext($serversettings["serverinfo"]["server_name"]);?></title>
</head>
<body>
<?php require('../require/leftbox.php');?>
<main>
<?php if( !empty($error_message) ): ?>
<ul class="errmsg">
<?php foreach( $error_message as $value ): ?>
<p>・ <?php echo $value; ?></p>
<?php endforeach; ?>
</ul>
<?php endif; ?>
<form class="formarea" enctype="multipart/form-data" method="post">
<h1>アクセス許可確認</h1>
<?php if($is_trueclient === true && $is_done === false && !($role == "ice")){?>
<p>以下のサービスにあなたのアカウントを使わせてもいいですか...?</p>
<div class="auth_clientbox">
<div class="flexbox">
<img src="<?php echo $client_icon;?>">
<p><?php echo $client_name;?></p>
</div>
<div class="about">
<div class="p2">説明</div>
<p><?php echo nl2br($client_about);?></p>
<div class="p2">要求している権限</div>
<div class="scopebox">
<?php
foreach ($client_scope as $value) {
echo "<p>- " . safetext($value) . "</p>";
}
?>
</div>
</div>
<div class="accountbox">
<div class="p2">ログイン中のアカウント</div>
<div class="flexbox">
<img src="<?php echo localcloudURL($is_login["iconname"]);?>">
<p><?php echo $username."(@".$userid.")";?></p>
</div>
</div>
<?php if(!(empty($client_callback))){?>
<div class="callbackbox">
<div class="p2">許可すると以下のURLにリダイレクトされます</div>
<p><?php echo safetext($client_callback);?></p>
</div>
<?php }?>
</div>
<?php if($securityScopesView === true){?>
<div class="errmsg justfit">
<p>このサービスは<b>あなたに代わってアカウントの操作を行うことや、一部の情報を閲覧することができます</b>。アクセスを許可するかよく考えてください。</p>
</div>
<?php }?>
<div class="btnbox flexbox">
<a href="javascript:history.back();" class="sirobutton">戻る</a>
<input type="submit" class = "irobutton" name="allow_submit" value="許可">
</div>
<?php }elseif($is_trueclient === false){?>
<p>不正なクライアントによるアクセスです。</p>
<div class="btnbox">
<a href="javascript:history.back();" class="sirobutton">戻る</a>
</div>
<?php }elseif($is_done === true){?>
<p>許可が完了しました!<br>
このページを閉じてもとのサービスに戻って大丈夫です。</p>
<?php }elseif($role == "ice"){?>
<p>アカウントが凍結されているため、アクセスの許可は行えません。</p>
<?php }else{?>
<p>不明なエラーです。はじめからやり直してください。</p>
<?php }?>
</form>
</main>
<?php require('../require/rightbox.php');?>
<?php require('../require/botbox.php');?>
<?php require('../require/noscript_modal.php');?>
</body>
</html>
<script>
$(document).ready(function() {
$(function(){
$("input"). keydown(function(e) {
if ((e.which && e.which === 13) || (e.keyCode && e.keyCode === 13)) {
return false;
} else {
return true;
}
});
});
});
</script>
+20 -26
View File
@@ -1,15 +1,15 @@
<?php <?php
$domain = $_SERVER['HTTP_HOST']; $domain = $_SERVER['HTTP_HOST'];
require('../../db.php'); require(__DIR__ . '/../../db.php');
//関数呼び出し //関数呼び出し
//- Base64_mime //- Base64_mime
require('../../function/function.php'); require(__DIR__ . '/../../function/function.php');
blockedIP($_SERVER['REMOTE_ADDR']); blockedIP($_SERVER['REMOTE_ADDR']);
$mojisizefile = "../../server/textsize.txt"; $mojisizefile = __DIR__ . "/../../server/textsize.txt";
$banurldomainfile = "../../server/banurldomain.txt"; $banurldomainfile = __DIR__ . "/../../server/banurldomain.txt";
$banurl_info = file_get_contents($banurldomainfile); $banurl_info = file_get_contents($banurldomainfile);
$banurl = preg_split("/\r\n|\n|\r/", $banurl_info); $banurl = preg_split("/\r\n|\n|\r/", $banurl_info);
@@ -44,6 +44,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -53,6 +54,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -61,28 +63,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
session_start(); session_start();
if( !empty($pdo) ) { if( !empty($pdo) ) {
$userQuery = $pdo->prepare("SELECT username, userid, role, follow, follower FROM account WHERE token = :token"); $AuthData = APIAuth($pdo, $token, "write:favorite");
$userQuery->bindValue(':token', $token); if($AuthData[0] === true){
$userQuery->execute(); $userData = $AuthData[2];
$userData = $userQuery->fetch();
if(empty($userData["userid"])){
$err = "token_invalid";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}elseif($userData["role"] === "ice"){
$err = "this_account_has_been_frozen";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}else{
//本文取得
if(!(empty($_GET['uniqid']))){ if(!(empty($_GET['uniqid']))){
$fav_uniqid = safetext($_GET['uniqid']); $fav_uniqid = safetext($_GET['uniqid']);
}elseif(!(empty($post_json["uniqid"]))){ }elseif(!(empty($post_json["uniqid"]))){
@@ -101,6 +84,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
@@ -108,16 +92,26 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
}else{
$err = $AuthData[1];
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
} }
}else{ }else{
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
+20 -25
View File
@@ -1,15 +1,15 @@
<?php <?php
$domain = $_SERVER['HTTP_HOST']; $domain = $_SERVER['HTTP_HOST'];
require('../../db.php'); require(__DIR__ . '/../../db.php');
//関数呼び出し //関数呼び出し
//- Base64_mime //- Base64_mime
require('../../function/function.php'); require(__DIR__ . '/../../function/function.php');
blockedIP($_SERVER['REMOTE_ADDR']); blockedIP($_SERVER['REMOTE_ADDR']);
$mojisizefile = "../../server/textsize.txt"; $mojisizefile = __DIR__ . "/../../server/textsize.txt";
$banurldomainfile = "../../server/banurldomain.txt"; $banurldomainfile = __DIR__ . "/../../server/banurldomain.txt";
$banurl_info = file_get_contents($banurldomainfile); $banurl_info = file_get_contents($banurldomainfile);
$banurl = preg_split("/\r\n|\n|\r/", $banurl_info); $banurl = preg_split("/\r\n|\n|\r/", $banurl_info);
@@ -44,6 +44,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -53,6 +54,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -61,27 +63,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
session_start(); session_start();
if( !empty($pdo) ) { if( !empty($pdo) ) {
$userQuery = $pdo->prepare("SELECT username, userid, role, follow, follower FROM account WHERE token = :token"); $AuthData = APIAuth($pdo, $token, "read:ueuse");
$userQuery->bindValue(':token', $token); if($AuthData[0] === true){
$userQuery->execute(); $userData = $AuthData[2];
$userData = $userQuery->fetch();
if(empty($userData["userid"])){
$err = "token_invalid";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}elseif($userData["role"] === "ice"){
$err = "this_account_has_been_frozen";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}else{
//本文取得 //本文取得
if(!(empty($_GET['uniqid']))){ if(!(empty($_GET['uniqid']))){
$fav_uniqid = safetext($_GET['uniqid']); $fav_uniqid = safetext($_GET['uniqid']);
@@ -101,6 +85,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
@@ -108,16 +93,26 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
}else{
$err = $AuthData[1];
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
} }
}else{ }else{
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
+17 -27
View File
@@ -1,8 +1,8 @@
<?php <?php
$domain = $_SERVER['HTTP_HOST']; $domain = $_SERVER['HTTP_HOST'];
require('../../db.php'); require(__DIR__ . '/../../db.php');
require("../../function/function.php"); require(__DIR__ . "/../../function/function.php");
blockedIP($_SERVER['REMOTE_ADDR']); blockedIP($_SERVER['REMOTE_ADDR']);
header("Content-Type: application/json; charset=utf-8"); header("Content-Type: application/json; charset=utf-8");
@@ -35,6 +35,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -44,6 +45,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -52,31 +54,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
session_start(); session_start();
if( !empty($pdo) ) { if( !empty($pdo) ) {
$userQuery = $pdo->prepare("SELECT username, userid, role FROM account WHERE token = :token"); $AuthData = APIAuth($pdo, $token, "read:me");
$userQuery->bindValue(':token', $token); if($AuthData[0] === true){
$userQuery->execute(); $userdata = $AuthData[2];
$userData = $userQuery->fetch();
if(empty($userData["userid"])){
$err = "token_invalid";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}elseif($userData["role"] === "ice"){
$err = "this_account_has_been_frozen";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}else{
$DataQuery = $pdo->prepare("SELECT username,userid,profile,datetime,follow,follower,iconname,headname,role,sacinfo,admin FROM account WHERE userid = :userid");
$DataQuery->bindValue(':userid', $userData["userid"]);
$DataQuery->execute();
$userdata = $DataQuery->fetch();
if (empty($userdata)){ if (empty($userdata)){
$response = array( $response = array(
@@ -158,6 +138,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$All_ueuse = $allueuse->rowCount(); $All_ueuse = $allueuse->rowCount();
$response = array( $response = array(
'success' => true,
'username' => decode_yajirushi(htmlspecialchars_decode($userdata["username"])), 'username' => decode_yajirushi(htmlspecialchars_decode($userdata["username"])),
'userid' => decode_yajirushi(htmlspecialchars_decode($userdata["userid"])), 'userid' => decode_yajirushi(htmlspecialchars_decode($userdata["userid"])),
'profile' => decode_yajirushi(htmlspecialchars_decode($userdata["profile"])), 'profile' => decode_yajirushi(htmlspecialchars_decode($userdata["profile"])),
@@ -175,6 +156,14 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
'language' => "ja-JP", 'language' => "ja-JP",
); );
} }
echo json_encode($response, JSON_UNESCAPED_UNICODE);
}else{
$err = $AuthData[1];
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
} }
@@ -182,6 +171,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
+171
View File
@@ -0,0 +1,171 @@
<?php
$domain = $_SERVER['HTTP_HOST'];
require(__DIR__ . '/../../../db.php');
require(__DIR__ . "/../../../function/function.php");
$serversettings_file = __DIR__ . "/../../../server/serversettings.ini";
$serversettings = parse_ini_file($serversettings_file, true);
blockedIP($_SERVER['REMOTE_ADDR']);
header("Content-Type: application/json; charset=utf-8");
header("Access-Control-Allow-Origin: *");
$pdo = null;
try {
$option = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_MULTI_STATEMENTS => false
);
$pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option);
} catch(PDOException $e) {
// 接続エラーのときエラー内容を取得する
$error_message[] = $e->getMessage();
}
$Get_Post_Json = file_get_contents("php://input");
if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
//トークン取得
if(!(empty($_GET['token']))){
$token = safetext($_GET['token']);
}else{
$post_json = json_decode($Get_Post_Json, true);
if(isset($post_json["token"])){
$token = safetext($post_json["token"]);
}else{
$err = "input_not_found";
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
}
if($token == ""){
$err = "input_not_found";
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
if(!(empty($_GET['limit']))){
$limit = (int)$_GET['limit'];
}elseif(!(empty($post_json["limit"]))){
$limit = (int)$post_json["limit"];
}else{
$limit = 25;
}
if($limit > 100){
$limit = 100;
}
if(!(empty($_GET['page']))){
$page = (int)$_GET['page'];
}elseif(!(empty($post_json["page"]))){
$page = (int)$post_json["page"];
}else{
$page = 1;
}
$offset = ($page - 1) * $limit;
session_start();
if( !empty($pdo) ) {
$AuthData = APIAuth($pdo, $token, "read:notifications");
if($AuthData[0] === true){
$userData = $AuthData[2];
$messageQuery = $pdo->prepare("SELECT fromuserid,title,msg,url,datetime,userchk,category FROM notification WHERE touserid = :userid ORDER BY datetime DESC LIMIT :offset, :itemsPerPage");
$messageQuery->bindValue(':userid', $userData["userid"], PDO::PARAM_STR);
$messageQuery->bindValue(':offset', $offset, PDO::PARAM_INT);
$messageQuery->bindValue(':itemsPerPage', $limit, PDO::PARAM_INT);
$messageQuery->execute();
// トランザクション開始
$pdo->beginTransaction();
while ($row = $messageQuery->fetch(PDO::FETCH_ASSOC)) {
$messages[] = $row;
}
if (!empty($messages)) {
$response = array(
'success' => true,
); // ループ外で $response を初期化
foreach ($messages as $notificationdata) {
$userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, role FROM account WHERE userid = :userid");
$userQuery->bindValue(':userid', $notificationdata["fromuserid"]);
$userQuery->execute();
$userData = $userQuery->fetch();
if ($userData) {
$now_userdata = array(
"username" => decode_yajirushi(htmlspecialchars_decode($userData['username'])),
"userid" => decode_yajirushi(htmlspecialchars_decode($userData['userid'])),
"user_icon" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['iconname'])))),
"user_header" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))),
);
}else if($notificationdata["fromuserid"] === "uwuzu-fromsys"){
$now_userdata = array(
"username" => decode_yajirushi(htmlspecialchars_decode($serversettings["serverinfo"]["server_name"])),
"userid" => "uwuzu-fromsys",
"user_icon" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($serversettings["serverinfo"]["server_icon"])))),
"user_header" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($serversettings["serverinfo"]["server_head"])))),
);
}else{
$now_userdata = array();
}
if($notificationdata["userchk"] === "done"){
$userchk = true;
}else{
$userchk = false;
}
$item = [
'from' => $now_userdata,
'category' => decode_yajirushi(htmlspecialchars_decode($notificationdata["category"])),
'title' => decode_yajirushi(htmlspecialchars_decode($notificationdata["title"])),
'text' => decode_yajirushi(htmlspecialchars_decode($notificationdata["msg"])),
'datetime' => decode_yajirushi(htmlspecialchars_decode($notificationdata["datetime"])),
'is_checked' => $userchk,
];
$response[] = $item; // ループ内で $response にデータを追加
}
echo json_encode($response, JSON_UNESCAPED_UNICODE);
} else {
$err = "notification_not_found";
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
}
}else{
$err = $AuthData[1];
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
}
}
}else{
$err = "input_not_found";
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
}
?>
+123
View File
@@ -0,0 +1,123 @@
<?php
$domain = $_SERVER['HTTP_HOST'];
require(__DIR__ . '/../../../db.php');
require(__DIR__ . "/../../../function/function.php");
blockedIP($_SERVER['REMOTE_ADDR']);
header("Content-Type: application/json; charset=utf-8");
header("Access-Control-Allow-Origin: *");
$pdo = null;
try {
$option = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_MULTI_STATEMENTS => false
);
$pdo = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, $option);
} catch (PDOException $e) {
// 接続エラーのときエラー内容を取得する
$error_message[] = $e->getMessage();
}
$Get_Post_Json = file_get_contents("php://input");
if (isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
//トークン取得
if (!(empty($_GET['token']))) {
$token = safetext($_GET['token']);
} else {
$post_json = json_decode($Get_Post_Json, true);
if (isset($post_json["token"])) {
$token = safetext($post_json["token"]);
} else {
$err = "input_not_found";
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
}
if ($token == "") {
$err = "input_not_found";
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
if (!(empty($_GET['limit']))) {
$limit = (int)$_GET['limit'];
} elseif (!(empty($post_json["limit"]))) {
$limit = (int)$post_json["limit"];
} else {
$limit = 25;
}
if ($limit > 100) {
$limit = 100;
}
if (!(empty($_GET['page']))) {
$page = (int)$_GET['page'];
} elseif (!(empty($post_json["page"]))) {
$page = (int)$post_json["page"];
} else {
$page = 1;
}
$offset = ($page - 1) * $limit;
session_start();
if (!empty($pdo)) {
$AuthData = APIAuth($pdo, $token, "write:notifications");
if ($AuthData[0] === true) {
$userData = $AuthData[2];
$pdo->beginTransaction();
try {
$stmt = $pdo->prepare("UPDATE notification SET userchk = 'done' WHERE touserid = :userid;");
$stmt->bindValue(':userid', $userData["userid"], PDO::PARAM_STR);
$res = $stmt->execute();
if ($res) {
$pdo->commit();
$response = array(
'success' => true
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
} else {
$pdo->rollBack();
$err = "update_failed";
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
} catch (PDOException $e) {
// 接続エラーのときエラー内容を取得する
$error_message[] = $e->getMessage();
}
} else {
$err = $AuthData[1];
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
}
}
} else {
$err = "input_not_found";
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
}
+443
View File
@@ -0,0 +1,443 @@
<?php
$domain = $_SERVER['HTTP_HOST'];
require(__DIR__ . '/../../../db.php');
require(__DIR__ . "/../../../function/function.php");
blockedIP($_SERVER['REMOTE_ADDR']);
header("Content-Type: application/json; charset=utf-8");
header("Access-Control-Allow-Origin: *");
$pdo = null;
$error_message = array();
try {
$option = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_MULTI_STATEMENTS => false
);
$pdo = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, $option);
} catch (PDOException $e) {
// 接続エラーのときエラー内容を取得する
$error_message[] = $e->getMessage();
}
$Get_Post_Json = file_get_contents("php://input");
if (isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
//トークン取得
if (!(empty($_GET['token']))) {
$token = safetext($_GET['token']);
} else {
$post_json = json_decode($Get_Post_Json, true);
if (isset($post_json["token"])) {
$token = safetext($post_json["token"]);
} else {
$err = "input_not_found";
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
}
if ($token == "") {
$err = "input_not_found";
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
if (!empty($pdo)) {
$AuthData = APIAuth($pdo, $token, "write:me");
if ($AuthData[0] === true) {
if(file_exists(__DIR__ . "/../../../settings_admin/plugin_settings/amazons3_settings.php")){
require_once __DIR__ . '/../../../settings_admin/plugin_settings/amazons3_settings.php';
if(AMS3_CHKS == "true"){
if(file_exists(__DIR__ . "/../../../plugin/aws/aws-autoloader.php")){
require_once __DIR__ . '/../../../plugin/aws/aws-autoloader.php';
}else{
actionLog(null, "error", "settings", null, "AWS SDK for PHPが見つかりませんでした!", 4);
}
}
}else{
actionLog(null, "error", "settings", null, "amazons3_settings.phpが見つかりませんでした!", 3);
}
$userData = $AuthData[2];
$userid = $userData["userid"];
$add_sql = array();
if (!(empty($_GET['username']))) {
$username = safetext($_GET['username']);
} elseif (!(empty($post_json["username"]))) {
$username = safetext($post_json["username"]);
} else {
$username = null;
}
// ユーザーネームの入力チェック
if (!($username === null)) {
if (empty($username)) {
$error_message[] = '表示名を入力してください。(USERNAME_INPUT_PLEASE)';
} else {
// 文字数を確認
if (50 < mb_strlen($username, 'UTF-8')) {
$error_message[] = 'ユーザーネームは50文字以内で入力してください。(USERNAME_OVER_MAX_COUNT)';
}
}
$add_sql[] = "username = :username";
}
if (!(empty($_GET['profile']))) {
$profile = safetext($_GET['profile']);
} elseif (!(empty($post_json["profile"]))) {
$profile = safetext($post_json["profile"]);
} else {
$profile = null;
}
if (!($profile === null)) {
if (1024 < mb_strlen($profile, 'UTF-8')) {
$error_message[] = 'プロフィールは1024文字以内で入力してください。(INPUT_OVER_MAX_COUNT)';
}
$add_sql[] = "profile = :profile";
}
if (!(empty($post_json["icon"]))) {
$imageData = base64_decode($post_json["icon"], true);
$tmpFilePath = tempnam(sys_get_temp_dir(), 'upload_' . createUniqId());
file_put_contents($tmpFilePath, $imageData);
$IconFiles = [
'name' => 'upload.png',
'type' => check_mime($tmpFilePath),
'tmp_name' => $tmpFilePath,
'error' => UPLOAD_ERR_OK,
'size' => strlen($imageData),
];
} else {
$IconFiles = array();
}
if (isset($IconFiles)) {
if (!(empty($IconFiles['name']))) {
$uploadedFile = $IconFiles;
if (check_mime($uploadedFile['tmp_name'])) {
$extension = pathinfo($uploadedFile['name'], PATHINFO_EXTENSION);
delete_exif($extension, $uploadedFile['tmp_name']);
resizeImage($uploadedFile['tmp_name'], 512, 512);
if (AMS3_CHKS == "true") {
$usericonurl = getUserData($pdo, $userid)["iconname"];
if (filter_var($usericonurl, FILTER_VALIDATE_URL)) {
$s3delresult = deleteAmazonS3($usericonurl);
} else {
$s3delresult = true;
}
if ($s3delresult == true) {
$s3result = uploadAmazonS3($uploadedFile['tmp_name']);
} else {
$s3result = false;
}
} else {
if (check_mime($uploadedFile['tmp_name']) == "image/webp") {
$newFilename = createUniqId() . '-' . $userid . '.webp';
} else {
$newFilename = createUniqId() . '-' . $userid . '.' . $extension;
}
$uploadedPath = 'usericons/' . $newFilename;
$result = rename($uploadedFile['tmp_name'], __DIR__ . '/../../../' . $uploadedPath);
if ($result) {
$iconName = $uploadedPath; // 保存されたファイルのパスを使用
$currentIconPath = getUserData($pdo, $userid)["iconname"];
} else {
$errnum = $uploadedFile['error'];
$errcode = "ERROR";
switch ($errnum) {
case 1:
$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";
break;
case 2:
$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";
break;
case 3:
$errcode = "FILE_SUKOSHIDAKE_UPLOAD";
break;
case 4:
$errcode = "FILE_UPLOAD_DEKINAKATTA";
break;
case 6:
$errcode = "TMP_FOLDER_NAI";
break;
case 7:
$errcode = "FILE_KAKIKOMI_SIPPAI";
break;
case 8:
$errcode = "PHPINFO()_KAKUNIN";
break;
case 0:
// 成功だったのに move_uploaded_file() が失敗した
if (!is_uploaded_file($uploadedFile['tmp_name'])) {
$errcode = "TMP_FILE_NAI";
} elseif (!is_writable(__DIR__ . '/../../../usericons/')) {
$errcode = "SAVE_FOLDER_KAKIKOMI_KENNAI";
} else {
$errcode = "MOVE_UPLOAD_FILE_SIPPAI";
}
break;
}
$error_message[] = 'アップロード失敗!(1)エラーコード:' . $errcode . '';
}
}
if (isset($s3result)) {
if ($s3result == false) {
$error_message[] = 'アップロード失敗!(1)エラーコード: S3ERROR';
} else {
$iconName = $s3result; // S3に保存されたファイルのパスを使用
$currentIconPath = getUserData($pdo, $userid)["iconname"];
}
}
} else {
$error_message[] = "使用できない画像形式です。(FILE_UPLOAD_DEKINAKATTA)";
}
}
}
if (!(empty($iconName))) {
$add_sql[] = "iconname = :iconname";
}
if (!(empty($post_json["header"]))) {
$imageData = base64_decode($post_json["header"], true);
$tmpFilePath = tempnam(sys_get_temp_dir(), 'upload_' . createUniqId());
file_put_contents($tmpFilePath, $imageData);
$HeadFiles = [
'name' => 'upload.png',
'type' => check_mime($tmpFilePath),
'tmp_name' => $tmpFilePath,
'error' => UPLOAD_ERR_OK,
'size' => strlen($imageData),
];
} else {
$HeadFiles = array();
}
if (isset($HeadFiles)) {
if (!(empty($HeadFiles['name']))) {
$uploadedFile = $HeadFiles;
if (check_mime($uploadedFile['tmp_name'])) {
$extension = pathinfo($uploadedFile['name'], PATHINFO_EXTENSION);
delete_exif($extension, $uploadedFile['tmp_name']);
resizeImage($uploadedFile['tmp_name'], 2048, 1024);
if (AMS3_CHKS == "true") {
$userheadurl = getUserData($pdo, $userid)["headname"];
if (filter_var($userheadurl, FILTER_VALIDATE_URL)) {
$s3delresult = deleteAmazonS3($userheadurl);
} else {
$s3delresult = true;
}
if ($s3delresult == true) {
$s3result = uploadAmazonS3($uploadedFile['tmp_name']);
} else {
$s3result = false;
}
} else {
if (check_mime($uploadedFile['tmp_name']) == "image/webp") {
$newFilename = createUniqId() . '-' . $userid . '.webp';
} else {
$newFilename = createUniqId() . '-' . $userid . '.' . $extension;
}
$uploadedPath = 'userheads/' . $newFilename;
$result = rename($uploadedFile['tmp_name'], __DIR__ . '/../../../' . $uploadedPath);
if ($result) {
$headName = $uploadedPath; // 保存されたファイルのパスを使用
$currentHeadPath = getUserData($pdo, $userid)["headname"];
} else {
$errnum = $uploadedFile['error'];
$errcode = "ERROR";
switch ($errnum) {
case 1:
$errcode = "FILE_DEKASUGUI_PHP_INI_KAKUNIN";
break;
case 2:
$errcode = "FILE_DEKASUGUI_HTML_KAKUNIN";
break;
case 3:
$errcode = "FILE_SUKOSHIDAKE_UPLOAD";
break;
case 4:
$errcode = "FILE_UPLOAD_DEKINAKATTA";
break;
case 6:
$errcode = "TMP_FOLDER_NAI";
break;
case 7:
$errcode = "FILE_KAKIKOMI_SIPPAI";
break;
case 8:
$errcode = "PHPINFO()_KAKUNIN";
break;
case 0:
// 成功だったのに move_uploaded_file() が失敗した
if (!is_uploaded_file($uploadedFile['tmp_name'])) {
$errcode = "TMP_FILE_NAI";
} elseif (!is_writable(__DIR__ . '/../../../usericons/')) {
$errcode = "SAVE_FOLDER_KAKIKOMI_KENNAI";
} else {
$errcode = "MOVE_UPLOAD_FILE_SIPPAI";
}
break;
}
$error_message[] = 'アップロード失敗!(2)エラーコード:' . $errcode . '';
}
}
if (isset($s3result)) {
if ($s3result == false) {
$error_message[] = 'アップロード失敗!(2)エラーコード: S3ERROR';
} else {
$headName = $s3result; // S3に保存されたファイルのパスを使用
$currentHeadPath = getUserData($pdo, $userid)["headname"];
}
}
} else {
$error_message[] = "使用できない画像形式です。(FILE_UPLOAD_DEKINAKATTA)";
}
}
}
if (!(empty($headName))) {
$add_sql[] = "headname = :headname";
}
if(empty($add_sql)) {
$err = "input_not_found";
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}else{
$add_sql = implode(", ", $add_sql);
}
if (empty($error_message)) {
// トランザクション開始
$pdo->beginTransaction();
try {
$stmt = $pdo->prepare("UPDATE account SET ".$add_sql." WHERE userid = :userid;");
// 他の値をセット
if (!(empty($username))) {
$stmt->bindValue(':username', $username, PDO::PARAM_STR);
}
if (!(empty($profile))) {
$stmt->bindValue(':profile', $profile, PDO::PARAM_STR);
}
if (!(empty($iconName))) {
$stmt->bindValue(':iconname', $iconName, PDO::PARAM_STR);
}
if (!(empty($headName))) {
$stmt->bindValue(':headname', $headName, PDO::PARAM_STR);
}
$stmt->bindValue(':userid', $userid, PDO::PARAM_STR);
$res = $stmt->execute();
// コミット
if($res) {
$pdo->commit();
if (!(empty($iconName))) {
if ($currentIconPath && !filter_var($currentIconPath, FILTER_VALIDATE_URL)) {
$filePath = realpath(__DIR__ . '/../../../' . $currentIconPath);
if ($filePath && file_exists($filePath)) {
unlink($filePath);
}
}
}
if (!(empty($headName))) {
if ($currentHeadPath && !filter_var($currentHeadPath, FILTER_VALIDATE_URL)) {
$filePath = realpath(__DIR__ . '/../../../' . $currentHeadPath);
if ($filePath && file_exists($filePath)) {
unlink($filePath);
}
}
}
$response = array(
'success' => true
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
} else {
$pdo->rollBack();
$err = "update_failed";
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
} catch (Exception $e) {
$pdo->rollBack();
actionLog($userid, "error", "user-settings-api", null, $e, 4);
$err = "update_failed";
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
$stmt = null;
}else{
$err = $error_message;
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
} else {
$err = $AuthData[1];
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
}
} else {
$err = "input_not_found";
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
+100
View File
@@ -0,0 +1,100 @@
<?php
$domain = $_SERVER['HTTP_HOST'];
require(__DIR__ . '/../../db.php');
require(__DIR__ . "/../../function/function.php");
blockedIP($_SERVER['REMOTE_ADDR']);
header("Content-Type: application/json; charset=utf-8");
header("Access-Control-Allow-Origin: *");
$pdo = null;
try {
$option = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_MULTI_STATEMENTS => false
);
$pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option);
} catch(PDOException $e) {
// 接続エラーのときエラー内容を取得する
$error_message[] = $e->getMessage();
}
$Get_Post_Json = file_get_contents("php://input");
if(isset($_GET['session']) || (!(empty($Get_Post_Json)))) {
//トークン取得
if(!(empty($_GET['session']))){
$session_id = safetext($_GET['session']);
}else{
$post_json = json_decode($Get_Post_Json, true);
if(isset($post_json["session"])){
$session_id = safetext($post_json["session"]);
}else{
$err = "input_not_found";
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
}
if($session_id == ""){
$err = "input_not_found";
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
session_start();
if( !empty($pdo) ) {
$tokenQuery = $pdo->prepare("SELECT userid, token FROM api WHERE sessionid = :sessionid");
$tokenQuery->bindValue(':sessionid', $session_id);
$tokenQuery->execute();
$tokenData = $tokenQuery->fetch();
if(empty($tokenData["userid"])){
$err = "session_invalid";
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}else{
$userdata = getUserData($pdo, $tokenData["userid"]);
if (empty($userdata)){
$response = array(
'error_code' => "critical_error_userdata_not_found",
'success' => false
);
}else{
DelSessionidAPIToken($pdo, $session_id);
$response = array(
'success' => true,
'username' => decode_yajirushi(htmlspecialchars_decode($userdata["username"])),
'userid' => decode_yajirushi(htmlspecialchars_decode($userdata["userid"])),
'token' => decode_yajirushi(htmlspecialchars_decode($tokenData["token"]))
);
}
echo json_encode($response, JSON_UNESCAPED_UNICODE);
}
}
}else{
$err = "input_not_found";
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
}
?>
+226
View File
@@ -0,0 +1,226 @@
<?php
$domain = $_SERVER['HTTP_HOST'];
require(__DIR__ . '/../../../db.php');
require(__DIR__ . "/../../../function/function.php");
blockedIP($_SERVER['REMOTE_ADDR']);
header("Content-Type: application/json; charset=utf-8");
header("Access-Control-Allow-Origin: *");
$pdo = null;
try {
$option = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_MULTI_STATEMENTS => false
);
$pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option);
} catch(PDOException $e) {
// 接続エラーのときエラー内容を取得する
$error_message[] = $e->getMessage();
}
$Get_Post_Json = file_get_contents("php://input");
if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
//トークン取得
if(!(empty($_GET['token']))){
$token = safetext($_GET['token']);
}else{
$post_json = json_decode($Get_Post_Json, true);
if(isset($post_json["token"])){
$token = safetext($post_json["token"]);
}else{
$err = "input_not_found";
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
}
if($token == ""){
$err = "input_not_found";
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}
if(!(empty($_GET['limit']))){
$limit = (int)$_GET['limit'];
}elseif(!(empty($post_json["limit"]))){
$limit = (int)$post_json["limit"];
}else{
$limit = 25;
}
if($limit > 100){
$limit = 100;
}
if(!(empty($_GET['page']))){
$page = (int)$_GET['page'];
}elseif(!(empty($post_json["page"]))){
$page = (int)$post_json["page"];
}else{
$page = 1;
}
$offset = ($page - 1) * $limit;
session_start();
if( !empty($pdo) ) {
$AuthData = APIAuth($pdo, $token, "read:bookmark");
if($AuthData[0] === true){
$userData = $AuthData[2];
$messages = array();
$allBookmarks = explode(',', $userData['bookmark'] ?? '');
$reversedBookmarks = array_reverse($allBookmarks);
$bookmarkList = array_chunk($reversedBookmarks, $limit);
$list_Page = max(0, (int)$page - 1);
if (!empty($bookmarkList[$list_Page])) {
$currentPageUniqIds = $bookmarkList[$list_Page];
// 名前付きプレースホルダ作成
$placeholders = [];
$params = [];
foreach ($currentPageUniqIds as $i => $uniqid) {
$key = ":uniqid$i";
$placeholders[] = $key;
$params[$key] = $uniqid;
}
$placeholderStr = implode(',', $placeholders);
$sql = "SELECT ueuse.*
FROM ueuse
LEFT JOIN account ON ueuse.account = account.userid
WHERE ueuse.uniqid IN ($placeholderStr) AND account.role != 'ice'
ORDER BY FIELD(ueuse.uniqid, $placeholderStr)";
$stmt = $pdo->prepare($sql);
foreach ($params as $key => $val) {
$stmt->bindValue($key, $val, PDO::PARAM_STR);
}
$stmt->execute();
$messages = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
if (!empty($messages)) {
$response = array(
'success' => true,
); // ループ外で $response を初期化
foreach ($messages as $ueusedata) {
if(!(empty($ueusedata["favorite"]))){
$favorite = preg_split("/,/", decode_yajirushi(htmlspecialchars_decode($ueusedata["favorite"])));
array_shift($favorite);
}else{
$favorite = array();
}
$favcnts = explode(',', $ueusedata["favorite"]);
$ueusedata["favorite_cnt"] = count($favcnts) - 1;
$userData = getUserData($pdo, $ueusedata["account"]);
if ($userData) {
$now_userdata = array(
"username" => decode_yajirushi(htmlspecialchars_decode($userData['username'])),
"userid" => decode_yajirushi(htmlspecialchars_decode($userData['userid'])),
"user_icon" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['iconname'])))),
"user_header" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))),
"is_bot" => $userData['sacinfo'] == 'bot' ? true : false,
);
}
if($ueusedata["nsfw"] == "true"){
$nsfw = true;
}else{
$nsfw = false;
}
if($ueusedata["abi"] == "none"){
$ueusedata["abi"] = "";
}
//リプライ数取得
$rpQuery = $pdo->prepare("SELECT COUNT(*) as reply_count FROM ueuse WHERE rpuniqid = :rpuniqid");
$rpQuery->bindValue(':rpuniqid', $ueusedata['uniqid']);
$rpQuery->execute();
$rpData = $rpQuery->fetch(PDO::FETCH_ASSOC);
if ($rpData){
$ueusedata['reply_count'] = $rpData['reply_count'];
}
//リユーズ数取得
$ruQuery = $pdo->prepare("SELECT COUNT(*) as reuse_count FROM ueuse WHERE ruuniqid = :ruuniqid");
$ruQuery->bindValue(':ruuniqid', $ueusedata['uniqid']);
$ruQuery->execute();
$ruData = $ruQuery->fetch(PDO::FETCH_ASSOC);
if ($ruData){
$ueusedata['reuse_count'] = $ruData['reuse_count'];
}
$item = [
'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["uniqid"])),
'replyid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["rpuniqid"])),
'reuseid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ruuniqid"])),
'text' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ueuse"])),
'account' => $now_userdata,
'photo1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo1"])))),
'photo2' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo2"])))),
'photo3' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo3"])))),
'photo4' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo4"])))),
'video1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["video1"])))),
'favorite' => $favorite,
'favorite_cnt' => $ueusedata["favorite_cnt"],
'reply_cnt' => $ueusedata["reply_count"],
'reuse_cnt' => $ueusedata["reuse_count"],
'datetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["datetime"])),
'abi' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abi"])),
'abidatetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abidate"])),
'nsfw' => $nsfw,
];
$response[] = $item; // ループ内で $response にデータを追加
}
echo json_encode($response, JSON_UNESCAPED_UNICODE);
} else {
$err = "ueuse_not_found";
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
}
}else{
$err = $AuthData[1];
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
}
}
}else{
$err = "input_not_found";
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
}
?>
+21 -25
View File
@@ -1,15 +1,15 @@
<?php <?php
$domain = $_SERVER['HTTP_HOST']; $domain = $_SERVER['HTTP_HOST'];
require('../../db.php'); require(__DIR__ . '/../../db.php');
//関数呼び出し //関数呼び出し
//- Base64_mime //- Base64_mime
require('../../function/function.php'); require(__DIR__ . '/../../function/function.php');
blockedIP($_SERVER['REMOTE_ADDR']); blockedIP($_SERVER['REMOTE_ADDR']);
$mojisizefile = "../../server/textsize.txt"; $mojisizefile = __DIR__ . "/../../server/textsize.txt";
$banurldomainfile = "../../server/banurldomain.txt"; $banurldomainfile = __DIR__ . "/../../server/banurldomain.txt";
$banurl_info = file_get_contents($banurldomainfile); $banurl_info = file_get_contents($banurldomainfile);
$banurl = preg_split("/\r\n|\n|\r/", $banurl_info); $banurl = preg_split("/\r\n|\n|\r/", $banurl_info);
@@ -43,6 +43,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -52,6 +53,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -60,27 +62,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
session_start(); session_start();
if( !empty($pdo) ) { if( !empty($pdo) ) {
$userQuery = $pdo->prepare("SELECT username, userid, role FROM account WHERE token = :token"); $AuthData = APIAuth($pdo, $token, "write:ueuse");
$userQuery->bindValue(':token', $token); if($AuthData[0] === true){
$userQuery->execute(); $userData = $AuthData[2];
$userData = $userQuery->fetch();
if(empty($userData["userid"])){
$err = "token_invalid";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}elseif($userData["role"] === "ice"){
$err = "this_account_has_been_frozen";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}else{
//本文取得 //本文取得
if(!(empty($_GET['text']))){ if(!(empty($_GET['text']))){
$ueuse = safetext($_GET['text']); $ueuse = safetext($_GET['text']);
@@ -90,6 +74,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
@@ -213,6 +198,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
if($ueuse_result[0] == true){ if($ueuse_result[0] == true){
$response = array( $response = array(
'success' => true,
'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueuse_result[1])), 'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueuse_result[1])),
'userid' => decode_yajirushi(htmlspecialchars_decode($userData["userid"])), 'userid' => decode_yajirushi(htmlspecialchars_decode($userData["userid"])),
); );
@@ -282,16 +268,26 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
}else{
$err = $AuthData[1];
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
} }
}else{ }else{
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
+18 -23
View File
@@ -1,8 +1,8 @@
<?php <?php
$domain = $_SERVER['HTTP_HOST']; $domain = $_SERVER['HTTP_HOST'];
require('../../db.php'); require(__DIR__ . '/../../db.php');
require("../../function/function.php"); require(__DIR__ . "/../../function/function.php");
blockedIP($_SERVER['REMOTE_ADDR']); blockedIP($_SERVER['REMOTE_ADDR']);
header("Content-Type: application/json; charset=utf-8"); header("Content-Type: application/json; charset=utf-8");
@@ -35,6 +35,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -44,6 +45,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -57,6 +59,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
@@ -66,27 +69,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
session_start(); session_start();
if( !empty($pdo) ) { if( !empty($pdo) ) {
$userQuery = $pdo->prepare("SELECT username, userid, role, loginid FROM account WHERE token = :token"); $AuthData = APIAuth($pdo, $token, "write:ueuse");
$userQuery->bindValue(':token', $token); if($AuthData[0] === true){
$userQuery->execute(); $userData = $AuthData[2];
$userData = $userQuery->fetch();
if(empty($userData["userid"])){
$err = "token_invalid";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}elseif($userData["role"] === "ice"){
$err = "this_account_has_been_frozen";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}else{
if (safetext(isset($ueuseid)) && safetext(isset($userData["userid"])) && safetext(isset($userData["loginid"]))){ if (safetext(isset($ueuseid)) && safetext(isset($userData["userid"])) && safetext(isset($userData["loginid"]))){
$postUserid = safetext($userData["userid"]); $postUserid = safetext($userData["userid"]);
$postUniqid = safetext($ueuseid); $postUniqid = safetext($ueuseid);
@@ -114,16 +99,26 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
}else{
$err = $AuthData[1];
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
} }
}else{ }else{
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
+52 -30
View File
@@ -1,8 +1,8 @@
<?php <?php
$domain = $_SERVER['HTTP_HOST']; $domain = $_SERVER['HTTP_HOST'];
require('../../db.php'); require(__DIR__ . '/../../db.php');
require("../../function/function.php"); require(__DIR__ . "/../../function/function.php");
blockedIP($_SERVER['REMOTE_ADDR']); blockedIP($_SERVER['REMOTE_ADDR']);
header("Content-Type: application/json; charset=utf-8"); header("Content-Type: application/json; charset=utf-8");
@@ -35,6 +35,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -44,6 +45,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -57,6 +59,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
@@ -66,27 +69,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
session_start(); session_start();
if( !empty($pdo) ) { if( !empty($pdo) ) {
$userQuery = $pdo->prepare("SELECT username, userid, role FROM account WHERE token = :token"); $AuthData = APIAuth($pdo, $token, "read:ueuse");
$userQuery->bindValue(':token', $token); if($AuthData[0] === true){
$userQuery->execute(); $userData = $AuthData[2];
$userData = $userQuery->fetch();
if(empty($userData["userid"])){
$err = "token_invalid";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}elseif($userData["role"] === "ice"){
$err = "this_account_has_been_frozen";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}else{
$sql = "SELECT * FROM ueuse WHERE uniqid = :ueuseid ORDER BY datetime ASC LIMIT 1"; $sql = "SELECT * FROM ueuse WHERE uniqid = :ueuseid ORDER BY datetime ASC LIMIT 1";
$stmt = $pdo->prepare($sql); $stmt = $pdo->prepare($sql);
$stmt->bindValue(':ueuseid', $ueuseid, PDO::PARAM_STR); $stmt->bindValue(':ueuseid', $ueuseid, PDO::PARAM_STR);
@@ -99,7 +84,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
} }
if (!empty($messages)) { if (!empty($messages)) {
$response = array(); // ループ外で $response を初期化 $response = array(
'success' => true,
); // ループ外で $response を初期化
foreach ($messages as $ueusedata) { foreach ($messages as $ueusedata) {
if(!(empty($ueusedata["favorite"]))){ if(!(empty($ueusedata["favorite"]))){
@@ -111,17 +98,15 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$favcnts = explode(',', $ueusedata["favorite"]); $favcnts = explode(',', $ueusedata["favorite"]);
$ueusedata["favorite_cnt"] = count($favcnts) - 1; $ueusedata["favorite_cnt"] = count($favcnts) - 1;
$userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, role FROM account WHERE userid = :userid"); $userData = getUserData($pdo, $ueusedata["account"]);
$userQuery->bindValue(':userid', $ueusedata["account"]);
$userQuery->execute();
$userData = $userQuery->fetch();
if ($userData) { if ($userData) {
$now_userdata = array( $now_userdata = array(
"username" => decode_yajirushi(htmlspecialchars_decode($userData['username'])), "username" => decode_yajirushi(htmlspecialchars_decode($userData['username'])),
"userid" => decode_yajirushi(htmlspecialchars_decode($userData['userid'])), "userid" => decode_yajirushi(htmlspecialchars_decode($userData['userid'])),
"user_icon" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['iconname'])))), "user_icon" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['iconname'])))),
"user_head" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))), "user_header" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))),
"is_bot" => $userData['sacinfo'] == 'bot' ? true : false,
); );
} }
@@ -130,10 +115,35 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
}else{ }else{
$nsfw = false; $nsfw = false;
} }
if($ueusedata["abi"] == "none"){
$ueusedata["abi"] = "";
}
//リプライ数取得
$rpQuery = $pdo->prepare("SELECT COUNT(*) as reply_count FROM ueuse WHERE rpuniqid = :rpuniqid");
$rpQuery->bindValue(':rpuniqid', $ueusedata['uniqid']);
$rpQuery->execute();
$rpData = $rpQuery->fetch(PDO::FETCH_ASSOC);
if ($rpData){
$ueusedata['reply_count'] = $rpData['reply_count'];
}
//リユーズ数取得
$ruQuery = $pdo->prepare("SELECT COUNT(*) as reuse_count FROM ueuse WHERE ruuniqid = :ruuniqid");
$ruQuery->bindValue(':ruuniqid', $ueusedata['uniqid']);
$ruQuery->execute();
$ruData = $ruQuery->fetch(PDO::FETCH_ASSOC);
if ($ruData){
$ueusedata['reuse_count'] = $ruData['reuse_count'];
}
$item = [ $item = [
'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["uniqid"])), 'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["uniqid"])),
'replyid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["rpuniqid"])), 'replyid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["rpuniqid"])),
'reuseid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ruuniqid"])),
'text' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ueuse"])), 'text' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ueuse"])),
'account' => $now_userdata, 'account' => $now_userdata,
'photo1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo1"])))), 'photo1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo1"])))),
@@ -142,7 +152,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
'photo4' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo4"])))), 'photo4' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo4"])))),
'video1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["video1"])))), 'video1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["video1"])))),
'favorite' => $favorite, 'favorite' => $favorite,
'favorite_cnt' => decode_yajirushi(htmlspecialchars_decode($ueusedata["favorite_cnt"])), 'favorite_cnt' => $ueusedata["favorite_cnt"],
'reply_cnt' => $ueusedata["reply_count"],
'reuse_cnt' => $ueusedata["reuse_count"],
'datetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["datetime"])), 'datetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["datetime"])),
'abi' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abi"])), 'abi' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abi"])),
'abidatetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abidate"])), 'abidatetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abidate"])),
@@ -157,16 +169,26 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "ueuse_not_found"; $err = "ueuse_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
}else{
$err = $AuthData[1];
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
} }
}else{ }else{
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
+51 -30
View File
@@ -1,8 +1,8 @@
<?php <?php
$domain = $_SERVER['HTTP_HOST']; $domain = $_SERVER['HTTP_HOST'];
require('../../db.php'); require(__DIR__ . '/../../db.php');
require("../../function/function.php"); require(__DIR__ . "/../../function/function.php");
blockedIP($_SERVER['REMOTE_ADDR']); blockedIP($_SERVER['REMOTE_ADDR']);
header("Content-Type: application/json; charset=utf-8"); header("Content-Type: application/json; charset=utf-8");
@@ -36,6 +36,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -45,6 +46,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -73,27 +75,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
session_start(); session_start();
if( !empty($pdo) ) { if( !empty($pdo) ) {
$userQuery = $pdo->prepare("SELECT username, userid, role FROM account WHERE token = :token"); $AuthData = APIAuth($pdo, $token, "read:ueuse");
$userQuery->bindValue(':token', $token); if($AuthData[0] === true){
$userQuery->execute(); $userData = $AuthData[2];
$userData = $userQuery->fetch();
if(empty($userData["userid"])){
$err = "token_invalid";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}elseif($userData["role"] === "ice"){
$err = "this_account_has_been_frozen";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}else{
$sql = "SELECT ueuse.* $sql = "SELECT ueuse.*
FROM ueuse FROM ueuse
LEFT JOIN account ON ueuse.account = account.userid LEFT JOIN account ON ueuse.account = account.userid
@@ -113,7 +97,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
} }
if (!empty($messages)) { if (!empty($messages)) {
$response = array(); // ループ外で $response を初期化 $response = array(
'success' => true,
); // ループ外で $response を初期化
foreach ($messages as $ueusedata) { foreach ($messages as $ueusedata) {
if(!(empty($ueusedata["favorite"]))){ if(!(empty($ueusedata["favorite"]))){
@@ -125,17 +111,15 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$favcnts = explode(',', $ueusedata["favorite"]); $favcnts = explode(',', $ueusedata["favorite"]);
$ueusedata["favorite_cnt"] = count($favcnts) - 1; $ueusedata["favorite_cnt"] = count($favcnts) - 1;
$userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, role FROM account WHERE userid = :userid"); $userData = getUserData($pdo, $ueusedata["account"]);
$userQuery->bindValue(':userid', $ueusedata["account"]);
$userQuery->execute();
$userData = $userQuery->fetch();
if ($userData) { if ($userData) {
$now_userdata = array( $now_userdata = array(
"username" => decode_yajirushi(htmlspecialchars_decode($userData['username'])), "username" => decode_yajirushi(htmlspecialchars_decode($userData['username'])),
"userid" => decode_yajirushi(htmlspecialchars_decode($userData['userid'])), "userid" => decode_yajirushi(htmlspecialchars_decode($userData['userid'])),
"user_icon" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['iconname'])))), "user_icon" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['iconname'])))),
"user_head" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))), "user_header" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))),
"is_bot" => $userData['sacinfo'] == 'bot' ? true : false,
); );
} }
@@ -144,10 +128,35 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
}else{ }else{
$nsfw = false; $nsfw = false;
} }
if($ueusedata["abi"] == "none"){
$ueusedata["abi"] = "";
}
//リプライ数取得
$rpQuery = $pdo->prepare("SELECT COUNT(*) as reply_count FROM ueuse WHERE rpuniqid = :rpuniqid");
$rpQuery->bindValue(':rpuniqid', $ueusedata['uniqid']);
$rpQuery->execute();
$rpData = $rpQuery->fetch(PDO::FETCH_ASSOC);
if ($rpData){
$ueusedata['reply_count'] = $rpData['reply_count'];
}
//リユーズ数取得
$ruQuery = $pdo->prepare("SELECT COUNT(*) as reuse_count FROM ueuse WHERE ruuniqid = :ruuniqid");
$ruQuery->bindValue(':ruuniqid', $ueusedata['uniqid']);
$ruQuery->execute();
$ruData = $ruQuery->fetch(PDO::FETCH_ASSOC);
if ($ruData){
$ueusedata['reuse_count'] = $ruData['reuse_count'];
}
$item = [ $item = [
'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["uniqid"])), 'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["uniqid"])),
'replyid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["rpuniqid"])), 'replyid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["rpuniqid"])),
'reuseid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ruuniqid"])),
'text' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ueuse"])), 'text' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ueuse"])),
'account' => $now_userdata, 'account' => $now_userdata,
'photo1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo1"])))), 'photo1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo1"])))),
@@ -156,7 +165,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
'photo4' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo4"])))), 'photo4' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo4"])))),
'video1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["video1"])))), 'video1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["video1"])))),
'favorite' => $favorite, 'favorite' => $favorite,
'favorite_cnt' => decode_yajirushi(htmlspecialchars_decode($ueusedata["favorite_cnt"])), 'favorite_cnt' => $ueusedata["favorite_cnt"],
'reply_cnt' => $ueusedata["reply_count"],
'reuse_cnt' => $ueusedata["reuse_count"],
'datetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["datetime"])), 'datetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["datetime"])),
'abi' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abi"])), 'abi' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abi"])),
'abidatetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abidate"])), 'abidatetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abidate"])),
@@ -171,16 +182,26 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "ueuse_not_found"; $err = "ueuse_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
}else{
$err = $AuthData[1];
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
} }
}else{ }else{
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
+54 -33
View File
@@ -1,8 +1,8 @@
<?php <?php
$domain = $_SERVER['HTTP_HOST']; $domain = $_SERVER['HTTP_HOST'];
require('../../db.php'); require(__DIR__ . '/../../db.php');
require("../../function/function.php"); require(__DIR__ . "/../../function/function.php");
blockedIP($_SERVER['REMOTE_ADDR']); blockedIP($_SERVER['REMOTE_ADDR']);
header("Content-Type: application/json; charset=utf-8"); header("Content-Type: application/json; charset=utf-8");
@@ -36,6 +36,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -45,6 +46,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -73,35 +75,17 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
session_start(); session_start();
if( !empty($pdo) ) { if( !empty($pdo) ) {
$userQuery = $pdo->prepare("SELECT username, userid, role FROM account WHERE token = :token"); $AuthData = APIAuth($pdo, $token, "read:ueuse");
$userQuery->bindValue(':token', $token); if($AuthData[0] === true){
$userQuery->execute(); $userData = $AuthData[2];
$userData = $userQuery->fetch(); $Userid = strtolower($userData["userid"]);
if(empty($userData["userid"])){ $sql = "SELECT * FROM ueuse WHERE FIND_IN_SET(:keyword, mentions) ORDER BY datetime DESC LIMIT :offset, :itemsPerPage";
$err = "token_invalid";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}elseif($userData["role"] === "ice"){
$err = "this_account_has_been_frozen";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}else{
$Userid = $userData["userid"];
$sql = "SELECT * FROM ueuse WHERE ueuse LIKE :keyword OR abi LIKE :keyword ORDER BY datetime DESC LIMIT :offset, :itemsPerPage";
$stmt = $pdo->prepare($sql); $stmt = $pdo->prepare($sql);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT); $stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':itemsPerPage', $limit, PDO::PARAM_INT); $stmt->bindValue(':itemsPerPage', $limit, PDO::PARAM_INT);
$stmt->bindValue(':keyword', '%@' . $Userid . '%', PDO::PARAM_STR); $stmt->bindValue(':keyword', '' . $Userid . '', PDO::PARAM_STR);
$stmt->execute(); $stmt->execute();
$message_array = $stmt; $message_array = $stmt;
@@ -111,7 +95,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
} }
if (!empty($messages)) { if (!empty($messages)) {
$response = array(); // ループ外で $response を初期化 $response = array(
'success' => true,
); // ループ外で $response を初期化
foreach ($messages as $ueusedata) { foreach ($messages as $ueusedata) {
if(!(empty($ueusedata["favorite"]))){ if(!(empty($ueusedata["favorite"]))){
@@ -123,17 +109,15 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$favcnts = explode(',', $ueusedata["favorite"]); $favcnts = explode(',', $ueusedata["favorite"]);
$ueusedata["favorite_cnt"] = count($favcnts) - 1; $ueusedata["favorite_cnt"] = count($favcnts) - 1;
$userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, role FROM account WHERE userid = :userid"); $userData = getUserData($pdo, $ueusedata["account"]);
$userQuery->bindValue(':userid', $ueusedata["account"]);
$userQuery->execute();
$userData = $userQuery->fetch();
if ($userData) { if ($userData) {
$now_userdata = array( $now_userdata = array(
"username" => decode_yajirushi(htmlspecialchars_decode($userData['username'])), "username" => decode_yajirushi(htmlspecialchars_decode($userData['username'])),
"userid" => decode_yajirushi(htmlspecialchars_decode($userData['userid'])), "userid" => decode_yajirushi(htmlspecialchars_decode($userData['userid'])),
"user_icon" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['iconname'])))), "user_icon" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['iconname'])))),
"user_head" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))), "user_header" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))),
"is_bot" => $userData['sacinfo'] == 'bot' ? true : false,
); );
} }
@@ -142,10 +126,35 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
}else{ }else{
$nsfw = false; $nsfw = false;
} }
if($ueusedata["abi"] == "none"){
$ueusedata["abi"] = "";
}
//リプライ数取得
$rpQuery = $pdo->prepare("SELECT COUNT(*) as reply_count FROM ueuse WHERE rpuniqid = :rpuniqid");
$rpQuery->bindValue(':rpuniqid', $ueusedata['uniqid']);
$rpQuery->execute();
$rpData = $rpQuery->fetch(PDO::FETCH_ASSOC);
if ($rpData){
$ueusedata['reply_count'] = $rpData['reply_count'];
}
//リユーズ数取得
$ruQuery = $pdo->prepare("SELECT COUNT(*) as reuse_count FROM ueuse WHERE ruuniqid = :ruuniqid");
$ruQuery->bindValue(':ruuniqid', $ueusedata['uniqid']);
$ruQuery->execute();
$ruData = $ruQuery->fetch(PDO::FETCH_ASSOC);
if ($ruData){
$ueusedata['reuse_count'] = $ruData['reuse_count'];
}
$item = [ $item = [
'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["uniqid"])), 'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["uniqid"])),
'replyid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["rpuniqid"])), 'replyid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["rpuniqid"])),
'reuseid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ruuniqid"])),
'text' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ueuse"])), 'text' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ueuse"])),
'account' => $now_userdata, 'account' => $now_userdata,
'photo1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo1"])))), 'photo1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo1"])))),
@@ -154,7 +163,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
'photo4' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo4"])))), 'photo4' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo4"])))),
'video1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["video1"])))), 'video1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["video1"])))),
'favorite' => $favorite, 'favorite' => $favorite,
'favorite_cnt' => decode_yajirushi(htmlspecialchars_decode($ueusedata["favorite_cnt"])), 'favorite_cnt' => $ueusedata["favorite_cnt"],
'reply_cnt' => $ueusedata["reply_count"],
'reuse_cnt' => $ueusedata["reuse_count"],
'datetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["datetime"])), 'datetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["datetime"])),
'abi' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abi"])), 'abi' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abi"])),
'abidatetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abidate"])), 'abidatetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abidate"])),
@@ -169,16 +180,26 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "ueuse_not_found"; $err = "ueuse_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
}else{
$err = $AuthData[1];
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
} }
}else{ }else{
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
+52 -30
View File
@@ -1,8 +1,8 @@
<?php <?php
$domain = $_SERVER['HTTP_HOST']; $domain = $_SERVER['HTTP_HOST'];
require('../../db.php'); require(__DIR__ . '/../../db.php');
require("../../function/function.php"); require(__DIR__ . "/../../function/function.php");
blockedIP($_SERVER['REMOTE_ADDR']); blockedIP($_SERVER['REMOTE_ADDR']);
header("Content-Type: application/json; charset=utf-8"); header("Content-Type: application/json; charset=utf-8");
@@ -36,6 +36,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -45,6 +46,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -58,6 +60,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
@@ -87,27 +90,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
session_start(); session_start();
if( !empty($pdo) ) { if( !empty($pdo) ) {
$userQuery = $pdo->prepare("SELECT username, userid, role FROM account WHERE token = :token"); $AuthData = APIAuth($pdo, $token, "read:ueuse");
$userQuery->bindValue(':token', $token); if($AuthData[0] === true){
$userQuery->execute(); $userData = $AuthData[2];
$userData = $userQuery->fetch();
if(empty($userData["userid"])){
$err = "token_invalid";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}elseif($userData["role"] === "ice"){
$err = "this_account_has_been_frozen";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}else{
$sql = "SELECT * FROM ueuse WHERE uniqid = :ueuseid OR rpuniqid = :ueuseid ORDER BY datetime ASC LIMIT :offset, :itemsPerPage"; $sql = "SELECT * FROM ueuse WHERE uniqid = :ueuseid OR rpuniqid = :ueuseid ORDER BY datetime ASC LIMIT :offset, :itemsPerPage";
$stmt = $pdo->prepare($sql); $stmt = $pdo->prepare($sql);
$stmt->bindValue(':ueuseid', $ueuseid, PDO::PARAM_STR); $stmt->bindValue(':ueuseid', $ueuseid, PDO::PARAM_STR);
@@ -122,7 +107,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
} }
if (!empty($messages)) { if (!empty($messages)) {
$response = array(); // ループ外で $response を初期化 $response = array(
'success' => true,
); // ループ外で $response を初期化
foreach ($messages as $ueusedata) { foreach ($messages as $ueusedata) {
if(!(empty($ueusedata["favorite"]))){ if(!(empty($ueusedata["favorite"]))){
@@ -134,17 +121,15 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$favcnts = explode(',', $ueusedata["favorite"]); $favcnts = explode(',', $ueusedata["favorite"]);
$ueusedata["favorite_cnt"] = count($favcnts) - 1; $ueusedata["favorite_cnt"] = count($favcnts) - 1;
$userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, role FROM account WHERE userid = :userid"); $userData = getUserData($pdo, $ueusedata["account"]);
$userQuery->bindValue(':userid', $ueusedata["account"]);
$userQuery->execute();
$userData = $userQuery->fetch();
if ($userData) { if ($userData) {
$now_userdata = array( $now_userdata = array(
"username" => decode_yajirushi(htmlspecialchars_decode($userData['username'])), "username" => decode_yajirushi(htmlspecialchars_decode($userData['username'])),
"userid" => decode_yajirushi(htmlspecialchars_decode($userData['userid'])), "userid" => decode_yajirushi(htmlspecialchars_decode($userData['userid'])),
"user_icon" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['iconname'])))), "user_icon" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['iconname'])))),
"user_head" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))), "user_header" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))),
"is_bot" => $userData['sacinfo'] == 'bot' ? true : false,
); );
} }
@@ -153,10 +138,35 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
}else{ }else{
$nsfw = false; $nsfw = false;
} }
if($ueusedata["abi"] == "none"){
$ueusedata["abi"] = "";
}
//リプライ数取得
$rpQuery = $pdo->prepare("SELECT COUNT(*) as reply_count FROM ueuse WHERE rpuniqid = :rpuniqid");
$rpQuery->bindValue(':rpuniqid', $ueusedata['uniqid']);
$rpQuery->execute();
$rpData = $rpQuery->fetch(PDO::FETCH_ASSOC);
if ($rpData){
$ueusedata['reply_count'] = $rpData['reply_count'];
}
//リユーズ数取得
$ruQuery = $pdo->prepare("SELECT COUNT(*) as reuse_count FROM ueuse WHERE ruuniqid = :ruuniqid");
$ruQuery->bindValue(':ruuniqid', $ueusedata['uniqid']);
$ruQuery->execute();
$ruData = $ruQuery->fetch(PDO::FETCH_ASSOC);
if ($ruData){
$ueusedata['reuse_count'] = $ruData['reuse_count'];
}
$item = [ $item = [
'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["uniqid"])), 'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["uniqid"])),
'replyid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["rpuniqid"])), 'replyid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["rpuniqid"])),
'reuseid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ruuniqid"])),
'text' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ueuse"])), 'text' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ueuse"])),
'account' => $now_userdata, 'account' => $now_userdata,
'photo1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo1"])))), 'photo1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo1"])))),
@@ -165,7 +175,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
'photo4' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo4"])))), 'photo4' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo4"])))),
'video1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["video1"])))), 'video1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["video1"])))),
'favorite' => $favorite, 'favorite' => $favorite,
'favorite_cnt' => decode_yajirushi(htmlspecialchars_decode($ueusedata["favorite_cnt"])), 'favorite_cnt' => $ueusedata["favorite_cnt"],
'reply_cnt' => $ueusedata["reply_count"],
'reuse_cnt' => $ueusedata["reuse_count"],
'datetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["datetime"])), 'datetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["datetime"])),
'abi' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abi"])), 'abi' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abi"])),
'abidatetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abidate"])), 'abidatetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abidate"])),
@@ -180,16 +192,26 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "ueuse_not_found"; $err = "ueuse_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
}else{
$err = $AuthData[1];
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
} }
}else{ }else{
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
+52 -30
View File
@@ -1,8 +1,8 @@
<?php <?php
$domain = $_SERVER['HTTP_HOST']; $domain = $_SERVER['HTTP_HOST'];
require('../../db.php'); require(__DIR__ . '/../../db.php');
require("../../function/function.php"); require(__DIR__ . "/../../function/function.php");
blockedIP($_SERVER['REMOTE_ADDR']); blockedIP($_SERVER['REMOTE_ADDR']);
header("Content-Type: application/json; charset=utf-8"); header("Content-Type: application/json; charset=utf-8");
@@ -36,6 +36,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -45,6 +46,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -58,6 +60,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
@@ -87,27 +90,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
session_start(); session_start();
if( !empty($pdo) ) { if( !empty($pdo) ) {
$userQuery = $pdo->prepare("SELECT username, userid, role FROM account WHERE token = :token"); $AuthData = APIAuth($pdo, $token, "read:ueuse");
$userQuery->bindValue(':token', $token); if($AuthData[0] === true){
$userQuery->execute(); $userData = $AuthData[2];
$userData = $userQuery->fetch();
if(empty($userData["userid"])){
$err = "token_invalid";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}elseif($userData["role"] === "ice"){
$err = "this_account_has_been_frozen";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}else{
$Userid = $userData["userid"]; $Userid = $userData["userid"];
$sql = "SELECT * FROM ueuse WHERE ueuse LIKE :keyword OR abi LIKE :keyword ORDER BY datetime DESC LIMIT :offset, :itemsPerPage"; $sql = "SELECT * FROM ueuse WHERE ueuse LIKE :keyword OR abi LIKE :keyword ORDER BY datetime DESC LIMIT :offset, :itemsPerPage";
@@ -125,7 +110,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
} }
if (!empty($messages)) { if (!empty($messages)) {
$response = array(); // ループ外で $response を初期化 $response = array(
'success' => true,
); // ループ外で $response を初期化
foreach ($messages as $ueusedata) { foreach ($messages as $ueusedata) {
if(!(empty($ueusedata["favorite"]))){ if(!(empty($ueusedata["favorite"]))){
@@ -137,17 +124,15 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$favcnts = explode(',', $ueusedata["favorite"]); $favcnts = explode(',', $ueusedata["favorite"]);
$ueusedata["favorite_cnt"] = count($favcnts) - 1; $ueusedata["favorite_cnt"] = count($favcnts) - 1;
$userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, role FROM account WHERE userid = :userid"); $userData = getUserData($pdo, $ueusedata["account"]);
$userQuery->bindValue(':userid', $ueusedata["account"]);
$userQuery->execute();
$userData = $userQuery->fetch();
if ($userData) { if ($userData) {
$now_userdata = array( $now_userdata = array(
"username" => decode_yajirushi(htmlspecialchars_decode($userData['username'])), "username" => decode_yajirushi(htmlspecialchars_decode($userData['username'])),
"userid" => decode_yajirushi(htmlspecialchars_decode($userData['userid'])), "userid" => decode_yajirushi(htmlspecialchars_decode($userData['userid'])),
"user_icon" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['iconname'])))), "user_icon" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['iconname'])))),
"user_head" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))), "user_header" => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($userData['headname'])))),
"is_bot" => $userData['sacinfo'] == 'bot' ? true : false,
); );
} }
@@ -156,10 +141,35 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
}else{ }else{
$nsfw = false; $nsfw = false;
} }
if($ueusedata["abi"] == "none"){
$ueusedata["abi"] = "";
}
//リプライ数取得
$rpQuery = $pdo->prepare("SELECT COUNT(*) as reply_count FROM ueuse WHERE rpuniqid = :rpuniqid");
$rpQuery->bindValue(':rpuniqid', $ueusedata['uniqid']);
$rpQuery->execute();
$rpData = $rpQuery->fetch(PDO::FETCH_ASSOC);
if ($rpData){
$ueusedata['reply_count'] = $rpData['reply_count'];
}
//リユーズ数取得
$ruQuery = $pdo->prepare("SELECT COUNT(*) as reuse_count FROM ueuse WHERE ruuniqid = :ruuniqid");
$ruQuery->bindValue(':ruuniqid', $ueusedata['uniqid']);
$ruQuery->execute();
$ruData = $ruQuery->fetch(PDO::FETCH_ASSOC);
if ($ruData){
$ueusedata['reuse_count'] = $ruData['reuse_count'];
}
$item = [ $item = [
'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["uniqid"])), 'uniqid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["uniqid"])),
'replyid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["rpuniqid"])), 'replyid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["rpuniqid"])),
'reuseid' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ruuniqid"])),
'text' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ueuse"])), 'text' => decode_yajirushi(htmlspecialchars_decode($ueusedata["ueuse"])),
'account' => $now_userdata, 'account' => $now_userdata,
'photo1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo1"])))), 'photo1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo1"])))),
@@ -168,7 +178,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
'photo4' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo4"])))), 'photo4' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["photo4"])))),
'video1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["video1"])))), 'video1' => decode_yajirushi(htmlspecialchars_decode(localcloudURLtoAPI(localcloudURL($ueusedata["video1"])))),
'favorite' => $favorite, 'favorite' => $favorite,
'favorite_cnt' => decode_yajirushi(htmlspecialchars_decode($ueusedata["favorite_cnt"])), 'favorite_cnt' => $ueusedata["favorite_cnt"],
'reply_cnt' => $ueusedata["reply_count"],
'reuse_cnt' => $ueusedata["reuse_count"],
'datetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["datetime"])), 'datetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["datetime"])),
'abi' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abi"])), 'abi' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abi"])),
'abidatetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abidate"])), 'abidatetime' => decode_yajirushi(htmlspecialchars_decode($ueusedata["abidate"])),
@@ -183,16 +195,26 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "ueuse_not_found"; $err = "ueuse_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
}else{
$err = $AuthData[1];
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
} }
}else{ }else{
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
+22 -25
View File
@@ -1,15 +1,15 @@
<?php <?php
$domain = $_SERVER['HTTP_HOST']; $domain = $_SERVER['HTTP_HOST'];
require('../../db.php'); require(__DIR__ . '/../../db.php');
//関数呼び出し //関数呼び出し
//- Base64_mime //- Base64_mime
require('../../function/function.php'); require(__DIR__ . '/../../function/function.php');
blockedIP($_SERVER['REMOTE_ADDR']); blockedIP($_SERVER['REMOTE_ADDR']);
$mojisizefile = "../../server/textsize.txt"; $mojisizefile = __DIR__ . "/../../server/textsize.txt";
$banurldomainfile = "../../server/banurldomain.txt"; $banurldomainfile = __DIR__ . "/../../server/banurldomain.txt";
$banurl_info = file_get_contents($banurldomainfile); $banurl_info = file_get_contents($banurldomainfile);
$banurl = preg_split("/\r\n|\n|\r/", $banurl_info); $banurl = preg_split("/\r\n|\n|\r/", $banurl_info);
@@ -44,6 +44,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -53,6 +54,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -61,27 +63,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
session_start(); session_start();
if( !empty($pdo) ) { if( !empty($pdo) ) {
$userQuery = $pdo->prepare("SELECT username, userid, role, follow, follower FROM account WHERE token = :token"); $AuthData = APIAuth($pdo, $token, "write:follow");
$userQuery->bindValue(':token', $token); if($AuthData[0] === true){
$userQuery->execute(); $userData = $AuthData[2];
$userData = $userQuery->fetch();
if(empty($userData["userid"])){
$err = "token_invalid";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}elseif($userData["role"] === "ice"){
$err = "this_account_has_been_frozen";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}else{
//本文取得 //本文取得
if(!(empty($_GET['userid']))){ if(!(empty($_GET['userid']))){
$follow_userid = safetext($_GET['userid']); $follow_userid = safetext($_GET['userid']);
@@ -111,6 +95,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "could_not_complete"; $err = "could_not_complete";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
@@ -118,6 +103,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "you_cant_it_to_yourself"; $err = "you_cant_it_to_yourself";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
@@ -125,6 +111,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "critical_error_userdata_not_found"; $err = "critical_error_userdata_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
@@ -132,16 +119,26 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
}else{
$err = $AuthData[1];
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
} }
}else{ }else{
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
+18 -27
View File
@@ -1,8 +1,8 @@
<?php <?php
$domain = $_SERVER['HTTP_HOST']; $domain = $_SERVER['HTTP_HOST'];
require('../../db.php'); require(__DIR__ . '/../../db.php');
require("../../function/function.php"); require(__DIR__ . "/../../function/function.php");
blockedIP($_SERVER['REMOTE_ADDR']); blockedIP($_SERVER['REMOTE_ADDR']);
header("Content-Type: application/json; charset=utf-8"); header("Content-Type: application/json; charset=utf-8");
@@ -37,6 +37,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -46,6 +47,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -59,6 +61,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
@@ -68,31 +71,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
session_start(); session_start();
if( !empty($pdo) ) { if( !empty($pdo) ) {
$userQuery = $pdo->prepare("SELECT username, userid, role FROM account WHERE token = :token"); $AuthData = APIAuth($pdo, $token, "read:users");
$userQuery->bindValue(':token', $token); if($AuthData[0] === true){
$userQuery->execute(); $userdata = $AuthData[2];
$userData = $userQuery->fetch();
if(empty($userData["userid"])){
$err = "token_invalid";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}elseif($userData["role"] === "ice"){
$err = "this_account_has_been_frozen";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}else{
$DataQuery = $pdo->prepare("SELECT username,userid,profile,datetime,follow,follower,iconname,headname,role,sacinfo,admin FROM account WHERE userid = :userid");
$DataQuery->bindValue(':userid', $userid);
$DataQuery->execute();
$userdata = $DataQuery->fetch();
if (empty($userdata)){ if (empty($userdata)){
$response = array( $response = array(
@@ -174,6 +155,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$All_ueuse = $allueuse->rowCount(); $All_ueuse = $allueuse->rowCount();
$response = array( $response = array(
'success' => true,
'username' => decode_yajirushi(htmlspecialchars_decode($userdata["username"])), 'username' => decode_yajirushi(htmlspecialchars_decode($userdata["username"])),
'userid' => decode_yajirushi(htmlspecialchars_decode($userdata["userid"])), 'userid' => decode_yajirushi(htmlspecialchars_decode($userdata["userid"])),
'profile' => decode_yajirushi(htmlspecialchars_decode($userdata["profile"])), 'profile' => decode_yajirushi(htmlspecialchars_decode($userdata["profile"])),
@@ -191,6 +173,14 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
'language' => "ja-JP", 'language' => "ja-JP",
); );
} }
echo json_encode($response, JSON_UNESCAPED_UNICODE);
}else{
$err = $AuthData[1];
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
} }
@@ -198,6 +188,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
+22 -26
View File
@@ -1,15 +1,15 @@
<?php <?php
$domain = $_SERVER['HTTP_HOST']; $domain = $_SERVER['HTTP_HOST'];
require('../../db.php'); require(__DIR__ . '/../../db.php');
//関数呼び出し //関数呼び出し
//- Base64_mime //- Base64_mime
require('../../function/function.php'); require(__DIR__ . '/../../function/function.php');
blockedIP($_SERVER['REMOTE_ADDR']); blockedIP($_SERVER['REMOTE_ADDR']);
$mojisizefile = "../../server/textsize.txt"; $mojisizefile = __DIR__ . "/../../server/textsize.txt";
$banurldomainfile = "../../server/banurldomain.txt"; $banurldomainfile = __DIR__ . "/../../server/banurldomain.txt";
$banurl_info = file_get_contents($banurldomainfile); $banurl_info = file_get_contents($banurldomainfile);
$banurl = preg_split("/\r\n|\n|\r/", $banurl_info); $banurl = preg_split("/\r\n|\n|\r/", $banurl_info);
@@ -44,6 +44,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -53,6 +54,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -61,27 +63,9 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
session_start(); session_start();
if( !empty($pdo) ) { if( !empty($pdo) ) {
$userQuery = $pdo->prepare("SELECT username, userid, role, follow, follower FROM account WHERE token = :token"); $AuthData = APIAuth($pdo, $token, "write:follow");
$userQuery->bindValue(':token', $token); if($AuthData[0] === true){
$userQuery->execute(); $userData = $AuthData[2];
$userData = $userQuery->fetch();
if(empty($userData["userid"])){
$err = "token_invalid";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}elseif($userData["role"] === "ice"){
$err = "this_account_has_been_frozen";
$response = array(
'error_code' => $err,
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit;
}else{
//本文取得 //本文取得
if(!(empty($_GET['userid']))){ if(!(empty($_GET['userid']))){
$unfollow_userid = safetext($_GET['userid']); $unfollow_userid = safetext($_GET['userid']);
@@ -100,7 +84,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
if(!(empty($Follow_userdata))){ if(!(empty($Follow_userdata))){
if(!($userid == $Follow_userdata['userid'])){ if(!($userid == $Follow_userdata['userid'])){
$res = follow_user($pdo, $Follow_userdata['userid'], $userid); $res = unfollow_user($pdo, $Follow_userdata['userid'], $userid);
if($res === true){ if($res === true){
//フォロー完了 //フォロー完了
$response = array( $response = array(
@@ -112,6 +96,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "could_not_complete"; $err = "could_not_complete";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
@@ -119,6 +104,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "you_cant_it_to_yourself"; $err = "you_cant_it_to_yourself";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -127,6 +113,7 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "critical_error_userdata_not_found"; $err = "critical_error_userdata_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
@@ -135,18 +122,27 @@ if(isset($_GET['token']) || (!(empty($Get_Post_Json)))) {
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
exit; exit;
} }
}else{
$err = $AuthData[1];
$response = array(
'error_code' => $err,
'success' => false
);
echo json_encode($response, JSON_UNESCAPED_UNICODE);
} }
} }
}else{ }else{
$err = "input_not_found"; $err = "input_not_found";
$response = array( $response = array(
'error_code' => $err, 'error_code' => $err,
'success' => false
); );
echo json_encode($response, JSON_UNESCAPED_UNICODE); echo json_encode($response, JSON_UNESCAPED_UNICODE);
+6 -6
View File
@@ -1,28 +1,28 @@
<?php <?php
require('../../db.php'); require(__DIR__ . '/../../db.php');
require("../../function/function.php"); require(__DIR__ . "/../../function/function.php");
blockedIP($_SERVER['REMOTE_ADDR']); blockedIP($_SERVER['REMOTE_ADDR']);
$serversettings_file = "../../server/serversettings.ini"; $serversettings_file = __DIR__ . "/../../server/serversettings.ini";
$serversettings = parse_ini_file($serversettings_file, true); $serversettings = parse_ini_file($serversettings_file, true);
if(safetext($serversettings["serverinfo"]["server_activitypub"]) === "true"){ if(safetext($serversettings["serverinfo"]["server_activitypub"]) === "true"){
header("Content-Type: application/json; charset=utf-8"); header("Content-Type: application/json; charset=utf-8");
header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Origin: *");
$mojisizefile = "../../server/textsize.txt"; $mojisizefile = __DIR__ . "/../../server/textsize.txt";
$adminfile = safetext($serversettings["serverinfo"]["server_admin"]); $adminfile = safetext($serversettings["serverinfo"]["server_admin"]);
$servernamefile = safetext($serversettings["serverinfo"]["server_name"]); $servernamefile = safetext($serversettings["serverinfo"]["server_name"]);
$serverinfofile = '../../server/info.txt'; $serverinfofile = __DIR__ . '/../../server/info.txt';
$serverinfo = safetext(file_get_contents($serverinfofile)); $serverinfo = safetext(file_get_contents($serverinfofile));
$contactfile = safetext($serversettings["serverinfo"]["server_admin_mailadds"]); $contactfile = safetext($serversettings["serverinfo"]["server_admin_mailadds"]);
$domain = $_SERVER['HTTP_HOST']; $domain = $_SERVER['HTTP_HOST'];
$softwarefile = "../../server/uwuzuinfo.txt"; $softwarefile = __DIR__ . "/../../server/uwuzuinfo.txt";
$softwaredata = safetext(file_get_contents($softwarefile)); $softwaredata = safetext(file_get_contents($softwarefile));
$onlyuser = safetext($serversettings["serverinfo"]["server_invitation"]); $onlyuser = safetext($serversettings["serverinfo"]["server_invitation"]);
+2 -31
View File
@@ -222,37 +222,8 @@ if( !empty($_POST['btn_submit']) ) {
$checkResult = $chkauthcode->verifyCode($tousercode, $userauthcode, $discrepancy); $checkResult = $chkauthcode->verifyCode($tousercode, $userauthcode, $discrepancy);
if ($checkResult) { if ($checkResult) {
$pdo->beginTransaction(); $msg = "アカウントにログインがありました。\nもしログインした覚えがない場合は「その他」よりセッショントークンを再生成し、パスワードを変更し、二段階認証を再設定してください。\n\nログインした端末 : ".$device;
try { send_notification($userid,"uwuzu-fromsys","🚪ログイン通知🚪",$msg,"/settings", "login");
$touserid = $userid;
$datetime = date("Y-m-d H:i:s");
$msg = "アカウントにログインがありました。\nもしログインした覚えがない場合は「その他」よりセッショントークンを再生成し、パスワードを変更し、二段階認証を再設定してください。\n\nログインした端末 : ".$device;
$title = '🚪ログイン通知🚪';
$url = '/settings';
$userchk = 'none';
// 通知用SQL作成
$stmt = $pdo->prepare("INSERT INTO notification (fromuserid, touserid, msg, url, datetime, userchk, title) VALUES (:fromuserid, :touserid, :msg, :url, :datetime, :userchk, :title)");
$stmt->bindParam(':fromuserid', safetext("uwuzu-fromsys"), PDO::PARAM_STR);
$stmt->bindParam(':touserid', safetext($touserid), PDO::PARAM_STR);
$stmt->bindParam(':msg', safetext($msg), PDO::PARAM_STR);
$stmt->bindParam(':url', safetext($url), PDO::PARAM_STR);
$stmt->bindParam(':userchk', safetext($userchk), PDO::PARAM_STR);
$stmt->bindParam(':title', safetext($title), PDO::PARAM_STR);
$stmt->bindParam(':datetime', safetext($datetime), PDO::PARAM_STR);
// SQLクエリの実行
$res = $stmt->execute();
// コミット
$res = $pdo->commit();
} catch(Exception $e) {
// エラーが発生した時はロールバック
$pdo->rollBack();
}
clearstatcache(); clearstatcache();
+31 -25
View File
@@ -43,8 +43,6 @@ if (safetext(isset($_POST['uniqid'])) && safetext(isset($_POST['userid'])) && sa
if($result2["loginid"] === $loginid){ if($result2["loginid"] === $loginid){
try { try {
$pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS);
// Bookmark情報を取得 // Bookmark情報を取得
$stmt = $pdo->prepare("SELECT bookmark FROM account WHERE userid = :userid"); $stmt = $pdo->prepare("SELECT bookmark FROM account WHERE userid = :userid");
$stmt->bindValue(':userid', $userId, PDO::PARAM_STR); $stmt->bindValue(':userid', $userId, PDO::PARAM_STR);
@@ -52,33 +50,41 @@ if (safetext(isset($_POST['uniqid'])) && safetext(isset($_POST['userid'])) && sa
$post = $stmt->fetch(PDO::FETCH_ASSOC); $post = $stmt->fetch(PDO::FETCH_ASSOC);
if ($post) { if ($post) {
$bookmarkList = explode(',', $post['bookmark']); // ユーズ情報を取得
$index = array_search($postUniqid, $bookmarkList); $ueusestmt = $pdo->prepare("SELECT uniqid FROM ueuse WHERE uniqid = :uniqid LIMIT 1");
$ueusestmt->bindValue(':uniqid', $postUniqid, PDO::PARAM_STR);
$ueusestmt->execute();
$ueuse = $ueusestmt->fetch(PDO::FETCH_ASSOC);
if(!(empty($ueuse))){
$bookmarkList = explode(',', $post['bookmark']);
$index = array_search($postUniqid, $bookmarkList);
if ($index === false) { if ($index === false) {
// UniqIDを追加 // UniqIDを追加
$bookmarkList[] = $postUniqid; $bookmarkList[] = $postUniqid;
} else {
// UniqIDを削除
array_splice($bookmarkList, $index, 1);
}
// 新しいいいね情報を更新
$newbookmark = implode(',', $bookmarkList);
$updateQuery = $pdo->prepare("UPDATE account SET bookmark = :bookmark WHERE userid = :userid");
$updateQuery->bindValue(':bookmark', $newbookmark, PDO::PARAM_STR);
$updateQuery->bindValue(':userid', $userId, PDO::PARAM_STR);
$res = $updateQuery->execute();
if ($res) {
echo json_encode(['success' => true, 'newbookmark' => 'success']);
exit;
} else {
echo json_encode(['success' => false, 'error' => 'ブックマークの更新に失敗しました。']);
exit;
}
} else { } else {
// UniqIDを削除 echo json_encode(['success' => false, 'error' => 'ユーズが見つかりません。']);
array_splice($bookmarkList, $index, 1);
}
// 新しいいいね情報を更新
$newbookmark = implode(',', $bookmarkList);
$updateQuery = $pdo->prepare("UPDATE account SET bookmark = :bookmark WHERE userid = :userid");
$updateQuery->bindValue(':bookmark', $newbookmark, PDO::PARAM_STR);
$updateQuery->bindValue(':userid', $userId, PDO::PARAM_STR);
$res = $updateQuery->execute();
if ($res) {
echo json_encode(['success' => true, 'newbookmark' => 'success']);
exit;
} else {
echo json_encode(['success' => false, 'error' => 'ブックマークの更新に失敗しました。']);
exit; exit;
} }
} else { } else {
echo json_encode(['success' => false, 'error' => 'アカウントが見つかりません。']); echo json_encode(['success' => false, 'error' => 'アカウントが見つかりません。']);
exit; exit;
+12 -39
View File
@@ -79,37 +79,8 @@ if( !empty($_POST['btn_submit']) ) {
$useragent = safetext($_SERVER['HTTP_USER_AGENT']); $useragent = safetext($_SERVER['HTTP_USER_AGENT']);
$device = UserAgent_to_Device($useragent); $device = UserAgent_to_Device($useragent);
$pdo->beginTransaction(); $msg = "アカウントにログインがありました。\nもしログインした覚えがない場合は「その他」よりセッショントークンを再生成し、パスワードを変更してください。\n\nログインした端末 : ".$device;
try { send_notification($userid,"uwuzu-fromsys","🚪ログイン通知🚪",$msg,"/settings", "login");
$touserid = $userid;
$datetime = date("Y-m-d H:i:s");
$msg = "アカウントにログインがありました。\nもしログインした覚えがない場合は「その他」よりセッショントークンを再生成し、パスワードを変更してください。\n\nログインした端末 : ".$device;
$title = '🚪ログイン通知🚪';
$url = '/settings';
$userchk = 'none';
// 通知用SQL作成
$stmt = $pdo->prepare("INSERT INTO notification (fromuserid, touserid, msg, url, datetime, userchk, title) VALUES (:fromuserid, :touserid, :msg, :url, :datetime, :userchk, :title)");
$stmt->bindParam(':fromuserid', safetext("uwuzu-fromsys"), PDO::PARAM_STR);
$stmt->bindParam(':touserid', safetext($touserid), PDO::PARAM_STR);
$stmt->bindParam(':msg', safetext($msg), PDO::PARAM_STR);
$stmt->bindParam(':url', safetext($url), PDO::PARAM_STR);
$stmt->bindParam(':userchk', safetext($userchk), PDO::PARAM_STR);
$stmt->bindParam(':title', safetext($title), PDO::PARAM_STR);
$stmt->bindParam(':datetime', safetext($datetime), PDO::PARAM_STR);
// SQLクエリの実行
$res = $stmt->execute();
// コミット
$res = $pdo->commit();
} catch(Exception $e) {
// エラーが発生した時はロールバック
$pdo->rollBack();
}
clearstatcache(); clearstatcache();
@@ -222,14 +193,16 @@ $pdo = null;
<?php foreach ($roles as $roleId): ?> <?php foreach ($roles as $roleId): ?>
<?php $roleData = $roleDataArray[$roleId]; ?> <?php $roleData = $roleDataArray[$roleId]; ?>
<?php <?php
if(safetext($roleData["roleeffect"]) == '' || safetext($roleData["roleeffect"]) == 'none'){ if(!(empty($roleData))){
$role_view_effect = ""; if(safetext($roleData["roleeffect"]) == '' || safetext($roleData["roleeffect"]) == 'none'){
}elseif(safetext($roleData["roleeffect"]) == 'shine'){ $role_view_effect = "";
$role_view_effect = "shine"; }elseif(safetext($roleData["roleeffect"]) == 'shine'){
}elseif(safetext($roleData["roleeffect"]) == 'rainbow'){ $role_view_effect = "shine";
$role_view_effect = "rainbow"; }elseif(safetext($roleData["roleeffect"]) == 'rainbow'){
}else{ $role_view_effect = "rainbow";
$role_view_effect = ""; }else{
$role_view_effect = "";
}
} }
?> ?>
<div class="rolebox <?php echo safetext($role_view_effect); ?>" style="border: 1px solid <?php echo '#' . safetext($roleData["rolecolor"]); ?>;"> <div class="rolebox <?php echo safetext($role_view_effect); ?>" style="border: 1px solid <?php echo '#' . safetext($roleData["rolecolor"]); ?>;">
+2786 -1987
View File
File diff suppressed because it is too large Load Diff
+4 -4
View File
@@ -106,7 +106,7 @@ body{
margin-top: 64px; margin-top: 64px;
margin-bottom: 100px; margin-bottom: 100px;
border-radius: 25px; border-radius: 25px;
background-color: var(--background-color); background-color: var(--tl-color);
box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15); box-shadow:0 0px 48px 0 rgba(0, 0, 0, .15);
} }
@@ -205,7 +205,7 @@ body{
width: calc(50% - 52px); width: calc(50% - 52px);
height: 5dvh; height: 5dvh;
border-radius: 15px; border-radius: 15px;
background-color: var(--sub-color); background-color: var(--background-color);
border: solid 1px var(--border-color); border: solid 1px var(--border-color);
padding: 18px; padding: 18px;
} }
@@ -229,8 +229,8 @@ body{
word-wrap: break-word; word-wrap: break-word;
line-height: 24px; line-height: 24px;
color: var(--text-color); color: var(--text-color);
font-size: 20px; font-size: 24px;
font-family: var(--Text-fonts), sans-serif; font-family: var(--Mono-fonts), sans-serif;
font-weight: bold; font-weight: bold;
} }
+2 -2
View File
@@ -100,13 +100,13 @@ switch ($error_code) {
<div class="err404"> <div class="err404">
<?php <?php
if($error_code === 404){ if($error_code === 404){
if(!(empty($custom404file))){ if(!(empty(file_get_contents($custom404file)))){
?> ?>
<img src="<?php echo file_get_contents($custom404file);?>"> <img src="<?php echo file_get_contents($custom404file);?>">
<?php <?php
} }
}elseif($error_code === 503){ }elseif($error_code === 503){
if(!(empty($custom503file))){?> if(!(empty(file_get_contents($custom503file)))){?>
<img src="<?php echo file_get_contents($custom503file);?>"> <img src="<?php echo file_get_contents($custom503file);?>">
<?php <?php
} }
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

+43
View File
@@ -0,0 +1,43 @@
<?php
header('Content-Type: application/json');
require('../db.php');
require("function.php");
blockedIP($_SERVER['REMOTE_ADDR']);
if (safetext(isset($_POST['uniqid'])) && safetext(isset($_POST['userid'])) && safetext(isset($_POST['account_id'])) && safetext(isset($_COOKIE['loginkey']))) {
try {
$option = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_MULTI_STATEMENTS => false
);
$pdo = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, $option);
} catch (PDOException $e) {
// 接続エラーのときエラー内容を取得する
actionLog($userid, "error", "ueuse", null, $e, 4);
}
$userid = safetext($_POST['userid']);
$uniqid = safetext($_POST['uniqid']);
$loginid = safetext($_POST['account_id']);
$loginkey = safetext($_COOKIE['loginkey']);
$is_login = uwuzuUserLoginCheck($loginid, $loginkey, "user");
if ($is_login === false) {
echo json_encode(['success' => false, 'error' => '認証に失敗しました。(AUTH_INVALID)']);
exit;
}
if(DelAPIToken($pdo, $uniqid)){
echo json_encode(['success' => true, 'message' => 'アクセストークンが削除されました。']);
exit;
} else {
echo json_encode(['success' => false, 'error' => 'アクセストークンの削除に失敗しました。']);
exit;
}
} else {
echo json_encode(['success' => false, 'error' => '必要なパラメータが提供されていません。']);
exit;
}
?>
+1013 -507
View File
File diff suppressed because it is too large Load Diff
+27 -12
View File
@@ -382,10 +382,15 @@ $(document).ready(function() {
dataType: 'json', dataType: 'json',
timeout: 300000, timeout: 300000,
success: function(response) { success: function(response) {
renderUeuses(response); if(renderUeuses(response)){
pageNumber++; pageNumber++;
isLoading = false; isLoading = false;
$("#loading").hide(); $("#loading").hide();
}else{
isLoading = false;
$("#loading").hide();
$("#error").show();
}
}, },
error: function(xhr, textStatus, errorThrown) { error: function(xhr, textStatus, errorThrown) {
isLoading = false; isLoading = false;
@@ -401,10 +406,15 @@ $(document).ready(function() {
dataType: 'json', dataType: 'json',
timeout: 300000, timeout: 300000,
success: function(response) { success: function(response) {
renderUeuses(response); if(renderUeuses(response)){
pageNumber++; pageNumber++;
isLoading = false; isLoading = false;
$("#loading").hide(); $("#loading").hide();
}else{
isLoading = false;
$("#loading").hide();
$("#error").show();
}
}, },
error: function(xhr, textStatus, errorThrown) { error: function(xhr, textStatus, errorThrown) {
isLoading = false; isLoading = false;
@@ -420,10 +430,15 @@ $(document).ready(function() {
dataType: 'json', dataType: 'json',
timeout: 300000, timeout: 300000,
success: function(response) { success: function(response) {
renderUeuses(response); if(renderUeuses(response)){
pageNumber++; pageNumber++;
isLoading = false; isLoading = false;
$("#loading").hide(); $("#loading").hide();
}else{
isLoading = false;
$("#loading").hide();
$("#error").show();
}
}, },
error: function(xhr, textStatus, errorThrown) { error: function(xhr, textStatus, errorThrown) {
isLoading = false; isLoading = false;
Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 347 KiB

+10 -151
View File
@@ -1,151 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8"?>
<svg <svg id="a" data-name="レイヤー 1" xmlns="http://www.w3.org/2000/svg" width="1920" height="617.021" viewBox="0 0 1920 617.021">
version="1.1" <path d="M697.989,491.01c-61.412,0-111.374-49.961-111.374-111.375v-101.721h36.186v101.721c0,41.459,33.729,75.189,75.187,75.189s75.185-33.73,75.185-75.189v-101.721h36.186v101.721c0,61.414-49.961,111.375-111.372,111.375Z" fill="#333b3a"/>
id="Layer_1" <path d="M1280.001,491.01c-61.412,0-111.374-49.961-111.374-111.375v-101.721h36.186v101.721c0,41.459,33.729,75.189,75.187,75.189s75.187-33.73,75.187-75.189v-101.721h36.186v101.721c0,61.414-49.961,111.375-111.374,111.375Z" fill="#333b3a"/>
x="0px" <path d="M1808.626,491.01c-61.412,0-111.374-49.961-111.374-111.375v-101.721h36.186v101.721c0,41.459,33.729,75.189,75.187,75.189s75.187-33.73,75.187-75.189v-101.721h36.186v101.721c0,61.414-49.961,111.375-111.374,111.375Z" fill="#333b3a"/>
y="0px" <path d="M1076.134,352.564v71.353c0,19.037-15.487,34.525-34.524,34.525s-34.524-15.489-34.524-34.525v-35.836h-36.186v35.836c0,19.037-15.487,34.525-34.522,34.525s-34.524-15.489-34.524-34.525v-71.353h-36.186v71.353c0,38.992,31.72,70.712,70.71,70.712,20.903,0,39.659-9.171,52.615-23.638,12.957,14.467,31.713,23.638,52.617,23.638,38.99,0,70.71-31.72,70.71-70.712v-71.353h-36.186Z" fill="#333b3a"/>
width="100%" <polygon points="1429.866 489.762 1578.418 310.85 1440.409 310.85 1440.409 277.914 1648.576 277.914 1500.023 456.826 1638.033 456.826 1638.033 489.762 1429.866 489.762" fill="#333b3a"/>
viewBox="0 0 1320 780" <path d="M222.275,617.021v-88.91c73.539,0,133.365-59.826,133.365-133.365,0-52.744-31.292-99.801-77.597-121.186l-187.536,310.87-39.931-48.519C17.961,496.28,0,446.147,0,394.746s17.961-101.535,50.576-141.165l68.651,56.495c-19.834,24.103-30.317,53.381-30.317,84.67,0,6.156.405,12.231,1.207,18.205l146.146-242.26,30.76,6.295c102.866,21.047,177.528,112.631,177.528,217.76,0,122.564-99.711,222.275-222.275,222.275Z" fill="#ffc832"/>
enable-background="new 0 0 1320 780" <path d="M154.045,74.992c-9.994,35.309-2.299,71.379,17.692,98.945,31.473-12.999,56.932-39.684,66.926-74.993C248.658,63.637,240.962,27.567,220.972,0c-31.473,13-56.933,39.685-66.927,74.992Z" fill="#56c138"/>
xml:space="preserve" </svg>
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs118" />
<path
fill="#FFC934"
opacity="1.000000"
stroke="none"
d=" M355.211090,430.264038 C359.845093,400.400208 364.069824,370.922729 369.114166,341.586212 C375.766724,302.896851 383.092163,264.323395 390.020386,225.680756 C390.524323,222.869904 391.816986,222.218002 394.377441,222.238815 C405.374725,222.328186 416.376404,222.427902 427.369293,222.190933 C430.955414,222.113632 431.411469,224.118210 431.880920,226.710556 C436.534821,252.409225 441.261078,278.094879 445.874298,303.800812 C451.104645,332.945465 456.524872,362.060547 461.307251,391.279327 C464.046600,408.015839 465.676605,424.933685 467.828918,441.766998 C467.964233,442.825317 468.298126,443.858246 469.291443,444.858582 C476.945770,363.075775 484.600098,281.292938 492.287292,199.158905 C505.239227,199.158905 517.783813,199.158905 531.057251,199.158905 C518.249573,299.933105 505.464752,400.527374 492.628967,501.522644 C479.323090,501.522644 466.093384,501.522644 451.882233,501.522644 C438.814148,426.131073 419.380005,351.620331 410.714539,274.895844 C402.727325,351.592041 382.856842,425.951569 370.166016,501.689514 C356.130463,501.689514 342.869659,501.689514 329.145813,501.689514 C316.329742,400.876007 303.537689,300.251373 290.687286,199.168060 C303.546356,199.168060 315.918915,199.168060 328.994446,199.168060 C336.864258,281.113586 344.727905,362.995270 352.591583,444.876953 C352.915009,444.934418 353.238434,444.991913 353.561859,445.049377 C354.096741,440.270630 354.631653,435.491882 355.211090,430.264038 z"
id="path63" />
<path
fill="#FFC934"
opacity="1.000000"
stroke="none"
d=" M248.801941,453.000000 C248.801819,467.471008 248.801819,481.441986 248.801819,495.822693 C236.006989,495.822693 223.618896,495.822693 210.638107,495.822693 C210.638107,479.800842 210.638107,463.732452 210.638107,447.664062 C210.223114,447.547546 209.808105,447.431000 209.393112,447.314453 C208.628357,448.817383 207.820068,450.299896 207.105667,451.826355 C200.688568,465.537079 192.850143,478.274872 181.017975,488.023010 C151.452515,512.380981 110.051361,504.613403 89.742691,471.302307 C81.359436,457.551758 77.395569,442.532166 76.180023,426.821442 C74.922516,410.568237 74.238640,394.234131 74.173035,377.931885 C73.941643,320.435669 74.083015,262.937927 74.083023,205.440781 C74.083023,203.470886 74.083031,201.500977 74.083031,199.149475 C87.371323,199.149475 100.249405,199.149475 113.776085,199.149475 C113.776085,201.225800 113.776070,203.173828 113.776077,205.121841 C113.776405,263.618958 113.791916,322.116058 113.767891,380.613159 C113.760635,398.300659 114.125374,415.988037 119.038788,433.117737 C120.898514,439.601349 123.461533,446.128387 126.995277,451.836151 C134.584702,464.094696 147.906647,467.643036 161.037918,461.621765 C173.504013,455.905518 181.817749,445.701965 189.154617,434.639893 C198.073746,421.192169 204.010315,406.373810 208.306976,390.885010 C208.916779,388.686707 209.015289,386.291748 209.016724,383.987579 C209.053421,324.490540 209.045792,264.993500 209.045853,205.496429 C209.045853,203.523544 209.045853,201.550659 209.045853,199.172424 C222.317047,199.172424 235.203766,199.172424 248.802063,199.172424 C248.802063,283.630798 248.802063,368.065399 248.801941,453.000000 z"
id="path65" />
<path
fill="#FFC934"
opacity="1.000000"
stroke="none"
d=" M587.959473,468.048157 C580.249329,455.108490 577.298218,441.066254 576.182434,426.751068 C574.915894,410.501617 574.238159,394.169464 574.172791,377.869812 C573.942017,320.382843 574.083008,262.894318 574.083008,205.406387 C574.083008,203.439056 574.083008,201.471710 574.083008,199.136414 C587.391418,199.136414 600.267639,199.136414 613.776062,199.136414 C613.776062,201.249176 613.776062,203.198578 613.776062,205.147995 C613.776428,263.635712 613.791992,322.123444 613.768005,380.611176 C613.760742,398.295776 614.124756,415.980316 619.036438,433.107544 C620.895630,439.590302 623.456482,446.116577 626.987976,451.824554 C634.574707,464.087097 647.890259,467.643768 661.020081,461.630859 C673.487305,455.921356 681.803223,445.721008 689.140808,434.662231 C698.060730,421.218597 704.000366,406.404022 708.297485,390.917694 C708.907410,388.719482 709.014709,386.326050 709.016174,384.022766 C709.053406,324.535278 709.045715,265.047760 709.045776,205.560226 C709.045776,203.583038 709.045776,201.605835 709.045776,199.197403 C722.269958,199.197403 735.153442,199.197403 748.421631,199.197403 C748.421631,298.008850 748.421631,396.862335 748.421631,495.976196 C735.887146,495.976196 723.614380,495.976196 710.721436,495.976196 C710.721436,479.874390 710.721436,463.826050 710.721436,447.777740 C710.284912,447.637939 709.848328,447.498169 709.411804,447.358368 C708.658020,448.805939 707.848328,450.227417 707.159119,451.705139 C700.761475,465.423187 692.927429,478.158142 681.127075,487.935822 C651.986145,512.082031 610.878479,504.927338 590.396240,472.257751 C589.600220,470.988129 588.880127,469.670898 587.959473,468.048157 z"
id="path67" />
<path
fill="#FFC934"
opacity="1.000000"
stroke="none"
d=" M1100.988770,198.763443 C1105.303833,198.763306 1109.120850,198.763306 1113.776123,198.763306 C1113.776123,201.034927 1113.776001,202.947708 1113.776123,204.860504 C1113.776245,263.357788 1113.794434,321.855103 1113.765747,380.352386 C1113.756958,398.207764 1114.136963,416.057068 1119.083862,433.353210 C1120.893677,439.680695 1123.415649,446.038025 1126.851196,451.619476 C1134.555420,464.135925 1147.896729,467.705505 1161.252441,461.515869 C1173.531372,455.825256 1181.757324,445.761322 1189.017456,434.860626 C1198.055908,421.289917 1204.051147,406.312195 1208.373901,390.654816 C1208.980347,388.458069 1209.018433,386.055298 1209.019775,383.747742 C1209.052734,324.250488 1209.045776,264.753235 1209.045898,205.255997 C1209.045898,203.300186 1209.045898,201.344376 1209.045898,199.079651 C1222.473267,199.079651 1235.355347,199.079651 1248.519653,199.079651 C1248.519653,298.128876 1248.519653,396.866302 1248.519653,495.920013 C1235.836548,495.920013 1223.430542,495.920013 1210.414795,495.920013 C1210.414795,479.712799 1210.414795,463.680695 1210.414795,447.648560 C1210.070923,447.567902 1209.727173,447.487244 1209.383301,447.406616 C1208.522217,449.105225 1207.624634,450.786530 1206.805664,452.505188 C1200.367310,466.014862 1192.580078,478.595337 1180.829224,488.174988 C1151.245605,512.292542 1110.220337,504.603424 1089.875977,471.522369 C1081.439697,457.804565 1077.457275,442.787262 1076.197510,427.077362 C1074.934326,411.325989 1074.236084,395.490570 1074.173950,379.688538 C1073.945190,321.525482 1074.083130,263.360931 1074.083130,205.196960 C1074.083130,203.243942 1074.083130,201.290924 1074.083130,198.763580 C1083.255615,198.763580 1091.873169,198.763580 1100.988770,198.763443 z"
id="path69" />
<path
fill="#FFC833"
opacity="1.000000"
stroke="none"
d=" M820.828247,488.882812 C818.622681,470.860077 823.941406,455.584900 832.282227,440.107513 C868.621216,372.676239 904.039978,304.749054 939.778381,236.994339 C940.216614,236.163620 940.462952,235.231735 941.079285,233.608093 C902.342957,233.608093 864.134827,233.608093 825.480103,233.608093 C825.480103,221.792877 825.480103,210.608597 825.480103,199.092941 C878.437561,199.092941 931.318909,199.092941 984.901855,199.092941 C983.750488,212.594910 986.570801,225.625610 979.535767,238.938889 C953.785889,287.668518 929.725159,337.288849 904.143372,386.109985 C892.263367,408.782104 878.350342,430.389008 865.354675,452.476257 C864.556946,453.832092 863.721191,455.165588 862.301636,457.497467 C907.658936,457.497467 951.861816,457.497467 996.440552,457.497467 C996.440552,469.544708 996.440552,480.946808 996.440552,492.943298 C994.745422,493.037933 992.998779,493.220215 991.252197,493.220703 C936.269653,493.235718 881.287109,493.236694 826.304565,493.221771 C823.632996,493.221039 820.173889,494.173309 820.828247,488.882812 z"
id="path71" />
<path
fill="#FFC937"
opacity="1.000000"
stroke="none"
d=" M640.996826,636.876587 C631.534973,636.876526 622.572693,636.876526 613.267090,636.876526 C613.267090,633.877075 613.267090,631.322754 613.267090,628.211914 C627.454346,628.211914 641.531738,628.211914 655.976807,628.211914 C655.976807,622.444092 655.976807,617.214600 655.976807,611.288757 C641.106995,611.288757 626.236694,611.288757 611.093750,611.288757 C611.093750,608.186279 611.093750,605.764099 611.093750,602.775574 C612.874695,602.681152 614.626648,602.511353 616.378906,602.507751 C628.206238,602.483398 640.035156,602.385742 651.859924,602.560852 C655.347473,602.612488 656.633301,601.492798 656.408936,597.998474 C656.166321,594.218750 656.354004,590.411499 656.354004,586.340332 C659.789124,586.340332 662.685791,586.340332 666.193542,586.340332 C666.193542,588.998840 666.165161,591.443237 666.198486,593.886841 C666.335083,603.903870 664.873474,602.383301 675.042297,602.480103 C683.037598,602.556152 691.034058,602.495361 699.030029,602.495361 C700.824463,602.495361 702.618896,602.495361 704.695984,602.495361 C704.695984,605.543274 704.695984,607.968445 704.695984,611.152405 C699.047668,611.152405 693.450500,611.152161 687.853333,611.152466 C681.856384,611.152832 675.858521,611.213257 669.862854,611.125183 C667.472046,611.090027 666.080139,611.664001 666.165710,614.431091 C666.298828,618.731873 666.200928,623.039795 666.200928,627.959595 C678.450928,627.959595 690.334473,627.959595 702.545898,627.959595 C702.545898,631.130859 702.545898,633.686340 702.545898,636.856567 C690.517456,636.856567 678.623840,636.856567 666.203125,636.856567 C666.203125,643.243652 665.920837,649.053162 666.403015,654.798584 C666.522461,656.221008 668.905396,658.014099 670.615356,658.653381 C683.954773,663.640076 696.336060,670.326233 708.414612,678.997498 C706.707336,681.772522 705.101074,684.383240 703.573608,686.865845 C691.442444,679.804993 679.600891,672.912781 666.532654,665.306458 C666.299438,668.780823 666.180725,670.648682 666.047729,672.515503 C665.208252,684.302307 657.869751,691.830688 646.131470,693.069763 C637.540527,693.976562 629.166382,693.536926 621.300293,689.503723 C614.340210,685.935059 610.332520,680.686768 610.767517,672.402039 C611.182312,664.502075 615.488281,659.125183 622.427429,657.238525 C630.477905,655.049683 639.014648,654.566833 647.373291,653.641052 C650.088501,653.340271 652.907410,653.975708 656.026733,654.208923 C656.026733,648.306519 656.026733,642.913269 656.026733,636.876709 C651.053894,636.876709 646.275208,636.876709 640.996826,636.876587 M656.471802,669.072571 C655.951355,667.034058 655.746826,663.377502 654.862244,663.204834 C644.883972,661.257141 634.677551,659.748352 625.360046,665.414368 C618.862183,669.365723 619.053589,678.293762 625.903259,681.669983 C630.043884,683.710938 635.061584,684.651489 639.728149,684.808289 C650.220032,685.160889 655.173340,680.351990 656.471802,669.072571 z"
id="path73" />
<path
fill="#FFCA39"
opacity="1.000000"
stroke="none"
d=" M175.731308,597.839844 C177.053848,598.773682 178.647003,599.701904 178.648392,600.632507 C178.691483,629.433533 178.579300,658.234863 178.477020,687.036072 C178.476562,687.163635 178.275269,687.290588 177.942032,687.685059 C148.085587,687.685059 118.001976,687.685059 87.513718,687.685059 C87.513718,657.960754 87.513718,628.265198 87.513718,597.835327 C116.782074,597.835327 146.020981,597.835327 175.731308,597.839844 M97.644875,617.521484 C97.644875,637.770813 97.644875,658.020142 97.644875,678.409668 C121.544495,678.409668 144.622986,678.409668 167.807922,678.409668 C167.807922,654.527954 167.807922,630.976501 167.807922,607.335693 C144.346008,607.335693 121.266884,607.335693 97.644310,607.335693 C97.644310,610.613403 97.644310,613.572510 97.644875,617.521484 z"
id="path75" />
<path
fill="#FFCA39"
opacity="1.000000"
stroke="none"
d=" M512.171509,670.736267 C511.171844,680.482788 509.062622,689.392639 498.453247,692.079895 C486.485687,695.111267 474.646088,694.566589 465.440948,685.079468 C457.671356,677.071899 460.267761,664.031189 470.144775,658.055115 C478.336884,653.098328 487.275879,653.332703 496.315918,654.455750 C497.949585,654.658569 499.567627,654.987183 501.671631,655.337463 C501.671631,643.292358 501.671631,631.587097 501.671631,619.209717 C488.498230,619.209717 475.126251,619.209717 461.437988,619.209717 C461.437988,615.981018 461.437988,613.411621 461.437988,610.349609 C474.770111,610.349609 488.021210,610.349609 501.896088,610.349609 C501.896088,602.663696 501.896088,595.442261 501.896088,587.838928 C505.431580,587.838928 508.342621,587.838928 511.877991,587.838928 C511.877991,595.057373 511.877991,602.272644 511.877991,609.930786 C520.570984,609.930786 528.661743,609.930786 537.217407,609.930786 C537.217407,613.060547 537.217407,615.737488 537.217407,618.879150 C529.030151,618.879150 520.936523,618.879150 512.018250,618.879150 C512.018250,622.393311 512.018250,625.476318 512.018250,628.559326 C512.018250,637.052673 512.191589,645.551208 511.936554,654.036926 C511.828064,657.647400 512.896484,659.575867 516.207275,661.378601 C522.467468,664.787292 528.461121,668.762390 534.251709,672.937378 C541.611145,678.243591 541.476624,678.430115 535.315369,686.099365 C529.394348,681.655151 523.505920,677.134888 517.490417,672.790588 C515.972107,671.694031 514.047607,671.159912 512.171509,670.736267 M481.052307,683.812500 C482.375305,683.950256 483.698090,684.090393 485.021362,684.225342 C497.048126,685.451721 503.285156,679.272400 502.024231,667.176392 C501.905334,666.035828 500.802795,664.386353 499.795990,664.048218 C492.887543,661.728699 485.812744,661.042236 478.734558,663.296082 C472.902405,665.153198 470.073944,669.491638 470.976196,674.988953 C471.834778,680.220154 475.785950,682.216431 481.052307,683.812500 z"
id="path77" />
<path
fill="#FFC936"
opacity="1.000000"
stroke="none"
d=" M329.997589,685.239624 C306.543274,685.239746 283.588226,685.239746 260.228455,685.239746 C260.228455,682.343323 260.228455,679.784180 260.228455,676.548584 C285.184174,676.548584 310.208069,676.548584 335.571899,676.548584 C335.571899,654.188416 335.571899,632.493713 335.571899,610.231628 C311.081604,610.231628 286.864258,610.231628 262.331482,610.231628 C262.331482,607.090332 262.331482,604.504272 262.331482,601.147583 C263.934937,601.147583 265.527954,601.147583 267.120972,601.147583 C288.765198,601.147583 310.409454,601.138062 332.053680,601.152649 C339.662903,601.157715 346.026886,607.495361 346.027069,615.006409 C346.027618,636.317627 346.027313,657.628906 346.027283,678.940125 C346.027283,680.751038 346.027252,682.561951 346.027252,685.239441 C340.648895,685.239441 335.572876,685.239441 329.997589,685.239624 z"
id="path79" />
<path
fill="#FFCA39"
opacity="1.000000"
stroke="none"
d=" M982.031799,674.993652 C982.890625,663.460815 991.272522,655.887756 1004.097595,655.084656 C1010.006165,654.714661 1015.957214,655.021545 1022.545654,655.021545 C1022.545654,645.609985 1022.545654,635.709656 1022.545654,625.531128 C1026.112427,625.531128 1029.038208,625.531128 1032.768799,625.531128 C1032.768799,632.652100 1033.435669,639.822937 1032.604492,646.815735 C1031.499512,656.111267 1034.004517,661.968140 1043.419678,665.244080 C1049.105469,667.222351 1054.021851,671.419556 1059.267212,674.646912 C1060.098877,675.158691 1060.842041,675.814453 1061.909668,676.616882 C1060.253784,679.256592 1058.693237,681.744141 1056.911377,684.584595 C1049.054077,679.748535 1041.497559,675.097473 1033.212036,669.997742 C1032.711548,672.682922 1032.392212,674.407104 1032.068604,676.130554 C1030.208740,686.035278 1025.097168,692.130310 1015.183899,693.196960 C1008.280212,693.939758 1000.853333,693.207092 994.135681,691.382568 C986.759460,689.379272 982.272095,683.628479 982.031799,674.993652 M997.239075,683.544006 C999.301514,684.154541 1001.330261,684.938354 1003.431946,685.346863 C1015.083801,687.611572 1023.240723,680.763184 1022.725891,668.994446 C1022.664673,667.595764 1021.416138,665.442932 1020.234314,665.032654 C1013.522095,662.702148 1006.597351,662.062134 999.690979,664.284668 C995.306763,665.695496 991.976013,668.424988 991.286926,673.230530 C990.649780,677.673889 992.868958,680.877563 997.239075,683.544006 z"
id="path81" />
<path
fill="#FFCA39"
opacity="1.000000"
stroke="none"
d=" M818.085632,586.058655 C821.350098,586.014465 822.324768,587.151428 821.582581,590.087158 C820.409424,594.728027 819.559265,599.450500 818.411987,604.900574 C830.197632,604.900574 841.388733,604.900574 852.835815,604.900574 C852.835815,608.145569 852.835815,610.715210 852.835815,613.705505 C840.675293,613.705505 828.748718,613.705505 816.281677,613.705505 C808.949158,641.172974 801.280029,668.293213 789.192993,694.402710 C786.013977,693.256836 783.120056,692.213623 779.656738,690.965271 C790.473083,665.847778 799.321289,640.540588 805.840576,613.837402 C797.074890,613.837402 788.811646,613.837402 780.247498,613.837402 C780.247498,610.807800 780.247498,608.240356 780.247498,604.997742 C788.130310,604.997742 795.903259,604.807861 803.659729,605.081909 C807.256226,605.209045 808.646118,603.970093 809.150269,600.491394 C809.862122,595.579407 811.102234,590.743958 812.189819,585.523621 C814.146729,585.702637 815.911255,585.864014 818.085632,586.058655 z"
id="path83" />
<path
fill="#FFCA39"
opacity="1.000000"
stroke="none"
d=" M1143.879639,602.124023 C1143.539062,622.917603 1142.784180,643.282532 1148.049927,663.168945 C1149.265015,667.757141 1151.290527,672.284851 1153.753540,676.349304 C1156.807007,681.387878 1159.585449,681.373779 1162.725464,676.432739 C1165.834717,671.539978 1168.282349,666.223145 1170.953735,661.057922 C1171.782837,659.454773 1172.394653,657.739075 1173.103271,656.081116 C1181.329224,659.449463 1182.114624,660.929626 1178.489990,668.541809 C1175.782593,674.227966 1172.889038,679.921265 1169.305420,685.073730 C1162.677124,694.603394 1153.261108,694.401306 1146.476929,684.868347 C1140.360229,676.273376 1136.659058,666.472412 1135.911621,656.119080 C1134.572021,637.566650 1134.241821,618.940552 1133.564819,600.342529 C1133.506470,598.742737 1134.007812,597.122620 1134.313477,595.083069 C1137.443359,595.225037 1140.369995,595.357727 1143.891968,595.517456 C1143.891968,597.804565 1143.891968,599.722290 1143.879639,602.124023 z"
id="path85" />
<path
fill="#FFCA3A"
opacity="1.000000"
stroke="none"
d=" M994.927979,587.196167 C993.627991,592.866150 992.236877,598.131958 990.696411,603.963013 C998.384033,603.963013 1005.631287,603.963013 1013.277893,603.963013 C1013.277893,607.137817 1013.277893,609.829468 1013.277893,613.019714 C1006.084106,613.019714 999.120056,613.235352 992.178772,612.931641 C988.529907,612.772034 987.159363,614.221619 985.757080,617.445007 C979.860168,631.000122 973.589905,644.394531 967.327148,657.787354 C966.147034,660.310974 964.377625,662.559021 962.561035,665.440247 C959.798096,663.878357 957.291321,662.461304 955.125122,661.236755 C962.845276,645.304016 970.390625,629.732056 978.506287,612.983032 C970.535706,612.983032 964.469299,612.983032 958.144897,612.983032 C958.144897,609.878174 958.144897,607.308594 958.144897,604.134766 C964.155273,604.134766 969.950623,603.874756 975.708557,604.226807 C979.505127,604.458984 981.149170,602.990906 981.802551,599.482178 C982.257263,597.040405 983.143372,594.680969 983.795959,592.273682 C986.057800,583.930298 986.051025,583.928467 994.927979,587.196167 z"
id="path87" />
<path
fill="#FFCA3A"
opacity="1.000000"
stroke="none"
d=" M444.529388,671.404724 C445.040527,678.305725 445.494781,684.745300 445.979919,691.622437 C442.683197,692.167969 439.686951,692.663757 436.199005,693.240906 C432.551605,657.843323 433.575745,623.251221 438.397034,588.102295 C441.543304,588.519653 444.403259,588.899109 448.073914,589.386047 C443.864288,616.576477 442.948639,643.718445 444.529388,671.404724 z"
id="path89" />
<path
fill="#FFCA39"
opacity="1.000000"
stroke="none"
d=" M1222.278564,667.707031 C1219.279907,644.268799 1213.898926,621.922668 1203.729980,600.996399 C1211.073120,596.509949 1212.351562,596.917847 1215.797852,604.141602 C1225.050049,623.535645 1230.091431,644.099060 1232.837646,665.296021 C1233.656494,671.616150 1232.617798,672.404785 1223.411865,672.814514 C1223.062622,671.293335 1222.699829,669.712952 1222.278564,667.707031 z"
id="path91" />
<path
fill="#FFCA39"
opacity="1.000000"
stroke="none"
d=" M835.823303,689.325317 C825.275574,685.429321 821.333435,677.281860 824.954468,667.513489 C826.953552,662.120483 827.966736,661.755432 832.722168,664.761475 C833.691284,665.374207 834.612610,666.062500 835.691101,666.809570 C835.387756,667.699829 835.110962,668.456909 834.870789,669.225464 C832.816040,675.803528 834.788635,679.777405 841.636292,680.767578 C848.996826,681.831909 856.493225,682.253601 863.937988,682.347412 C870.350586,682.428345 876.773987,681.654053 883.544556,681.236145 C883.902649,684.361938 884.236023,687.272583 884.664368,691.011536 C868.294983,692.548035 852.210449,693.371521 835.823303,689.325317 z"
id="path93" />
<path
fill="#FFCA3A"
opacity="1.000000"
stroke="none"
d=" M846.532715,640.397888 C841.292236,640.877625 836.508667,641.278015 831.302490,641.713806 C830.805298,638.980408 830.342773,636.437561 829.640198,632.574646 C846.505493,631.578796 862.823792,630.615234 879.612549,629.623901 C880.002441,633.266479 880.292786,635.978455 880.639404,639.216919 C869.151062,639.593018 858.070374,639.955750 846.532715,640.397888 z"
id="path95" />
<path
fill="#FFCA3A"
opacity="1.000000"
stroke="none"
d=" M1040.868164,602.133057 C1048.962769,608.754761 1056.757690,615.181335 1064.937500,621.925171 C1062.173340,624.941833 1060.097534,627.207336 1058.144653,629.338623 C1048.166870,620.671448 1038.546753,612.314819 1028.544678,603.626404 C1030.097046,601.902405 1031.839111,599.967773 1033.966187,597.605530 C1036.237061,599.095703 1038.402710,600.516846 1040.868164,602.133057 z"
id="path97" />
<path
fill="#FFCB3D"
opacity="1.000000"
stroke="none"
d=" M864.111206,587.274597 C866.258179,589.169189 868.411926,590.953491 869.775696,593.214417 C872.248535,597.313904 874.250793,601.697327 876.713013,606.473267 C874.046265,607.734985 871.869995,608.764648 869.461670,609.904114 C865.797058,603.117737 862.269714,596.585510 858.494934,589.595215 C860.245789,588.858521 862.003906,588.118835 864.111206,587.274597 z"
id="path99" />
<path
fill="#FFCB3D"
opacity="1.000000"
stroke="none"
d=" M878.911072,593.223877 C877.249451,590.341492 875.753357,587.790527 873.915588,584.657043 C876.387512,583.713989 878.594360,582.872070 881.457397,581.779785 C885.134705,588.289124 888.681091,594.566711 892.507141,601.339355 C889.541382,602.722412 887.230225,603.800171 884.729858,604.966187 C882.732056,600.933655 880.904297,597.244507 878.911072,593.223877 z"
id="path101" />
<path
fill="#FFCB3D"
opacity="1.000000"
stroke="none"
d=" M338.077332,584.783813 C342.753113,582.152466 345.691833,583.361877 347.682373,587.914368 C349.719147,592.572571 352.052826,597.100952 354.519989,602.234314 C351.597748,603.288879 349.328888,604.107666 346.491943,605.131470 C343.530518,598.287476 340.649200,591.628723 338.077332,584.783813 z"
id="path103" />
<path
fill="#FFCB3D"
opacity="1.000000"
stroke="none"
d=" M362.911499,600.416077 C359.184875,594.367310 355.790802,588.204041 352.402985,582.052185 C358.359436,578.012756 359.210205,578.082336 362.600555,583.990906 C365.061493,588.279663 367.134155,592.791199 369.677094,597.787231 C367.134613,598.780945 365.189331,599.541321 362.911499,600.416077 z"
id="path105" />
</svg>

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 15 KiB

+10 -195
View File
@@ -1,195 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8"?>
<svg <svg id="a" data-name="レイヤー 1" xmlns="http://www.w3.org/2000/svg" width="1920" height="617.021" viewBox="0 0 1920 617.021">
version="1.1" <path d="M697.989,491.01c-61.412,0-111.374-49.961-111.374-111.375v-101.721h36.186v101.721c0,41.459,33.729,75.189,75.187,75.189s75.185-33.73,75.185-75.189v-101.721h36.186v101.721c0,61.414-49.961,111.375-111.372,111.375Z" fill="#fff"/>
id="Layer_1" <path d="M1280.001,491.01c-61.412,0-111.374-49.961-111.374-111.375v-101.721h36.186v101.721c0,41.459,33.729,75.189,75.187,75.189s75.187-33.73,75.187-75.189v-101.721h36.186v101.721c0,61.414-49.961,111.375-111.374,111.375Z" fill="#fff"/>
x="0px" <path d="M1808.626,491.01c-61.412,0-111.374-49.961-111.374-111.375v-101.721h36.186v101.721c0,41.459,33.729,75.189,75.187,75.189s75.187-33.73,75.187-75.189v-101.721h36.186v101.721c0,61.414-49.961,111.375-111.374,111.375Z" fill="#fff"/>
y="0px" <path d="M1076.134,352.564v71.353c0,19.037-15.487,34.525-34.524,34.525s-34.524-15.489-34.524-34.525v-35.836h-36.186v35.836c0,19.037-15.487,34.525-34.522,34.525s-34.524-15.489-34.524-34.525v-71.353h-36.186v71.353c0,38.992,31.72,70.712,70.71,70.712,20.903,0,39.659-9.171,52.615-23.638,12.957,14.467,31.713,23.638,52.617,23.638,38.99,0,70.71-31.72,70.71-70.712v-71.353h-36.186Z" fill="#fff"/>
width="100%" <polygon points="1429.866 489.762 1578.418 310.85 1440.409 310.85 1440.409 277.914 1648.576 277.914 1500.023 456.826 1638.033 456.826 1638.033 489.762 1429.866 489.762" fill="#fff"/>
viewBox="0 0 1320 780" <path d="M222.275,617.021v-88.91c73.539,0,133.365-59.826,133.365-133.365,0-52.744-31.292-99.801-77.597-121.186l-187.536,310.87-39.931-48.519C17.961,496.28,0,446.147,0,394.746s17.961-101.535,50.576-141.165l68.651,56.495c-19.834,24.103-30.317,53.381-30.317,84.67,0,6.156.405,12.231,1.207,18.205l146.146-242.26,30.76,6.295c102.866,21.047,177.528,112.631,177.528,217.76,0,122.564-99.711,222.275-222.275,222.275Z" fill="#fff"/>
enable-background="new 0 0 1320 780" <path d="M154.045,74.992c-9.994,35.309-2.299,71.379,17.692,98.945,31.473-12.999,56.932-39.684,66.926-74.993C248.658,63.637,240.962,27.567,220.972,0c-31.473,13-56.933,39.685-66.927,74.992Z" fill="#fff"/>
xml:space="preserve" </svg>
sodipodi:docname="uwuzulogo.svg"
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs118" /><sodipodi:namedview
id="namedview116"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="true"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="0.96590909"
inkscape:cx="659.48235"
inkscape:cy="390.30588"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="-4"
inkscape:window-y="-4"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" />
<path
fill="#FFC934"
opacity="1.000000"
stroke="none"
d=" M355.211090,430.264038 C359.845093,400.400208 364.069824,370.922729 369.114166,341.586212 C375.766724,302.896851 383.092163,264.323395 390.020386,225.680756 C390.524323,222.869904 391.816986,222.218002 394.377441,222.238815 C405.374725,222.328186 416.376404,222.427902 427.369293,222.190933 C430.955414,222.113632 431.411469,224.118210 431.880920,226.710556 C436.534821,252.409225 441.261078,278.094879 445.874298,303.800812 C451.104645,332.945465 456.524872,362.060547 461.307251,391.279327 C464.046600,408.015839 465.676605,424.933685 467.828918,441.766998 C467.964233,442.825317 468.298126,443.858246 469.291443,444.858582 C476.945770,363.075775 484.600098,281.292938 492.287292,199.158905 C505.239227,199.158905 517.783813,199.158905 531.057251,199.158905 C518.249573,299.933105 505.464752,400.527374 492.628967,501.522644 C479.323090,501.522644 466.093384,501.522644 451.882233,501.522644 C438.814148,426.131073 419.380005,351.620331 410.714539,274.895844 C402.727325,351.592041 382.856842,425.951569 370.166016,501.689514 C356.130463,501.689514 342.869659,501.689514 329.145813,501.689514 C316.329742,400.876007 303.537689,300.251373 290.687286,199.168060 C303.546356,199.168060 315.918915,199.168060 328.994446,199.168060 C336.864258,281.113586 344.727905,362.995270 352.591583,444.876953 C352.915009,444.934418 353.238434,444.991913 353.561859,445.049377 C354.096741,440.270630 354.631653,435.491882 355.211090,430.264038 z"
id="path63"
style="fill:#ffffff" />
<path
fill="#FFC934"
opacity="1.000000"
stroke="none"
d=" M248.801941,453.000000 C248.801819,467.471008 248.801819,481.441986 248.801819,495.822693 C236.006989,495.822693 223.618896,495.822693 210.638107,495.822693 C210.638107,479.800842 210.638107,463.732452 210.638107,447.664062 C210.223114,447.547546 209.808105,447.431000 209.393112,447.314453 C208.628357,448.817383 207.820068,450.299896 207.105667,451.826355 C200.688568,465.537079 192.850143,478.274872 181.017975,488.023010 C151.452515,512.380981 110.051361,504.613403 89.742691,471.302307 C81.359436,457.551758 77.395569,442.532166 76.180023,426.821442 C74.922516,410.568237 74.238640,394.234131 74.173035,377.931885 C73.941643,320.435669 74.083015,262.937927 74.083023,205.440781 C74.083023,203.470886 74.083031,201.500977 74.083031,199.149475 C87.371323,199.149475 100.249405,199.149475 113.776085,199.149475 C113.776085,201.225800 113.776070,203.173828 113.776077,205.121841 C113.776405,263.618958 113.791916,322.116058 113.767891,380.613159 C113.760635,398.300659 114.125374,415.988037 119.038788,433.117737 C120.898514,439.601349 123.461533,446.128387 126.995277,451.836151 C134.584702,464.094696 147.906647,467.643036 161.037918,461.621765 C173.504013,455.905518 181.817749,445.701965 189.154617,434.639893 C198.073746,421.192169 204.010315,406.373810 208.306976,390.885010 C208.916779,388.686707 209.015289,386.291748 209.016724,383.987579 C209.053421,324.490540 209.045792,264.993500 209.045853,205.496429 C209.045853,203.523544 209.045853,201.550659 209.045853,199.172424 C222.317047,199.172424 235.203766,199.172424 248.802063,199.172424 C248.802063,283.630798 248.802063,368.065399 248.801941,453.000000 z"
id="path65"
style="fill:#ffffff" />
<path
fill="#FFC934"
opacity="1.000000"
stroke="none"
d=" M587.959473,468.048157 C580.249329,455.108490 577.298218,441.066254 576.182434,426.751068 C574.915894,410.501617 574.238159,394.169464 574.172791,377.869812 C573.942017,320.382843 574.083008,262.894318 574.083008,205.406387 C574.083008,203.439056 574.083008,201.471710 574.083008,199.136414 C587.391418,199.136414 600.267639,199.136414 613.776062,199.136414 C613.776062,201.249176 613.776062,203.198578 613.776062,205.147995 C613.776428,263.635712 613.791992,322.123444 613.768005,380.611176 C613.760742,398.295776 614.124756,415.980316 619.036438,433.107544 C620.895630,439.590302 623.456482,446.116577 626.987976,451.824554 C634.574707,464.087097 647.890259,467.643768 661.020081,461.630859 C673.487305,455.921356 681.803223,445.721008 689.140808,434.662231 C698.060730,421.218597 704.000366,406.404022 708.297485,390.917694 C708.907410,388.719482 709.014709,386.326050 709.016174,384.022766 C709.053406,324.535278 709.045715,265.047760 709.045776,205.560226 C709.045776,203.583038 709.045776,201.605835 709.045776,199.197403 C722.269958,199.197403 735.153442,199.197403 748.421631,199.197403 C748.421631,298.008850 748.421631,396.862335 748.421631,495.976196 C735.887146,495.976196 723.614380,495.976196 710.721436,495.976196 C710.721436,479.874390 710.721436,463.826050 710.721436,447.777740 C710.284912,447.637939 709.848328,447.498169 709.411804,447.358368 C708.658020,448.805939 707.848328,450.227417 707.159119,451.705139 C700.761475,465.423187 692.927429,478.158142 681.127075,487.935822 C651.986145,512.082031 610.878479,504.927338 590.396240,472.257751 C589.600220,470.988129 588.880127,469.670898 587.959473,468.048157 z"
id="path67"
style="fill:#ffffff" />
<path
fill="#FFC934"
opacity="1.000000"
stroke="none"
d=" M1100.988770,198.763443 C1105.303833,198.763306 1109.120850,198.763306 1113.776123,198.763306 C1113.776123,201.034927 1113.776001,202.947708 1113.776123,204.860504 C1113.776245,263.357788 1113.794434,321.855103 1113.765747,380.352386 C1113.756958,398.207764 1114.136963,416.057068 1119.083862,433.353210 C1120.893677,439.680695 1123.415649,446.038025 1126.851196,451.619476 C1134.555420,464.135925 1147.896729,467.705505 1161.252441,461.515869 C1173.531372,455.825256 1181.757324,445.761322 1189.017456,434.860626 C1198.055908,421.289917 1204.051147,406.312195 1208.373901,390.654816 C1208.980347,388.458069 1209.018433,386.055298 1209.019775,383.747742 C1209.052734,324.250488 1209.045776,264.753235 1209.045898,205.255997 C1209.045898,203.300186 1209.045898,201.344376 1209.045898,199.079651 C1222.473267,199.079651 1235.355347,199.079651 1248.519653,199.079651 C1248.519653,298.128876 1248.519653,396.866302 1248.519653,495.920013 C1235.836548,495.920013 1223.430542,495.920013 1210.414795,495.920013 C1210.414795,479.712799 1210.414795,463.680695 1210.414795,447.648560 C1210.070923,447.567902 1209.727173,447.487244 1209.383301,447.406616 C1208.522217,449.105225 1207.624634,450.786530 1206.805664,452.505188 C1200.367310,466.014862 1192.580078,478.595337 1180.829224,488.174988 C1151.245605,512.292542 1110.220337,504.603424 1089.875977,471.522369 C1081.439697,457.804565 1077.457275,442.787262 1076.197510,427.077362 C1074.934326,411.325989 1074.236084,395.490570 1074.173950,379.688538 C1073.945190,321.525482 1074.083130,263.360931 1074.083130,205.196960 C1074.083130,203.243942 1074.083130,201.290924 1074.083130,198.763580 C1083.255615,198.763580 1091.873169,198.763580 1100.988770,198.763443 z"
id="path69"
style="fill:#ffffff" />
<path
fill="#FFC833"
opacity="1.000000"
stroke="none"
d=" M820.828247,488.882812 C818.622681,470.860077 823.941406,455.584900 832.282227,440.107513 C868.621216,372.676239 904.039978,304.749054 939.778381,236.994339 C940.216614,236.163620 940.462952,235.231735 941.079285,233.608093 C902.342957,233.608093 864.134827,233.608093 825.480103,233.608093 C825.480103,221.792877 825.480103,210.608597 825.480103,199.092941 C878.437561,199.092941 931.318909,199.092941 984.901855,199.092941 C983.750488,212.594910 986.570801,225.625610 979.535767,238.938889 C953.785889,287.668518 929.725159,337.288849 904.143372,386.109985 C892.263367,408.782104 878.350342,430.389008 865.354675,452.476257 C864.556946,453.832092 863.721191,455.165588 862.301636,457.497467 C907.658936,457.497467 951.861816,457.497467 996.440552,457.497467 C996.440552,469.544708 996.440552,480.946808 996.440552,492.943298 C994.745422,493.037933 992.998779,493.220215 991.252197,493.220703 C936.269653,493.235718 881.287109,493.236694 826.304565,493.221771 C823.632996,493.221039 820.173889,494.173309 820.828247,488.882812 z"
id="path71"
style="fill:#ffffff" />
<path
fill="#FFC937"
opacity="1.000000"
stroke="none"
d=" M640.996826,636.876587 C631.534973,636.876526 622.572693,636.876526 613.267090,636.876526 C613.267090,633.877075 613.267090,631.322754 613.267090,628.211914 C627.454346,628.211914 641.531738,628.211914 655.976807,628.211914 C655.976807,622.444092 655.976807,617.214600 655.976807,611.288757 C641.106995,611.288757 626.236694,611.288757 611.093750,611.288757 C611.093750,608.186279 611.093750,605.764099 611.093750,602.775574 C612.874695,602.681152 614.626648,602.511353 616.378906,602.507751 C628.206238,602.483398 640.035156,602.385742 651.859924,602.560852 C655.347473,602.612488 656.633301,601.492798 656.408936,597.998474 C656.166321,594.218750 656.354004,590.411499 656.354004,586.340332 C659.789124,586.340332 662.685791,586.340332 666.193542,586.340332 C666.193542,588.998840 666.165161,591.443237 666.198486,593.886841 C666.335083,603.903870 664.873474,602.383301 675.042297,602.480103 C683.037598,602.556152 691.034058,602.495361 699.030029,602.495361 C700.824463,602.495361 702.618896,602.495361 704.695984,602.495361 C704.695984,605.543274 704.695984,607.968445 704.695984,611.152405 C699.047668,611.152405 693.450500,611.152161 687.853333,611.152466 C681.856384,611.152832 675.858521,611.213257 669.862854,611.125183 C667.472046,611.090027 666.080139,611.664001 666.165710,614.431091 C666.298828,618.731873 666.200928,623.039795 666.200928,627.959595 C678.450928,627.959595 690.334473,627.959595 702.545898,627.959595 C702.545898,631.130859 702.545898,633.686340 702.545898,636.856567 C690.517456,636.856567 678.623840,636.856567 666.203125,636.856567 C666.203125,643.243652 665.920837,649.053162 666.403015,654.798584 C666.522461,656.221008 668.905396,658.014099 670.615356,658.653381 C683.954773,663.640076 696.336060,670.326233 708.414612,678.997498 C706.707336,681.772522 705.101074,684.383240 703.573608,686.865845 C691.442444,679.804993 679.600891,672.912781 666.532654,665.306458 C666.299438,668.780823 666.180725,670.648682 666.047729,672.515503 C665.208252,684.302307 657.869751,691.830688 646.131470,693.069763 C637.540527,693.976562 629.166382,693.536926 621.300293,689.503723 C614.340210,685.935059 610.332520,680.686768 610.767517,672.402039 C611.182312,664.502075 615.488281,659.125183 622.427429,657.238525 C630.477905,655.049683 639.014648,654.566833 647.373291,653.641052 C650.088501,653.340271 652.907410,653.975708 656.026733,654.208923 C656.026733,648.306519 656.026733,642.913269 656.026733,636.876709 C651.053894,636.876709 646.275208,636.876709 640.996826,636.876587 M656.471802,669.072571 C655.951355,667.034058 655.746826,663.377502 654.862244,663.204834 C644.883972,661.257141 634.677551,659.748352 625.360046,665.414368 C618.862183,669.365723 619.053589,678.293762 625.903259,681.669983 C630.043884,683.710938 635.061584,684.651489 639.728149,684.808289 C650.220032,685.160889 655.173340,680.351990 656.471802,669.072571 z"
id="path73"
style="fill:#ffffff" />
<path
fill="#FFCA39"
opacity="1.000000"
stroke="none"
d=" M175.731308,597.839844 C177.053848,598.773682 178.647003,599.701904 178.648392,600.632507 C178.691483,629.433533 178.579300,658.234863 178.477020,687.036072 C178.476562,687.163635 178.275269,687.290588 177.942032,687.685059 C148.085587,687.685059 118.001976,687.685059 87.513718,687.685059 C87.513718,657.960754 87.513718,628.265198 87.513718,597.835327 C116.782074,597.835327 146.020981,597.835327 175.731308,597.839844 M97.644875,617.521484 C97.644875,637.770813 97.644875,658.020142 97.644875,678.409668 C121.544495,678.409668 144.622986,678.409668 167.807922,678.409668 C167.807922,654.527954 167.807922,630.976501 167.807922,607.335693 C144.346008,607.335693 121.266884,607.335693 97.644310,607.335693 C97.644310,610.613403 97.644310,613.572510 97.644875,617.521484 z"
id="path75"
style="fill:#ffffff" />
<path
fill="#FFCA39"
opacity="1.000000"
stroke="none"
d=" M512.171509,670.736267 C511.171844,680.482788 509.062622,689.392639 498.453247,692.079895 C486.485687,695.111267 474.646088,694.566589 465.440948,685.079468 C457.671356,677.071899 460.267761,664.031189 470.144775,658.055115 C478.336884,653.098328 487.275879,653.332703 496.315918,654.455750 C497.949585,654.658569 499.567627,654.987183 501.671631,655.337463 C501.671631,643.292358 501.671631,631.587097 501.671631,619.209717 C488.498230,619.209717 475.126251,619.209717 461.437988,619.209717 C461.437988,615.981018 461.437988,613.411621 461.437988,610.349609 C474.770111,610.349609 488.021210,610.349609 501.896088,610.349609 C501.896088,602.663696 501.896088,595.442261 501.896088,587.838928 C505.431580,587.838928 508.342621,587.838928 511.877991,587.838928 C511.877991,595.057373 511.877991,602.272644 511.877991,609.930786 C520.570984,609.930786 528.661743,609.930786 537.217407,609.930786 C537.217407,613.060547 537.217407,615.737488 537.217407,618.879150 C529.030151,618.879150 520.936523,618.879150 512.018250,618.879150 C512.018250,622.393311 512.018250,625.476318 512.018250,628.559326 C512.018250,637.052673 512.191589,645.551208 511.936554,654.036926 C511.828064,657.647400 512.896484,659.575867 516.207275,661.378601 C522.467468,664.787292 528.461121,668.762390 534.251709,672.937378 C541.611145,678.243591 541.476624,678.430115 535.315369,686.099365 C529.394348,681.655151 523.505920,677.134888 517.490417,672.790588 C515.972107,671.694031 514.047607,671.159912 512.171509,670.736267 M481.052307,683.812500 C482.375305,683.950256 483.698090,684.090393 485.021362,684.225342 C497.048126,685.451721 503.285156,679.272400 502.024231,667.176392 C501.905334,666.035828 500.802795,664.386353 499.795990,664.048218 C492.887543,661.728699 485.812744,661.042236 478.734558,663.296082 C472.902405,665.153198 470.073944,669.491638 470.976196,674.988953 C471.834778,680.220154 475.785950,682.216431 481.052307,683.812500 z"
id="path77"
style="fill:#ffffff" />
<path
fill="#FFC936"
opacity="1.000000"
stroke="none"
d=" M329.997589,685.239624 C306.543274,685.239746 283.588226,685.239746 260.228455,685.239746 C260.228455,682.343323 260.228455,679.784180 260.228455,676.548584 C285.184174,676.548584 310.208069,676.548584 335.571899,676.548584 C335.571899,654.188416 335.571899,632.493713 335.571899,610.231628 C311.081604,610.231628 286.864258,610.231628 262.331482,610.231628 C262.331482,607.090332 262.331482,604.504272 262.331482,601.147583 C263.934937,601.147583 265.527954,601.147583 267.120972,601.147583 C288.765198,601.147583 310.409454,601.138062 332.053680,601.152649 C339.662903,601.157715 346.026886,607.495361 346.027069,615.006409 C346.027618,636.317627 346.027313,657.628906 346.027283,678.940125 C346.027283,680.751038 346.027252,682.561951 346.027252,685.239441 C340.648895,685.239441 335.572876,685.239441 329.997589,685.239624 z"
id="path79"
style="fill:#ffffff" />
<path
fill="#FFCA39"
opacity="1.000000"
stroke="none"
d=" M982.031799,674.993652 C982.890625,663.460815 991.272522,655.887756 1004.097595,655.084656 C1010.006165,654.714661 1015.957214,655.021545 1022.545654,655.021545 C1022.545654,645.609985 1022.545654,635.709656 1022.545654,625.531128 C1026.112427,625.531128 1029.038208,625.531128 1032.768799,625.531128 C1032.768799,632.652100 1033.435669,639.822937 1032.604492,646.815735 C1031.499512,656.111267 1034.004517,661.968140 1043.419678,665.244080 C1049.105469,667.222351 1054.021851,671.419556 1059.267212,674.646912 C1060.098877,675.158691 1060.842041,675.814453 1061.909668,676.616882 C1060.253784,679.256592 1058.693237,681.744141 1056.911377,684.584595 C1049.054077,679.748535 1041.497559,675.097473 1033.212036,669.997742 C1032.711548,672.682922 1032.392212,674.407104 1032.068604,676.130554 C1030.208740,686.035278 1025.097168,692.130310 1015.183899,693.196960 C1008.280212,693.939758 1000.853333,693.207092 994.135681,691.382568 C986.759460,689.379272 982.272095,683.628479 982.031799,674.993652 M997.239075,683.544006 C999.301514,684.154541 1001.330261,684.938354 1003.431946,685.346863 C1015.083801,687.611572 1023.240723,680.763184 1022.725891,668.994446 C1022.664673,667.595764 1021.416138,665.442932 1020.234314,665.032654 C1013.522095,662.702148 1006.597351,662.062134 999.690979,664.284668 C995.306763,665.695496 991.976013,668.424988 991.286926,673.230530 C990.649780,677.673889 992.868958,680.877563 997.239075,683.544006 z"
id="path81"
style="fill:#ffffff" />
<path
fill="#FFCA39"
opacity="1.000000"
stroke="none"
d=" M818.085632,586.058655 C821.350098,586.014465 822.324768,587.151428 821.582581,590.087158 C820.409424,594.728027 819.559265,599.450500 818.411987,604.900574 C830.197632,604.900574 841.388733,604.900574 852.835815,604.900574 C852.835815,608.145569 852.835815,610.715210 852.835815,613.705505 C840.675293,613.705505 828.748718,613.705505 816.281677,613.705505 C808.949158,641.172974 801.280029,668.293213 789.192993,694.402710 C786.013977,693.256836 783.120056,692.213623 779.656738,690.965271 C790.473083,665.847778 799.321289,640.540588 805.840576,613.837402 C797.074890,613.837402 788.811646,613.837402 780.247498,613.837402 C780.247498,610.807800 780.247498,608.240356 780.247498,604.997742 C788.130310,604.997742 795.903259,604.807861 803.659729,605.081909 C807.256226,605.209045 808.646118,603.970093 809.150269,600.491394 C809.862122,595.579407 811.102234,590.743958 812.189819,585.523621 C814.146729,585.702637 815.911255,585.864014 818.085632,586.058655 z"
id="path83"
style="fill:#ffffff" />
<path
fill="#FFCA39"
opacity="1.000000"
stroke="none"
d=" M1143.879639,602.124023 C1143.539062,622.917603 1142.784180,643.282532 1148.049927,663.168945 C1149.265015,667.757141 1151.290527,672.284851 1153.753540,676.349304 C1156.807007,681.387878 1159.585449,681.373779 1162.725464,676.432739 C1165.834717,671.539978 1168.282349,666.223145 1170.953735,661.057922 C1171.782837,659.454773 1172.394653,657.739075 1173.103271,656.081116 C1181.329224,659.449463 1182.114624,660.929626 1178.489990,668.541809 C1175.782593,674.227966 1172.889038,679.921265 1169.305420,685.073730 C1162.677124,694.603394 1153.261108,694.401306 1146.476929,684.868347 C1140.360229,676.273376 1136.659058,666.472412 1135.911621,656.119080 C1134.572021,637.566650 1134.241821,618.940552 1133.564819,600.342529 C1133.506470,598.742737 1134.007812,597.122620 1134.313477,595.083069 C1137.443359,595.225037 1140.369995,595.357727 1143.891968,595.517456 C1143.891968,597.804565 1143.891968,599.722290 1143.879639,602.124023 z"
id="path85"
style="fill:#ffffff" />
<path
fill="#FFCA3A"
opacity="1.000000"
stroke="none"
d=" M994.927979,587.196167 C993.627991,592.866150 992.236877,598.131958 990.696411,603.963013 C998.384033,603.963013 1005.631287,603.963013 1013.277893,603.963013 C1013.277893,607.137817 1013.277893,609.829468 1013.277893,613.019714 C1006.084106,613.019714 999.120056,613.235352 992.178772,612.931641 C988.529907,612.772034 987.159363,614.221619 985.757080,617.445007 C979.860168,631.000122 973.589905,644.394531 967.327148,657.787354 C966.147034,660.310974 964.377625,662.559021 962.561035,665.440247 C959.798096,663.878357 957.291321,662.461304 955.125122,661.236755 C962.845276,645.304016 970.390625,629.732056 978.506287,612.983032 C970.535706,612.983032 964.469299,612.983032 958.144897,612.983032 C958.144897,609.878174 958.144897,607.308594 958.144897,604.134766 C964.155273,604.134766 969.950623,603.874756 975.708557,604.226807 C979.505127,604.458984 981.149170,602.990906 981.802551,599.482178 C982.257263,597.040405 983.143372,594.680969 983.795959,592.273682 C986.057800,583.930298 986.051025,583.928467 994.927979,587.196167 z"
id="path87"
style="fill:#ffffff" />
<path
fill="#FFCA3A"
opacity="1.000000"
stroke="none"
d=" M444.529388,671.404724 C445.040527,678.305725 445.494781,684.745300 445.979919,691.622437 C442.683197,692.167969 439.686951,692.663757 436.199005,693.240906 C432.551605,657.843323 433.575745,623.251221 438.397034,588.102295 C441.543304,588.519653 444.403259,588.899109 448.073914,589.386047 C443.864288,616.576477 442.948639,643.718445 444.529388,671.404724 z"
id="path89"
style="fill:#ffffff" />
<path
fill="#FFCA39"
opacity="1.000000"
stroke="none"
d=" M1222.278564,667.707031 C1219.279907,644.268799 1213.898926,621.922668 1203.729980,600.996399 C1211.073120,596.509949 1212.351562,596.917847 1215.797852,604.141602 C1225.050049,623.535645 1230.091431,644.099060 1232.837646,665.296021 C1233.656494,671.616150 1232.617798,672.404785 1223.411865,672.814514 C1223.062622,671.293335 1222.699829,669.712952 1222.278564,667.707031 z"
id="path91"
style="fill:#ffffff" />
<path
fill="#FFCA39"
opacity="1.000000"
stroke="none"
d=" M835.823303,689.325317 C825.275574,685.429321 821.333435,677.281860 824.954468,667.513489 C826.953552,662.120483 827.966736,661.755432 832.722168,664.761475 C833.691284,665.374207 834.612610,666.062500 835.691101,666.809570 C835.387756,667.699829 835.110962,668.456909 834.870789,669.225464 C832.816040,675.803528 834.788635,679.777405 841.636292,680.767578 C848.996826,681.831909 856.493225,682.253601 863.937988,682.347412 C870.350586,682.428345 876.773987,681.654053 883.544556,681.236145 C883.902649,684.361938 884.236023,687.272583 884.664368,691.011536 C868.294983,692.548035 852.210449,693.371521 835.823303,689.325317 z"
id="path93"
style="fill:#ffffff" />
<path
fill="#FFCA3A"
opacity="1.000000"
stroke="none"
d=" M846.532715,640.397888 C841.292236,640.877625 836.508667,641.278015 831.302490,641.713806 C830.805298,638.980408 830.342773,636.437561 829.640198,632.574646 C846.505493,631.578796 862.823792,630.615234 879.612549,629.623901 C880.002441,633.266479 880.292786,635.978455 880.639404,639.216919 C869.151062,639.593018 858.070374,639.955750 846.532715,640.397888 z"
id="path95"
style="fill:#ffffff" />
<path
fill="#FFCA3A"
opacity="1.000000"
stroke="none"
d=" M1040.868164,602.133057 C1048.962769,608.754761 1056.757690,615.181335 1064.937500,621.925171 C1062.173340,624.941833 1060.097534,627.207336 1058.144653,629.338623 C1048.166870,620.671448 1038.546753,612.314819 1028.544678,603.626404 C1030.097046,601.902405 1031.839111,599.967773 1033.966187,597.605530 C1036.237061,599.095703 1038.402710,600.516846 1040.868164,602.133057 z"
id="path97"
style="fill:#ffffff" />
<path
fill="#FFCB3D"
opacity="1.000000"
stroke="none"
d=" M864.111206,587.274597 C866.258179,589.169189 868.411926,590.953491 869.775696,593.214417 C872.248535,597.313904 874.250793,601.697327 876.713013,606.473267 C874.046265,607.734985 871.869995,608.764648 869.461670,609.904114 C865.797058,603.117737 862.269714,596.585510 858.494934,589.595215 C860.245789,588.858521 862.003906,588.118835 864.111206,587.274597 z"
id="path99"
style="fill:#ffffff" />
<path
fill="#FFCB3D"
opacity="1.000000"
stroke="none"
d=" M878.911072,593.223877 C877.249451,590.341492 875.753357,587.790527 873.915588,584.657043 C876.387512,583.713989 878.594360,582.872070 881.457397,581.779785 C885.134705,588.289124 888.681091,594.566711 892.507141,601.339355 C889.541382,602.722412 887.230225,603.800171 884.729858,604.966187 C882.732056,600.933655 880.904297,597.244507 878.911072,593.223877 z"
id="path101"
style="fill:#ffffff" />
<path
fill="#FFCB3D"
opacity="1.000000"
stroke="none"
d=" M338.077332,584.783813 C342.753113,582.152466 345.691833,583.361877 347.682373,587.914368 C349.719147,592.572571 352.052826,597.100952 354.519989,602.234314 C351.597748,603.288879 349.328888,604.107666 346.491943,605.131470 C343.530518,598.287476 340.649200,591.628723 338.077332,584.783813 z"
id="path103"
style="fill:#ffffff" />
<path
fill="#FFCB3D"
opacity="1.000000"
stroke="none"
d=" M362.911499,600.416077 C359.184875,594.367310 355.790802,588.204041 352.402985,582.052185 C358.359436,578.012756 359.210205,578.082336 362.600555,583.990906 C365.061493,588.279663 367.134155,592.791199 369.677094,597.787231 C367.134613,598.780945 365.189331,599.541321 362.911499,600.416077 z"
id="path105"
style="fill:#ffffff" />
</svg>

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

+254 -149
View File
@@ -2,7 +2,7 @@
var global_userid; var global_userid;
var account_id; var account_id;
function view_ueuse_init(user_id, loginid){ function view_ueuse_init(user_id, loginid) {
global_userid = user_id; global_userid = user_id;
global_account_id = loginid; global_account_id = loginid;
return true; return true;
@@ -15,6 +15,7 @@ async function replaceMentions(text) {
const placeholders = []; const placeholders = [];
let index = 0; let index = 0;
// aタグの一時置き換え
text = text.replace(/<a\b[^>]*>.*?<\/a>/gi, (match) => { text = text.replace(/<a\b[^>]*>.*?<\/a>/gi, (match) => {
const placeholder = `\u2063{{PLACEHOLDER${index}}}\u2063`; const placeholder = `\u2063{{PLACEHOLDER${index}}}\u2063`;
placeholders.push(match); placeholders.push(match);
@@ -30,7 +31,8 @@ async function replaceMentions(text) {
return text; return text;
} }
const uniqueMentions = [...new Set(mentionMatches.map(match => match[1]))]; // ユーザーIDを小文字に正規化
const uniqueMentions = [...new Set(mentionMatches.map(match => match[1].toLowerCase()))];
const mentionsToFetch = uniqueMentions.filter(userID => !mentionCache[userID]); const mentionsToFetch = uniqueMentions.filter(userID => !mentionCache[userID]);
if (mentionsToFetch.length > 0) { if (mentionsToFetch.length > 0) {
@@ -45,21 +47,21 @@ async function replaceMentions(text) {
}, },
dataType: 'json', dataType: 'json',
timeout: 300000, timeout: 300000,
success: function(response) { success: function (response) {
if (response.success && response.users) { if (response.success && response.users) {
for (const [name, userInfo] of Object.entries(response.users)) { for (const [name, userInfo] of Object.entries(response.users)) {
if (userInfo && userInfo.userid && userInfo.username) { if (userInfo && userInfo.userid && userInfo.username) {
mentionCache[name] = `<a href="/@${userInfo.userid}" class="mta">@${userInfo.username}</a>`; mentionCache[name.toLowerCase()] = `<a href="/@${userInfo.userid}" class="mta">@${userInfo.username}</a>`;
} else { } else {
mentionCache[name] = `@${name}`; mentionCache[name.toLowerCase()] = `@${name}`;
} }
} }
} }
resolve(); resolve();
}, },
error: function() { error: function () {
for (const name of mentionsToFetch) { for (const name of mentionsToFetch) {
mentionCache[name] = `@${name}`; mentionCache[name.toLowerCase()] = `@${name}`;
} }
resolve(); resolve();
} }
@@ -67,8 +69,13 @@ async function replaceMentions(text) {
}); });
} }
text = text.replace(/@([a-zA-Z0-9_]+)/g, (_, id) => mentionCache[id] || `@${id}`); // 元のtextに適用(小文字で照合)
text = text.replace(/@([a-zA-Z0-9_]+)/g, (_, id) => {
const lower = id.toLowerCase();
return mentionCache[lower] || `@${id}`; // 表示は元の大文字小文字を保持
});
// aタグ戻す
placeholders.forEach((original, i) => { placeholders.forEach((original, i) => {
text = text.replace(`\u2063{{PLACEHOLDER${i}}}\u2063`, original); text = text.replace(`\u2063{{PLACEHOLDER${i}}}\u2063`, original);
}); });
@@ -176,7 +183,7 @@ async function replaceCustomEmojis(text) {
return text; return text;
} }
function a_link(text){ function a_link(text) {
const placeholders = {}; const placeholders = {};
let placeholderIndex = 0; let placeholderIndex = 0;
@@ -186,10 +193,10 @@ function a_link(text){
return key; return key;
}); });
text = text.replace(/(https:\/\/[\w!?\/+\-_~;.,*&@#$%()+|https:\/\/[ぁ-んァ-ヶ一ー-龠々\w\-\/?=&%.]+)/g, function(url) { text = text.replace(/(https:\/\/[\w!?\/+\-_~;.,*&@#$%()+|https:\/\/[ぁ-んァ-ヶ一ー-龠々\w\-\/?=&%.]+)/g, function (url) {
const escapedUrl = url; const escapedUrl = url;
const no_https_link = escapedUrl.replace("https://", ""); const no_https_link = escapedUrl.replace("https://", "");
if(no_https_link.length > 48) { if (no_https_link.length > 48) {
const truncatedLink = no_https_link.substring(0, 48) + '...'; const truncatedLink = no_https_link.substring(0, 48) + '...';
return `<a href="${escapedUrl}" target="_blank" rel="noopener">${truncatedLink}</a>`; return `<a href="${escapedUrl}" target="_blank" rel="noopener">${truncatedLink}</a>`;
} else { } else {
@@ -197,15 +204,15 @@ function a_link(text){
} }
}); });
text = text.replace(/(^|[^a-zA-Z0-9_])#([a-zA-Z0-9ぁ-んァ-ン一-龥ー_]+)/gu, function(match, before, tag) { text = text.replace(/(^|[^a-zA-Z0-9_])#([a-zA-Z0-9ぁ-んァ-ン一-龥ー_]+)/gu, function (match, before, tag) {
const encodedTag = encodeURIComponent("#"+tag); const encodedTag = encodeURIComponent("#" + tag);
return `${before}<a href="/search?q=${encodedTag}" class="hashtags">#${tag}</a>`; return `${before}<a href="/search?q=${encodedTag}" class="hashtags">#${tag}</a>`;
}); });
for (const key in placeholders) { for (const key in placeholders) {
const escapedKey = key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const escapedKey = key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
text = text.replace(new RegExp(escapedKey, 'g'), placeholders[key]); text = text.replace(new RegExp(escapedKey, 'g'), placeholders[key]);
} }
return text; return text;
} }
@@ -257,19 +264,19 @@ function formatMarkdown(text) {
}); });
// マークダウン風装飾 // マークダウン風装飾
text = text text = text
.replace(/\*\*\*(.+?)\*\*\*/g, '<b><i>$1</i></b>') .replace(/\*\*\*(.+?)\*\*\*/g, '<b><i>$1</i></b>')
.replace(/___(.+?)___/g, '<b><i>$1</i></b>') .replace(/___(.+?)___/g, '<b><i>$1</i></b>')
.replace(/\*\*(.+?)\*\*/g, '<b>$1</b>') .replace(/\*\*(.+?)\*\*/g, '<b>$1</b>')
.replace(/__(.+?)__/g, '<b>$1</b>') .replace(/__(.+?)__/g, '<b>$1</b>')
.replace(/\*(.+?)\*/g, '<i>$1</i>') .replace(/\*(.+?)\*/g, '<i>$1</i>')
.replace(/_(.+?)_/g, '<i>$1</i>') .replace(/_(.+?)_/g, '<i>$1</i>')
.replace(/~~(.+?)~~/g, '<s>$1</s>') .replace(/~~(.+?)~~/g, '<s>$1</s>')
.replace(/^&gt;&gt;&gt; ?(.*)$/gm, '<span class="quote">$1</span>') // ここを修正 .replace(/^&gt;&gt;&gt; ?(.*)$/gm, '<span class="quote">$1</span>') // ここを修正
.replace(/\|\|(.+?)\|\|/g, '<span class="blur">$1</span>') .replace(/\|\|(.+?)\|\|/g, '<span class="blur">$1</span>')
.replace(/^# (.+)/gm, '<h1>$1</h1>') .replace(/^# (.+)/gm, '<h1>$1</h1>')
.replace(/^## (.+)/gm, '<h2>$1</h2>') .replace(/^## (.+)/gm, '<h2>$1</h2>')
.replace(/^### (.+)/gm, '<h3>$1</h3>') .replace(/^### (.+)/gm, '<h3>$1</h3>')
.replace(/^- (.+)/gm, '・ $1'); .replace(/^- (.+)/gm, '・ $1');
// 行ごとに <p> タグで囲む // 行ごとに <p> タグで囲む
@@ -283,7 +290,7 @@ function formatMarkdown(text) {
for (const key in placeholders) { for (const key in placeholders) {
const escapedKey = key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const escapedKey = key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
final = final.replace(new RegExp(escapedKey, 'g'), placeholders[key]); final = final.replace(new RegExp(escapedKey, 'g'), placeholders[key]);
} }
return final; return final;
} }
@@ -347,7 +354,7 @@ function YouTube_and_nicovideo_Links(postText) {
embedCode = `<div class="youtube_and_nicovideo_player"><iframe src="https://embed.nicovideo.jp/watch/${videoId}?from=${videoTime}" frameborder="0" allowfullscreen></iframe></div>`; embedCode = `<div class="youtube_and_nicovideo_player"><iframe src="https://embed.nicovideo.jp/watch/${videoId}?from=${videoTime}" frameborder="0" allowfullscreen></iframe></div>`;
embeddedOnce = true; embeddedOnce = true;
} }
}else{ } else {
embedCode = null embedCode = null
} }
} catch (e) { } catch (e) {
@@ -393,9 +400,24 @@ function formatSmartDate(datetimeStr) {
return `${y}/${pad(m + 1)}/${pad(d)} ${hhmm}`; return `${y}/${pad(m + 1)}/${pad(d)} ${hhmm}`;
} }
function getCheckIcon(userdata) {
if (userdata["role"] && userdata["role"].includes("official")) {
return `<div class="checkicon"><div class="check"></div></div>`;
}
return "";
}
function getBotIcon(userdata) {
if (userdata["is_bot"] && userdata["is_bot"] == true) {
return `<div class="bot">Bot</div>`;
}
return "";
}
async function createUeuseHtml(ueuse, selectedUniqid = null) { async function createUeuseHtml(ueuse, selectedUniqid = null) {
let html = ""; let html = "";
let check = ""; let check = "";
let bot = "";
var reuse = ""; var reuse = "";
let contentHtml = ""; let contentHtml = "";
@@ -426,51 +448,49 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) {
var nsfw_start_html = ""; var nsfw_start_html = "";
var nsfw_end_html = ""; var nsfw_end_html = "";
if (ueuse["userdata"]["role"].includes("official")) { if (ueuse["type"] == "Reuse") {
check = ` if (ueuse["reuse"]) {
<div class="checkicon"> check = getCheckIcon(ueuse["reuse"]["userdata"]);
<div class="check"></div> bot = getBotIcon(ueuse["reuse"]["userdata"]);
</div>`; }
}
if(ueuse["type"] == "Reuse"){ if (ueuse["ueuse"].length > 0) {
if(ueuse["ueuse"].length > 0){
reuse = ``; reuse = ``;
if(!(ueuse["reuse"] == null)){ if (!(ueuse["reuse"] == null)) {
// カスタム絵文字を非同期に差し替え // カスタム絵文字を非同期に差し替え
var inyoreuseHtml = formatMarkdown(a_link(ueuse["reuse"]["ueuse"])); var inyoreuseHtml = formatMarkdown(a_link(ueuse["reuse"]["ueuse"]));
inyoreuseHtml = await replaceMentions(inyoreuseHtml); inyoreuseHtml = await replaceMentions(inyoreuseHtml);
inyoreuseHtml = await replaceCustomEmojis(inyoreuseHtml); inyoreuseHtml = await replaceCustomEmojis(inyoreuseHtml);
inyo = `<div class="reuse_box" data-uniqid="`+ueuse["reuse"]["uniqid"]+`" id="quote_reuse"> inyo = `<div class="reuse_box" data-uniqid="` + ueuse["reuse"]["uniqid"] + `" id="quote_reuse">
<div class="reuse_flebox"> <div class="reuse_flebox">
<a href="/!`+ueuse["reuse"]["uniqid"]+`"> <a href="/!`+ ueuse["reuse"]["uniqid"] + `">
<img src="`+ueuse["reuse"]["userdata"]["iconurl"]+`"> <img src="`+ ueuse["reuse"]["userdata"]["iconurl"] + `">
</a> </a>
<a href="/!`+ueuse["reuse"]["uniqid"]+`"> <a href="/!`+ ueuse["reuse"]["uniqid"] + `">
<div class="u_name"> <div class="u_name">
`+await replaceCustomEmojis(ueuse["reuse"]["userdata"]["username"])+` `+ await replaceCustomEmojis(ueuse["reuse"]["userdata"]["username"]) + `
</div> </div>
</a> </a>
<div class="idbox"> <div class="idbox">
<a href="/@`+ueuse["reuse"]["userdata"]["userid"]+`"> <a href="/@`+ ueuse["reuse"]["userdata"]["userid"] + `">
@`+ueuse["reuse"]["userdata"]["userid"]+` @`+ ueuse["reuse"]["userdata"]["userid"] + `
</a> </a>
</div> </div>
</div> </div>
<p> <p>
`+inyoreuseHtml+` `+ inyoreuseHtml + `
</p> </p>
</div>`; </div>`;
}else{ } else {
inyo = `<div class="reuse_box" id="quote_reuse"> inyo = `<div class="reuse_box" id="quote_reuse">
<p> <p>
リユーズ元のユーズは削除されました リユーズ元のユーズは削除されました
</p> </p>
</div>`; </div>`;
} }
contentHtml = formatMarkdown(a_link(ueuse["ueuse"])); contentHtml = formatMarkdown(a_link(ueuse["ueuse"]));
uniqid = ueuse["uniqid"]; uniqid = ueuse["uniqid"];
@@ -494,12 +514,12 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) {
abi = ueuse["abi"]["abi_text"]; abi = ueuse["abi"]["abi_text"];
abi_date = ueuse["abi"]["abi_date"]; abi_date = ueuse["abi"]["abi_date"];
}else{ } else {
if(!(ueuse["reuse"] == null)){ if (!(ueuse["reuse"] == null)) {
reuse = `<div class="ru"> reuse = `<div class="ru">
<a href="/@`+ueuse["userdata"]["userid"]+`"> <a href="/@`+ ueuse["userdata"]["userid"] + `">
<img src="`+ueuse["userdata"]["iconurl"]+`"> <img src="`+ ueuse["userdata"]["iconurl"] + `">
<p>`+await replaceCustomEmojis(ueuse["userdata"]["username"])+`さんがリユーズ</p> <p>`+ await replaceCustomEmojis(ueuse["userdata"]["username"]) + `さんがリユーズ</p>
</a> </a>
</div>`; </div>`;
inyo = ``; inyo = ``;
@@ -526,11 +546,11 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) {
abi = ueuse["reuse"]["abi"]["abi_text"]; abi = ueuse["reuse"]["abi"]["abi_text"];
abi_date = ueuse["reuse"]["abi"]["abi_date"]; abi_date = ueuse["reuse"]["abi"]["abi_date"];
}else{ } else {
reuse = `<div class="ru"> reuse = `<div class="ru">
<a href="/@`+ueuse["userdata"]["userid"]+`"> <a href="/@`+ ueuse["userdata"]["userid"] + `">
<img src="`+ueuse["userdata"]["iconurl"]+`"> <img src="`+ ueuse["userdata"]["iconurl"] + `">
<p>`+await replaceCustomEmojis(ueuse["userdata"]["username"])+`さんがリユーズ</p> <p>`+ await replaceCustomEmojis(ueuse["userdata"]["username"]) + `さんがリユーズ</p>
</a> </a>
</div>`; </div>`;
inyo = ``; inyo = ``;
@@ -559,14 +579,17 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) {
abi_date = ueuse["abi"]["abi_date"]; abi_date = ueuse["abi"]["abi_date"];
} }
} }
}else if(ueuse["type"] == "Reply"){ } else if (ueuse["type"] == "Reply") {
if(selectedUniqid != null && selectedUniqid == ueuse["uniqid"]){ check = getCheckIcon(ueuse["userdata"]);
bot = getBotIcon(ueuse["userdata"]);
if (selectedUniqid != null && selectedUniqid == ueuse["uniqid"]) {
reuse = `<div class="rp"><div class="here"></div><div class="totop"></div><p>一番上のユーズに返信</p></div>`; reuse = `<div class="rp"><div class="here"></div><div class="totop"></div><p>一番上のユーズに返信</p></div>`;
}else{ } else {
reuse = `<div class="rp"><div class="totop"></div><p>一番上のユーズに返信</p></div>`; reuse = `<div class="rp"><div class="totop"></div><p>一番上のユーズに返信</p></div>`;
} }
inyo = ``; inyo = ``;
contentHtml = formatMarkdown(a_link(ueuse["ueuse"])); contentHtml = formatMarkdown(a_link(ueuse["ueuse"]));
@@ -591,37 +614,40 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) {
abi = ueuse["abi"]["abi_text"]; abi = ueuse["abi"]["abi_text"];
abi_date = ueuse["abi"]["abi_date"]; abi_date = ueuse["abi"]["abi_date"];
}else if(ueuse["type"] == "User"){ } else if (ueuse["type"] == "User") {
html = ` html = `
<div class="ueuse"> <div class="ueuse">
<div class="headbox"> <div class="headbox">
<a href="/@`+ueuse["userdata"]["userid"]+`"> <a href="/@`+ ueuse["userdata"]["userid"] + `">
<img src="`+ueuse["userdata"]["headurl"]+`"> <img src="`+ ueuse["userdata"]["headurl"] + `">
</a> </a>
</div> </div>
<div class="flebox"> <div class="flebox">
<div class="user"> <div class="user">
<a href="/@`+ueuse["userdata"]["userid"]+`"> <a href="/@`+ ueuse["userdata"]["userid"] + `">
<img src="`+ueuse["userdata"]["iconurl"]+`"> <img src="`+ ueuse["userdata"]["iconurl"] + `">
</a> </a>
<div class="u_name"> <div class="u_name">
<a href="/@`+ueuse["userdata"]["userid"]+`">`+ueuse["userdata"]["username"]+`</a> <a href="/@`+ ueuse["userdata"]["userid"] + `">` + ueuse["userdata"]["username"] + `</a>
</div> </div>
<div class="idbox"> <div class="idbox">
<a href="/@`+ueuse["userdata"]["userid"]+`">@`+ueuse["userdata"]["userid"]+`</a> <a href="/@`+ ueuse["userdata"]["userid"] + `">@` + ueuse["userdata"]["userid"] + `</a>
</div> </div>
</div> </div>
</div> </div>
<div class="profilebox"> <div class="profilebox">
<p> <p>
`+ueuse["userdata"]["profile"]+` `+ ueuse["userdata"]["profile"] + `
</p> </p>
</div> </div>
</div> </div>
`; `;
return html; return html;
}else{ } else {
check = getCheckIcon(ueuse["userdata"]);
bot = getBotIcon(ueuse["userdata"]);
reuse = ``; reuse = ``;
inyo = ``; inyo = ``;
contentHtml = formatMarkdown(a_link(ueuse["ueuse"])); contentHtml = formatMarkdown(a_link(ueuse["ueuse"]));
@@ -649,23 +675,23 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) {
abi_date = ueuse["abi"]["abi_date"]; abi_date = ueuse["abi"]["abi_date"];
} }
if(abi != "" && typeof abi === "string") { if (abi != "" && typeof abi === "string") {
abi = formatMarkdown(a_link(abi)); abi = formatMarkdown(a_link(abi));
abi = await replaceMentions(abi); abi = await replaceMentions(abi);
abi = await replaceCustomEmojis(abi); abi = await replaceCustomEmojis(abi);
abi_html = `<div class="abi"> abi_html = `<div class="abi">
<div class="back"> <div class="back">
<h1>`+await replaceCustomEmojis(username)+`さんが追記しました</h1> <h1>`+ await replaceCustomEmojis(username) + `さんが追記しました</h1>
</div><p>`+abi+`</p> </div><p>`+ abi + `</p>
<div class="h3s">`+formatSmartDate(abi_date)+`</div> <div class="h3s">`+ formatSmartDate(abi_date) + `</div>
</div>`; </div>`;
addabi = ``; addabi = ``;
}else{ } else {
abi_html = ``; abi_html = ``;
if(global_userid == userid){ if (global_userid == userid) {
addabi = `<button name="addabi" id="addabi" data-uniqid2="`+uniqid+`" class="addabi"><svg><use xlink:href="../img/sysimage/addabi_1.svg#addabi_1"></use></svg></button>`; addabi = `<button name="addabi" id="addabi" data-uniqid2="` + uniqid + `" class="addabi"><svg><use xlink:href="../img/sysimage/addabi_1.svg#addabi_1"></use></svg></button>`;
}else{ } else {
addabi = ``; addabi = ``;
} }
} }
@@ -684,8 +710,8 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) {
let is_reu = { let is_reu = {
"class": "reuse" "class": "reuse"
}; };
if(ueuse["type"] == "Reuse"){ if (ueuse["type"] == "Reuse") {
if(!(ueuse["ueuse"].length > 0)){ if (!(ueuse["ueuse"].length > 0)) {
if (global_userid == ueuse["userdata"]["userid"]) { if (global_userid == ueuse["userdata"]["userid"]) {
is_reu = { is_reu = {
"class": "reuse reuse_after" "class": "reuse reuse_after"
@@ -705,74 +731,74 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) {
}; };
} }
if(is_nsfw == true){ if (is_nsfw == true) {
nsfw_html = `<div class="nsfw" data-uniqid="`+uniqid+`" id="nsfw"> nsfw_html = `<div class="nsfw" data-uniqid="` + uniqid + `" id="nsfw">
<p>NSFW指定がされている投稿です<br>職場や公共の場での表示には適さない場合があります<br>表示ボタンを押すと表示されます</p> <p>NSFW指定がされている投稿です<br>職場や公共の場での表示には適さない場合があります<br>表示ボタンを押すと表示されます</p>
<div class="btnzone"> <div class="btnzone">
<input type="button" id="nsfw_view" class="mini_irobtn" value="表示"> <input type="button" id="nsfw_view" class="mini_irobtn" value="表示">
</div> </div>
</div>` </div>`
nsfw_start_html = `<div class="nsfw_main" data-uniqid="`+uniqid+`"><div class="block">` nsfw_start_html = `<div class="nsfw_main" data-uniqid="` + uniqid + `"><div class="block">`
nsfw_end_html = `</div></div>` nsfw_end_html = `</div></div>`
} }
if(img1.length > 0){ if (img1.length > 0) {
if(img2.length > 0){ if (img2.length > 0) {
if(img3.length > 0){ if (img3.length > 0) {
if(img4.length > 0){ if (img4.length > 0) {
img_html = `<div class="photo4"> img_html = `<div class="photo4">
<a> <a>
<img src="`+img1+`" alt="画像1" title="画像1" data-id="1" id="ueuse_image" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/image_404.png'"> <img src="`+ img1 + `" alt="画像1" title="画像1" data-id="1" id="ueuse_image" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/image_404.png'">
</a> </a>
<a> <a>
<img src="`+img2+`" alt="画像2" title="画像2" data-id="2" id="ueuse_image" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/image_404.png'"> <img src="`+ img2 + `" alt="画像2" title="画像2" data-id="2" id="ueuse_image" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/image_404.png'">
</a> </a>
<a> <a>
<img src="`+img3+`" alt="画像3" title="画像3" data-id="3" id="ueuse_image" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/image_404.png'"> <img src="`+ img3 + `" alt="画像3" title="画像3" data-id="3" id="ueuse_image" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/image_404.png'">
</a> </a>
<a> <a>
<img src="`+img4+`" alt="画像4" title="画像4" data-id="4" id="ueuse_image" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/image_404.png'"> <img src="`+ img4 + `" alt="画像4" title="画像4" data-id="4" id="ueuse_image" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/image_404.png'">
</a> </a>
</div>`; </div>`;
}else{ } else {
img_html = `<div class="photo3"> img_html = `<div class="photo3">
<a> <a>
<img src="`+img1+`" alt="画像1" title="画像1" data-id="1" id="ueuse_image" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/image_404.png'"> <img src="`+ img1 + `" alt="画像1" title="画像1" data-id="1" id="ueuse_image" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/image_404.png'">
</a> </a>
<a> <a>
<img src="`+img2+`" alt="画像2" title="画像2" data-id="2" id="ueuse_image" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/image_404.png'"> <img src="`+ img2 + `" alt="画像2" title="画像2" data-id="2" id="ueuse_image" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/image_404.png'">
</a> </a>
<div class="photo3_btm"> <div class="photo3_btm">
<a> <a>
<img src="`+img3+`" alt="画像3" title="画像3" data-id="3" id="ueuse_image" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/image_404.png'"> <img src="`+ img3 + `" alt="画像3" title="画像3" data-id="3" id="ueuse_image" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/image_404.png'">
</a> </a>
</div> </div>
</div>`; </div>`;
} }
}else{ } else {
img_html = `<div class="photo2"> img_html = `<div class="photo2">
<a> <a>
<img src="`+img1+`" alt="画像1" title="画像1" data-id="1" id="ueuse_image" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/image_404.png'"> <img src="`+ img1 + `" alt="画像1" title="画像1" data-id="1" id="ueuse_image" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/image_404.png'">
</a> </a>
<a> <a>
<img src="`+img2+`" alt="画像2" title="画像2" data-id="2" id="ueuse_image" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/image_404.png'"> <img src="`+ img2 + `" alt="画像2" title="画像2" data-id="2" id="ueuse_image" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/image_404.png'">
</a> </a>
</div>`; </div>`;
} }
}else{ } else {
img_html = `<div class="photo1"> img_html = `<div class="photo1">
<a> <a>
<img src="`+img1+`" alt="画像1" title="画像1" data-id="1" id="ueuse_image" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/image_404.png'"> <img src="`+ img1 + `" alt="画像1" title="画像1" data-id="1" id="ueuse_image" onerror="this.onerror=null;this.src='../img/sysimage/errorimage/image_404.png'">
</a> </a>
</div>`; </div>`;
} }
}else{ } else {
img_html = ``; img_html = ``;
} }
if(vid1.length > 0){ if (vid1.length > 0) {
vid_html = `<div class="video1"> vid_html = `<div class="video1">
<video controls="" src="`+vid1+`"></video> <video controls="" src="`+ vid1 + `"></video>
</div>`; </div>`;
} }
@@ -780,66 +806,74 @@ async function createUeuseHtml(ueuse, selectedUniqid = null) {
contentHtml = await replaceMentions(contentHtml); contentHtml = await replaceMentions(contentHtml);
contentHtml = await replaceCustomEmojis(contentHtml); contentHtml = await replaceCustomEmojis(contentHtml);
if(ueuse["type"] == "Reuse"){ if (ueuse["type"] == "Reuse") {
if(ueuse["ueuse"].length > 0){ if (ueuse["ueuse"].length > 0) {
if(YouTube_and_nicovideo_Links(ueuse["ueuse"])){ if (YouTube_and_nicovideo_Links(ueuse["ueuse"])) {
contentHtml = contentHtml+YouTube_and_nicovideo_Links(ueuse["ueuse"]); contentHtml = contentHtml + YouTube_and_nicovideo_Links(ueuse["ueuse"]);
} }
}else{ } else {
if(YouTube_and_nicovideo_Links(ueuse["reuse"]["ueuse"])){ if (YouTube_and_nicovideo_Links(ueuse["reuse"]["ueuse"])) {
contentHtml = contentHtml+YouTube_and_nicovideo_Links(ueuse["reuse"]["ueuse"]); contentHtml = contentHtml + YouTube_and_nicovideo_Links(ueuse["reuse"]["ueuse"]);
} }
} }
}else{ } else {
if(YouTube_and_nicovideo_Links(ueuse["ueuse"])){ if (YouTube_and_nicovideo_Links(ueuse["ueuse"])) {
contentHtml = contentHtml+YouTube_and_nicovideo_Links(ueuse["ueuse"]); contentHtml = contentHtml + YouTube_and_nicovideo_Links(ueuse["ueuse"]);
} }
} }
var favbox = `
<hr>
<div class="favbox">
<button class="`+ is_fav["class"] + `" id="favbtn" data-uniqid="` + uniqid + `" data-userid2="` + userid + `"><svg><use xlink:href="` + is_fav["icon"] + `" alt="いいね"></use></svg><span class="like-count">` + favoritecount + `</span></button>
<button name="reusebtn" id="reusebtn" class="`+ is_reu["class"] + `" data-uniqid="` + ueuse["uniqid"] + `" data-userid="` + userid + `"><svg><use xlink:href="../img/sysimage/reuse_1.svg#reuse_1"></use></svg><span class="like-count">` + reusecount + `</span></button>
<a href="/!`+ uniqid + `" class="tuduki"><svg><use xlink:href="../img/sysimage/reply_1.svg#reply_1"></use></svg>` + replycount + `</a>
<button name="bookmark" id="bookmark" class="`+ is_bok["class"] + `" data-uniqid="` + uniqid + `" data-userid="` + userid + `"><svg><use xlink:href="../img/sysimage/bookmark_1.svg#bookmark_1"></use></svg></button>
`+ addabi + `
<button name="popup" id="popup" class="etcbtn" data-uniqid="`+ uniqid + `" data-userid="` + userid + `"><svg><use xlink:href="../img/sysimage/etc_1.svg#etc_1"></use></svg></button>
</div>
`
if (ueuse["is_activitypub"] == true) {
favbox = "";
}
html = ` html = `
<div class="ueuse" id="ueuse-`+ueuse["uniqid"]+`"> <div class="ueuse" id="ueuse-`+ ueuse["uniqid"] + `">
`+reuse+` `+ reuse + `
<div class="flebox"> <div class="flebox">
<a href="/@`+userid+`"><img src="`+iconurl+`"></a> <a href="/@`+ userid + `"><img src="` + iconurl + `"></a>
<a href="/@`+userid+`"><div class="u_name">`+await replaceCustomEmojis(username)+`</div></a> <a href="/@`+ userid + `"><div class="u_name">` + await replaceCustomEmojis(username) + `</div></a>
<div class="idbox"> <div class="idbox">
<a href="/@`+userid+`">@`+userid+`</a> <a href="/@`+ userid + `">@` + userid + `</a>
</div> </div>
`+ check +` `+ bot + `
<div class="time">`+formatSmartDate(datetime)+`</div> `+ check + `
</div> <div class="time">`+ formatSmartDate(datetime) + `</div>
`+nsfw_html+`
`+nsfw_start_html+`
<div class="content">`+contentHtml+`</div>
`+img_html+`
`+vid_html+`
`+inyo+`
`+abi_html+`
`+nsfw_end_html+`
<hr>
<div class="favbox">
<button class="`+is_fav["class"]+`" id="favbtn" data-uniqid="`+uniqid+`" data-userid2="`+userid+`"><svg><use xlink:href="`+is_fav["icon"]+`" alt="いいね"></use></svg><span class="like-count">`+favoritecount+`</span></button>
<button name="reusebtn" id="reusebtn" class="`+is_reu["class"]+`" data-uniqid="`+ueuse["uniqid"]+`" data-userid="`+userid+`"><svg><use xlink:href="../img/sysimage/reuse_1.svg#reuse_1"></use></svg><span class="like-count">`+reusecount+`</span></button>
<a href="/!`+uniqid+`" class="tuduki"><svg><use xlink:href="../img/sysimage/reply_1.svg#reply_1"></use></svg>`+replycount+`</a>
<button name="bookmark" id="bookmark" class="`+is_bok["class"]+`" data-uniqid="`+uniqid+`" data-userid="`+userid+`"><svg><use xlink:href="../img/sysimage/bookmark_1.svg#bookmark_1"></use></svg></button>
`+addabi+`
<button name="popup" id="popup" class="etcbtn" data-uniqid="`+uniqid+`" data-userid="`+userid+`"><svg><use xlink:href="../img/sysimage/etc_1.svg#etc_1"></use></svg></button>
</div> </div>
`+ nsfw_html + `
`+ nsfw_start_html + `
<div class="content">`+ contentHtml + `</div>
`+ img_html + `
`+ vid_html + `
`+ inyo + `
`+ abi_html + `
`+ nsfw_end_html + `
`+ favbox + `
</div> </div>
`; `;
return html; return html;
} }
function createAdsHtml(ads) { function createAdsHtml(ads) {
if(!(ads == null || ads == "")){ if (!(ads == null || ads == "")) {
var ads_html = `<div class="ads"> var ads_html = `<div class="ads">
<a href="`+ads["url"]+`" target="_blank"> <a href="`+ ads["url"] + `" target="_blank">
<img src="`+ads["imgurl"]+`" title="`+ads["memo"]+`"> <img src="`+ ads["imgurl"] + `" title="` + ads["memo"] + `">
</a> </a>
</div>`; </div>`;
return ads_html; return ads_html;
}else{ } else {
var ads_html = ``; var ads_html = ``;
return ads_html; return ads_html;
} }
@@ -847,15 +881,16 @@ function createAdsHtml(ads) {
// 投稿一覧を非同期で全部HTML化 → そのあと順番通りにappend // 投稿一覧を非同期で全部HTML化 → そのあと順番通りにappend
async function renderUeuses(ueuseData, selectedUniqid = null) { async function renderUeuses(ueuseData, selectedUniqid = null) {
if(ueuseData["success"] == false){ if (ueuseData["success"] == false) {
var errmsg; var errmsg;
if(ueuseData["error"] == "no_ueuse"){ if (ueuseData["error"] == "no_ueuse") {
errmsg = "ユーズがありません"; errmsg = "ユーズがありません";
}else if(ueuseData["error"] == "bad_request"){ } else if (ueuseData["error"] == "bad_request") {
errmsg = "不正なリクエストが検出されました"; errmsg = "不正なリクエストが検出されました";
} }
$("#postContainer").append(`<div class="tokonone" id="noueuse"><p>`+errmsg+`</p></div>`); $("#postContainer").append(`<div class="tokonone" id="noueuse"><p>` + errmsg + `</p></div>`);
}else{ return true;
} else {
var htmlList = []; var htmlList = [];
var ueuseList = ueuseData["ueuses"]; var ueuseList = ueuseData["ueuses"];
for (const ueuse of ueuseList) { for (const ueuse of ueuseList) {
@@ -871,5 +906,75 @@ async function renderUeuses(ueuseData, selectedUniqid = null) {
for (const html of htmlList) { for (const html of htmlList) {
$("#postContainer").append(html); $("#postContainer").append(html);
} }
return true;
}
}
async function createNotificationHtml(notification) {
let html = "";
let is_readclass = "";
let datetime = notification["datetime"];
let userid = notification["userdata"]["userid"];
let username = notification["userdata"]["username"];
let iconurl = notification["userdata"]["iconurl"];
let title = notification["title"];
let content = formatMarkdown(a_link(notification["message"]));
content = await replaceMentions(content);
content = await replaceCustomEmojis(content);
let url = notification["url"];
if(notification["is_read"] == false) {
is_readclass = "this";
}
html = `
<div class="notification `+is_readclass+`">
<div class="flebox">
<div class="time">`+formatSmartDate(datetime)+`</div>
</div>
<div class="flebox">
<div class="icon">
<a href="/@`+userid+`">
<img src="`+iconurl+`">
</a>
</div>
<div class="username">
<a href="/@`+userid+`">`+await replaceCustomEmojis(username)+`</a>
</div>
</div>
<h3>`+await replaceCustomEmojis(title)+`</h3>
<p>`+content+`</p>
<a href="`+url+`">詳細をみる</a>
</div>
`;
return html;
}
async function renderNotifications(notificationData) {
if (notificationData["success"] == false) {
var errmsg;
if (notificationData["error"] == "no_notification") {
errmsg = "通知がありません";
} else if (notificationData["error"] == "bad_request") {
errmsg = "不正なリクエストが検出されました";
}
$("#postContainer").append(`<div class="tokonone" id="noueuse"><p>` + errmsg + `</p></div>`);
return true;
} else {
var htmlList = [];
var notificationList = notificationData["notifications"];
for (const notification of notificationList) {
const html = await createNotificationHtml(notification);
htmlList.push(html);
}
// 投稿順を保ったままDOMへ追加
for (const html of htmlList) {
$("#postContainer").append(html);
}
return true;
} }
} }
Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 15 KiB

+3 -103
View File
@@ -140,109 +140,9 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe
$ueuseItems = array(); $ueuseItems = array();
if(!empty($messages)){ if(!empty($messages)){
foreach ($messages as $value) { foreach ($messages as $value) {
if (!(in_array(safetext($value['account']), explode(",", $myblocklist)))){ $formatted = FormatUeuseItem($value, $myblocklist, $mybookmark, $pdo, $userId);
if(!($value["role"] === "ice")){ if ($formatted !== null) {
if(filter_var($value['iconname'], FILTER_VALIDATE_URL)){ $ueuseItems[] = $formatted;
$value['iconname'] = $value['iconname'];
}else{
$value['iconname'] = "../" . $value['iconname'];
}
// ""や"none"をnullに変換
$value = to_null($value);
$value = to_array_safetext($value);
$value["role"] = explode(',', $value["role"]);
if(!empty($value['rpuniqid'])){
$value["type"] = "Reply";
//リユーズどうするから始める
}elseif(!empty($value['ruuniqid'])){
$value["type"] = "Reuse";
$reused = getUeuseData($pdo, $value['ruuniqid']); // 例:ruuniqidから元投稿を取得する関数
if ($reused) {
$reusedUserData = getUserData($pdo, $reused['account']); // 例:元投稿のユーザー情報を取得する関数
$reusedUserData["role"] = explode(',', $reusedUserData["role"]);
// ""や"none"をnullに変換
$reused = to_null($reused);
$reused = to_array_safetext($reused);
// Reusedataを作成
$value["reuse"] = array(
"type" => "Reuse",
"uniqid" => $reused["uniqid"],
"datetime" => $reused["datetime"],
"userid" => $reused["account"],
"userdata" => array(
"userid" => $reusedUserData["userid"],
"username" => $reusedUserData["username"],
"iconurl" => filter_var($reusedUserData['iconname'], FILTER_VALIDATE_URL)
? $reusedUserData['iconname']
: "../" . $reusedUserData['iconname'],
"role" => $reusedUserData["role"],
),
"ueuse" => $reused["ueuse"],
"photo1" => $reused["photo1"],
"photo2" => $reused["photo2"],
"photo3" => $reused["photo3"],
"photo4" => $reused["photo4"],
"video1" => $reused["video1"],
"rpuniqid" => $reused["rpuniqid"],
"ruuniqid" => $reused["ruuniqid"],
"nsfw" => filter_var($reused["nsfw"], FILTER_VALIDATE_BOOLEAN),
"favoritecount" => $reused["favorite_conut"],
"replycount" => $reused["reply_count"],
"reusecount" => $reused["reuse_count"],
"is_favorite" => in_array($userId, explode(',', $reused['favorite'])),
"is_bookmark" => in_array($reused["uniqid"], explode(',', $mybookmark)),
"abi" => array(
"abi_text" => $reused["abi"],
"abi_date" => $reused["abidate"],
),
);
}else{
$value["reuse"] = null;
}
}else{
$value["type"] = "Ueuse";
}
$ueuse = array(
"type" => $value["type"],
"uniqid" => $value["uniqid"],
"datetime" => $value["datetime"],
"userid" => $value["account"],
"userdata" => array(
"userid" => $value["account"],
"username" => $value["username"],
"iconurl" => $value['iconname'],
"role" => $value["role"],
),
"ueuse" => $value["ueuse"],
"photo1" => $value["photo1"],
"photo2" => $value["photo2"],
"photo3" => $value["photo3"],
"photo4" => $value["photo4"],
"video1" => $value["video1"],
"rpuniqid" => $value["rpuniqid"],
"ruuniqid" => $value["ruuniqid"],
"nsfw" => filter_var($value["nsfw"], FILTER_VALIDATE_BOOLEAN),
"favoritecount" => $value["favorite_conut"],
"replycount" => $value["reply_count"],
"reusecount" => $value["reuse_count"],
"is_favorite" => in_array($userId, explode(',', $value['favorite'])),
"is_bookmark" => in_array($value["uniqid"], explode(',', $mybookmark)),
"abi" => array(
"abi_text" => $value["abi"],
"abi_date" => $value["abidate"],
),
);
if ($value["type"] === "Reuse") {
$ueuse["reuse"] = $value["reuse"];
}
$ueuseItems[] = $ueuse;
}
} }
} }
+3 -103
View File
@@ -137,109 +137,9 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe
$ueuseItems = array(); $ueuseItems = array();
if(!empty($messages)){ if(!empty($messages)){
foreach ($messages as $value) { foreach ($messages as $value) {
if (!(in_array(safetext($value['account']), explode(",", $myblocklist)))){ $formatted = FormatUeuseItem($value, $myblocklist, $mybookmark, $pdo, $userId);
if(!($value["role"] === "ice")){ if ($formatted !== null) {
if(filter_var($value['iconname'], FILTER_VALIDATE_URL)){ $ueuseItems[] = $formatted;
$value['iconname'] = $value['iconname'];
}else{
$value['iconname'] = "../" . $value['iconname'];
}
// ""や"none"をnullに変換
$value = to_null($value);
$value = to_array_safetext($value);
$value["role"] = explode(',', $value["role"]);
if(!empty($value['rpuniqid'])){
$value["type"] = "Reply";
//リユーズどうするから始める
}elseif(!empty($value['ruuniqid'])){
$value["type"] = "Reuse";
$reused = getUeuseData($pdo, $value['ruuniqid']); // 例:ruuniqidから元投稿を取得する関数
if ($reused) {
$reusedUserData = getUserData($pdo, $reused['account']); // 例:元投稿のユーザー情報を取得する関数
$reusedUserData["role"] = explode(',', $reusedUserData["role"]);
// ""や"none"をnullに変換
$reused = to_null($reused);
$reused = to_array_safetext($reused);
// Reusedataを作成
$value["reuse"] = array(
"type" => "Reuse",
"uniqid" => $reused["uniqid"],
"datetime" => $reused["datetime"],
"userid" => $reused["account"],
"userdata" => array(
"userid" => $reusedUserData["userid"],
"username" => $reusedUserData["username"],
"iconurl" => filter_var($reusedUserData['iconname'], FILTER_VALIDATE_URL)
? $reusedUserData['iconname']
: "../" . $reusedUserData['iconname'],
"role" => $reusedUserData["role"],
),
"ueuse" => $reused["ueuse"],
"photo1" => $reused["photo1"],
"photo2" => $reused["photo2"],
"photo3" => $reused["photo3"],
"photo4" => $reused["photo4"],
"video1" => $reused["video1"],
"rpuniqid" => $reused["rpuniqid"],
"ruuniqid" => $reused["ruuniqid"],
"nsfw" => filter_var($reused["nsfw"], FILTER_VALIDATE_BOOLEAN),
"favoritecount" => $reused["favorite_conut"],
"replycount" => $reused["reply_count"],
"reusecount" => $reused["reuse_count"],
"is_favorite" => in_array($userId, explode(',', $reused['favorite'])),
"is_bookmark" => in_array($reused["uniqid"], explode(',', $mybookmark)),
"abi" => array(
"abi_text" => $reused["abi"],
"abi_date" => $reused["abidate"],
),
);
}else{
$value["reuse"] = null;
}
}else{
$value["type"] = "Ueuse";
}
$ueuse = array(
"type" => $value["type"],
"uniqid" => $value["uniqid"],
"datetime" => $value["datetime"],
"userid" => $value["account"],
"userdata" => array(
"userid" => $value["account"],
"username" => $value["username"],
"iconurl" => $value['iconname'],
"role" => $value["role"],
),
"ueuse" => $value["ueuse"],
"photo1" => $value["photo1"],
"photo2" => $value["photo2"],
"photo3" => $value["photo3"],
"photo4" => $value["photo4"],
"video1" => $value["video1"],
"rpuniqid" => $value["rpuniqid"],
"ruuniqid" => $value["ruuniqid"],
"nsfw" => filter_var($value["nsfw"], FILTER_VALIDATE_BOOLEAN),
"favoritecount" => $value["favorite_conut"],
"replycount" => $value["reply_count"],
"reusecount" => $value["reuse_count"],
"is_favorite" => in_array($userId, explode(',', $value['favorite'])),
"is_bookmark" => in_array($value["uniqid"], explode(',', $mybookmark)),
"abi" => array(
"abi_text" => $value["abi"],
"abi_date" => $value["abidate"],
),
);
if ($value["type"] === "Reuse") {
$ueuse["reuse"] = $value["reuse"];
}
$ueuseItems[] = $ueuse;
}
} }
} }
+3 -103
View File
@@ -255,109 +255,9 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe
$ueuseItems = array(); $ueuseItems = array();
if(!empty($messages)){ if(!empty($messages)){
foreach ($messages as $value) { foreach ($messages as $value) {
if (!(in_array(safetext($value['account']), explode(",", $myblocklist)))){ $formatted = FormatUeuseItem($value, $myblocklist, $mybookmark, $pdo, $userId);
if(!($value["role"] === "ice")){ if ($formatted !== null) {
if(filter_var($value['iconname'], FILTER_VALIDATE_URL)){ $ueuseItems[] = $formatted;
$value['iconname'] = $value['iconname'];
}else{
$value['iconname'] = "../" . $value['iconname'];
}
// ""や"none"をnullに変換
$value = to_null($value);
$value = to_array_safetext($value);
$value["role"] = explode(',', $value["role"]);
if(!empty($value['rpuniqid'])){
$value["type"] = "Reply";
//リユーズどうするから始める
}elseif(!empty($value['ruuniqid'])){
$value["type"] = "Reuse";
$reused = getUeuseData($pdo, $value['ruuniqid']); // 例:ruuniqidから元投稿を取得する関数
if ($reused) {
$reusedUserData = getUserData($pdo, $reused['account']); // 例:元投稿のユーザー情報を取得する関数
$reusedUserData["role"] = explode(',', $reusedUserData["role"]);
// ""や"none"をnullに変換
$reused = to_null($reused);
$reused = to_array_safetext($reused);
// Reusedataを作成
$value["reuse"] = array(
"type" => "Reuse",
"uniqid" => $reused["uniqid"],
"datetime" => $reused["datetime"],
"userid" => $reused["account"],
"userdata" => array(
"userid" => $reusedUserData["userid"],
"username" => $reusedUserData["username"],
"iconurl" => filter_var($reusedUserData['iconname'], FILTER_VALIDATE_URL)
? $reusedUserData['iconname']
: "../" . $reusedUserData['iconname'],
"role" => $reusedUserData["role"],
),
"ueuse" => $reused["ueuse"],
"photo1" => $reused["photo1"],
"photo2" => $reused["photo2"],
"photo3" => $reused["photo3"],
"photo4" => $reused["photo4"],
"video1" => $reused["video1"],
"rpuniqid" => $reused["rpuniqid"],
"ruuniqid" => $reused["ruuniqid"],
"nsfw" => filter_var($reused["nsfw"], FILTER_VALIDATE_BOOLEAN),
"favoritecount" => $reused["favorite_conut"],
"replycount" => $reused["reply_count"],
"reusecount" => $reused["reuse_count"],
"is_favorite" => in_array($userId, explode(',', $reused['favorite'])),
"is_bookmark" => in_array($reused["uniqid"], explode(',', $mybookmark)),
"abi" => array(
"abi_text" => $reused["abi"],
"abi_date" => $reused["abidate"],
),
);
}else{
$value["reuse"] = null;
}
}else{
$value["type"] = "Ueuse";
}
$ueuse = array(
"type" => $value["type"],
"uniqid" => $value["uniqid"],
"datetime" => $value["datetime"],
"userid" => $value["account"],
"userdata" => array(
"userid" => $value["account"],
"username" => $value["username"],
"iconurl" => $value['iconname'],
"role" => $value["role"],
),
"ueuse" => $value["ueuse"],
"photo1" => $value["photo1"],
"photo2" => $value["photo2"],
"photo3" => $value["photo3"],
"photo4" => $value["photo4"],
"video1" => $value["video1"],
"rpuniqid" => $value["rpuniqid"],
"ruuniqid" => $value["ruuniqid"],
"nsfw" => filter_var($value["nsfw"], FILTER_VALIDATE_BOOLEAN),
"favoritecount" => $value["favorite_conut"],
"replycount" => $value["reply_count"],
"reusecount" => $value["reuse_count"],
"is_favorite" => in_array($userId, explode(',', $value['favorite'])),
"is_bookmark" => in_array($value["uniqid"], explode(',', $mybookmark)),
"abi" => array(
"abi_text" => $value["abi"],
"abi_date" => $value["abidate"],
),
);
if ($value["type"] === "Reuse") {
$ueuse["reuse"] = $value["reuse"];
}
$ueuseItems[] = $ueuse;
}
} }
} }
+3 -103
View File
@@ -119,109 +119,9 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe
$ueuseItems = array(); $ueuseItems = array();
if(!empty($messages)){ if(!empty($messages)){
foreach ($messages as $value) { foreach ($messages as $value) {
if (!(in_array(safetext($value['account']), explode(",", $myblocklist)))){ $formatted = FormatUeuseItem($value, $myblocklist, $mybookmark, $pdo, $userId);
if(!($value["role"] === "ice")){ if ($formatted !== null) {
if(filter_var($value['iconname'], FILTER_VALIDATE_URL)){ $ueuseItems[] = $formatted;
$value['iconname'] = $value['iconname'];
}else{
$value['iconname'] = "../" . $value['iconname'];
}
// ""や"none"をnullに変換
$value = to_null($value);
$value = to_array_safetext($value);
$value["role"] = explode(',', $value["role"]);
if(!empty($value['rpuniqid'])){
$value["type"] = "Reply";
//リユーズどうするから始める
}elseif(!empty($value['ruuniqid'])){
$value["type"] = "Reuse";
$reused = getUeuseData($pdo, $value['ruuniqid']); // 例:ruuniqidから元投稿を取得する関数
if ($reused) {
$reusedUserData = getUserData($pdo, $reused['account']); // 例:元投稿のユーザー情報を取得する関数
$reusedUserData["role"] = explode(',', $reusedUserData["role"]);
// ""や"none"をnullに変換
$reused = to_null($reused);
$reused = to_array_safetext($reused);
// Reusedataを作成
$value["reuse"] = array(
"type" => "Reuse",
"uniqid" => $reused["uniqid"],
"datetime" => $reused["datetime"],
"userid" => $reused["account"],
"userdata" => array(
"userid" => $reusedUserData["userid"],
"username" => $reusedUserData["username"],
"iconurl" => filter_var($reusedUserData['iconname'], FILTER_VALIDATE_URL)
? $reusedUserData['iconname']
: "../" . $reusedUserData['iconname'],
"role" => $reusedUserData["role"],
),
"ueuse" => $reused["ueuse"],
"photo1" => $reused["photo1"],
"photo2" => $reused["photo2"],
"photo3" => $reused["photo3"],
"photo4" => $reused["photo4"],
"video1" => $reused["video1"],
"rpuniqid" => $reused["rpuniqid"],
"ruuniqid" => $reused["ruuniqid"],
"nsfw" => filter_var($reused["nsfw"], FILTER_VALIDATE_BOOLEAN),
"favoritecount" => $reused["favorite_conut"],
"replycount" => $reused["reply_count"],
"reusecount" => $reused["reuse_count"],
"is_favorite" => in_array($userId, explode(',', $reused['favorite'])),
"is_bookmark" => in_array($reused["uniqid"], explode(',', $mybookmark)),
"abi" => array(
"abi_text" => $reused["abi"],
"abi_date" => $reused["abidate"],
),
);
}else{
$value["reuse"] = null;
}
}else{
$value["type"] = "Ueuse";
}
$ueuse = array(
"type" => $value["type"],
"uniqid" => $value["uniqid"],
"datetime" => $value["datetime"],
"userid" => $value["account"],
"userdata" => array(
"userid" => $value["account"],
"username" => $value["username"],
"iconurl" => $value['iconname'],
"role" => $value["role"],
),
"ueuse" => $value["ueuse"],
"photo1" => $value["photo1"],
"photo2" => $value["photo2"],
"photo3" => $value["photo3"],
"photo4" => $value["photo4"],
"video1" => $value["video1"],
"rpuniqid" => $value["rpuniqid"],
"ruuniqid" => $value["ruuniqid"],
"nsfw" => filter_var($value["nsfw"], FILTER_VALIDATE_BOOLEAN),
"favoritecount" => $value["favorite_conut"],
"replycount" => $value["reply_count"],
"reusecount" => $value["reuse_count"],
"is_favorite" => in_array($userId, explode(',', $value['favorite'])),
"is_bookmark" => in_array($value["uniqid"], explode(',', $mybookmark)),
"abi" => array(
"abi_text" => $value["abi"],
"abi_date" => $value["abidate"],
),
);
if ($value["type"] === "Reuse") {
$ueuse["reuse"] = $value["reuse"];
}
$ueuseItems[] = $ueuse;
}
} }
} }
+119 -87
View File
@@ -20,93 +20,125 @@ try {
// 接続エラーのときエラー内容を取得する // 接続エラーのときエラー内容を取得する
$error_message[] = $e->getMessage(); $error_message[] = $e->getMessage();
} }
if (isset($_GET['userid']) && isset($_GET['account_id'])) { if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safetext(isset($_POST['account_id'])) && safetext(isset($_COOKIE['loginkey']))) {
$userid = safetext($_GET['userid']); $userid = safetext($_POST['userid']);
$loginid = safetext($_GET['account_id']); $loginid = safetext($_POST['account_id']);
$loginkey = safetext($_COOKIE['loginkey']);
$query = $pdo->prepare('SELECT * FROM account WHERE userid = :userid limit 1'); $is_login = uwuzuUserLoginCheck($loginid, $loginkey, "user");
if ($is_login === false) {
$query->execute(array(':userid' => $userid)); echo json_encode(['success' => false, 'error' => 'bad_request']);
exit;
$result2 = $query->fetch();
if(!(empty($result2["loginid"]))){
if($result2["loginid"] === $loginid){
$aduserinfoQuery = $pdo->prepare("SELECT username,userid,loginid,admin,role,sacinfo,blocklist,bookmark FROM account WHERE userid = :userid");
$aduserinfoQuery->bindValue(':userid', safetext($userid));
$aduserinfoQuery->execute();
$res = $aduserinfoQuery->fetch();
$myblocklist = safetext($res["blocklist"]);
$userid = safetext($_GET['userid']);
$itemsPerPage = 15; // 1ページあたりの投稿数
$pageNumber = safetext(isset($_GET['page'])) ? safetext(intval($_GET['page'])) : 1;
if($pageNumber <= 0 || (!(is_numeric($pageNumber)))){
$pageNumber = 1;
}
$offset = ($pageNumber - 1) * $itemsPerPage;
$messages = array();
if (!empty($pdo)) {
$messageQuery = $pdo->prepare("SELECT fromuserid,title,msg,url,datetime,userchk FROM notification WHERE touserid = :userid ORDER BY datetime DESC LIMIT :offset, :itemsPerPage");
$messageQuery->bindValue(':userid', $userid, PDO::PARAM_STR);
$messageQuery->bindValue(':offset', $offset, PDO::PARAM_INT);
$messageQuery->bindValue(':itemsPerPage', $itemsPerPage, PDO::PARAM_INT);
$messageQuery->execute();
$message_array = $messageQuery->fetchAll();
// トランザクション開始
$pdo->beginTransaction();
// SQL作成
$stmt = $pdo->prepare("UPDATE notification SET userchk = 'done' WHERE touserid = :userid;");
$stmt->bindValue(':userid', $userid, PDO::PARAM_STR);
$res = $stmt->execute();
$res = $pdo->commit();
if (!empty($message_array)) {
foreach ($message_array as $value) {
$value["servericon"] = safetext($serversettings["serverinfo"]["server_icon"]);
if(!(empty($value['fromuserid']))){
if(!($value['fromuserid'] == "uwuzu-fromsys")){
$userQuery = $pdo->prepare("SELECT username,iconname FROM account WHERE userid = :userid");
$userQuery->bindValue(':userid', $value['fromuserid']);
$userQuery->execute();
$user_array = $userQuery->fetch();
if(!(empty($user_array))){
$value['fromusericon'] = filter_var($user_array["iconname"], FILTER_VALIDATE_URL) ? $user_array["iconname"] : "../" . $user_array["iconname"];
$value['fromusername'] = $user_array["username"];
}else{
$value['fromusericon'] = "../img/deficon/icon.png";
$value['fromusername'] = "でふぉると";
}
}
}
$messageDisplay = new MessageDisplay($value); // userid を渡さない
$messageDisplay->display();
}
} else {
echo '<div class="tokonone" id="noueuse"><p>通知はありません</p></div>';
}
$pdo = null;
}else{
echo '<div class="tokonone" id="noueuse"><p>取得に失敗しました。</p></div>';
}
}else{
echo '<div class="tokonone" id="noueuse"><p>取得に失敗しました。</p></div>';
}
}else{
echo '<div class="tokonone" id="noueuse"><p>取得に失敗しました。</p></div>';
} }
}else{
echo '<div class="tokonone" id="noueuse"><p>取得に失敗しました。</p></div>'; $myblocklist = getUserData($pdo, $userid)["blocklist"];
$itemsPerPage = 15; // 1ページあたりの投稿数
$pageNumber = safetext(isset($_POST['page'])) ? safetext(intval($_POST['page'])) : 1;
if ($pageNumber <= 0 || (!(is_numeric($pageNumber)))) {
$pageNumber = 1;
}
$offset = ($pageNumber - 1) * $itemsPerPage;
$messages = array();
if (!empty($pdo)) {
$messageQuery = $pdo->prepare("SELECT fromuserid,title,msg,url,datetime,userchk FROM notification WHERE touserid = :userid ORDER BY datetime DESC LIMIT :offset, :itemsPerPage");
$messageQuery->bindValue(':userid', $userid, PDO::PARAM_STR);
$messageQuery->bindValue(':offset', $offset, PDO::PARAM_INT);
$messageQuery->bindValue(':itemsPerPage', $itemsPerPage, PDO::PARAM_INT);
$messageQuery->execute();
$message_array = $messageQuery->fetchAll();
// トランザクション開始
$pdo->beginTransaction();
// SQL作成
$stmt = $pdo->prepare("UPDATE notification SET userchk = 'done' WHERE touserid = :userid;");
$stmt->bindValue(':userid', $userid, PDO::PARAM_STR);
$res = $stmt->execute();
$res = $pdo->commit();
if (!empty($message_array)) {
foreach ($message_array as $value) {
$value["servericon"] = safetext($serversettings["serverinfo"]["server_icon"]);
if (!(empty($value['fromuserid']))) {
if (!($value['fromuserid'] == "uwuzu-fromsys")) {
$userQuery = $pdo->prepare("SELECT username,iconname FROM account WHERE userid = :userid");
$userQuery->bindValue(':userid', $value['fromuserid']);
$userQuery->execute();
$user_array = $userQuery->fetch();
if (!(empty($user_array))) {
$value['fromusericon'] = filter_var($user_array["iconname"], FILTER_VALIDATE_URL) ? $user_array["iconname"] : "../" . $user_array["iconname"];
$value['fromusername'] = $user_array["username"];
} else {
$value['fromusericon'] = "../img/deficon/icon.png";
$value['fromusername'] = "でふぉると";
}
}else{
$value['fromusericon'] = safetext($value["servericon"]);
$value['fromusername'] = "uwuzu";
}
}
if($value["userchk"] === "done"){
$value["userchk"] = true;
}else{
$value["userchk"] = false;
}
$formatted = [
"type" => "notification",
"datetime" => $value["datetime"],
"userid" => $value["fromuserid"],
"userdata" => [
"userid" => $value["fromuserid"],
"username" => $value["fromusername"],
"iconurl" => $value['fromusericon'],
],
"message" => $value["msg"],
"url" => $value["url"],
"title" => $value["title"],
"is_read" => $value["userchk"],
];
if ($formatted !== null) {
$notificationItems[] = $formatted;
}
}
$item = array(
"success" => true,
"notifications" => $notificationItems
);
echo json_encode($item, JSON_UNESCAPED_UNICODE);
} else {
$item = array(
"success" => false,
"notifications" => null,
"error" => "no_notification",
);
echo json_encode($item, JSON_UNESCAPED_UNICODE);
}
$pdo = null;
} else {
$item = array(
"success" => false,
"notifications" => null,
"error" => "bad_request",
);
echo json_encode($item, JSON_UNESCAPED_UNICODE);
}
} else {
$item = array(
"success" => false,
"notifications" => null,
"error" => "bad_request",
);
echo json_encode($item, JSON_UNESCAPED_UNICODE);
} }
?>
+3 -103
View File
@@ -149,109 +149,9 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe
$ueuseItems = array(); $ueuseItems = array();
if(!empty($messages)){ if(!empty($messages)){
foreach ($messages as $value) { foreach ($messages as $value) {
if (!(in_array(safetext($value['account']), explode(",", $myblocklist)))){ $formatted = FormatUeuseItem($value, $myblocklist, $mybookmark, $pdo, $userId);
if(!($value["role"] === "ice")){ if ($formatted !== null) {
if(filter_var($value['iconname'], FILTER_VALIDATE_URL)){ $ueuseItems[] = $formatted;
$value['iconname'] = $value['iconname'];
}else{
$value['iconname'] = "../" . $value['iconname'];
}
// ""や"none"をnullに変換
$value = to_null($value);
$value = to_array_safetext($value);
$value["role"] = explode(',', $value["role"]);
if(!empty($value['rpuniqid'])){
$value["type"] = "Reply";
//リユーズどうするから始める
}elseif(!empty($value['ruuniqid'])){
$value["type"] = "Reuse";
$reused = getUeuseData($pdo, $value['ruuniqid']); // 例:ruuniqidから元投稿を取得する関数
if ($reused) {
$reusedUserData = getUserData($pdo, $reused['account']); // 例:元投稿のユーザー情報を取得する関数
$reusedUserData["role"] = explode(',', $reusedUserData["role"]);
// ""や"none"をnullに変換
$reused = to_null($reused);
$reused = to_array_safetext($reused);
// Reusedataを作成
$value["reuse"] = array(
"type" => "Reuse",
"uniqid" => $reused["uniqid"],
"datetime" => $reused["datetime"],
"userid" => $reused["account"],
"userdata" => array(
"userid" => $reusedUserData["userid"],
"username" => $reusedUserData["username"],
"iconurl" => filter_var($reusedUserData['iconname'], FILTER_VALIDATE_URL)
? $reusedUserData['iconname']
: "../" . $reusedUserData['iconname'],
"role" => $reusedUserData["role"],
),
"ueuse" => $reused["ueuse"],
"photo1" => $reused["photo1"],
"photo2" => $reused["photo2"],
"photo3" => $reused["photo3"],
"photo4" => $reused["photo4"],
"video1" => $reused["video1"],
"rpuniqid" => $reused["rpuniqid"],
"ruuniqid" => $reused["ruuniqid"],
"nsfw" => filter_var($reused["nsfw"], FILTER_VALIDATE_BOOLEAN),
"favoritecount" => $reused["favorite_conut"],
"replycount" => $reused["reply_count"],
"reusecount" => $reused["reuse_count"],
"is_favorite" => in_array($userId, explode(',', $reused['favorite'])),
"is_bookmark" => in_array($reused["uniqid"], explode(',', $mybookmark)),
"abi" => array(
"abi_text" => $reused["abi"],
"abi_date" => $reused["abidate"],
),
);
}else{
$value["reuse"] = null;
}
}else{
$value["type"] = "Ueuse";
}
$ueuse = array(
"type" => $value["type"],
"uniqid" => $value["uniqid"],
"datetime" => $value["datetime"],
"userid" => $value["account"],
"userdata" => array(
"userid" => $value["account"],
"username" => $value["username"],
"iconurl" => $value['iconname'],
"role" => $value["role"],
),
"ueuse" => $value["ueuse"],
"photo1" => $value["photo1"],
"photo2" => $value["photo2"],
"photo3" => $value["photo3"],
"photo4" => $value["photo4"],
"video1" => $value["video1"],
"rpuniqid" => $value["rpuniqid"],
"ruuniqid" => $value["ruuniqid"],
"nsfw" => filter_var($value["nsfw"], FILTER_VALIDATE_BOOLEAN),
"favoritecount" => $value["favorite_conut"],
"replycount" => $value["reply_count"],
"reusecount" => $value["reuse_count"],
"is_favorite" => in_array($userId, explode(',', $value['favorite'])),
"is_bookmark" => in_array($value["uniqid"], explode(',', $mybookmark)),
"abi" => array(
"abi_text" => $value["abi"],
"abi_date" => $value["abidate"],
),
);
if ($value["type"] === "Reuse") {
$ueuse["reuse"] = $value["reuse"];
}
$ueuseItems[] = $ueuse;
}
} }
} }
+3 -103
View File
@@ -133,109 +133,9 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe
$ueuseItems = array(); $ueuseItems = array();
if(!empty($messages)){ if(!empty($messages)){
foreach ($messages as $value) { foreach ($messages as $value) {
if (!(in_array(safetext($value['account']), explode(",", $myblocklist)))){ $formatted = FormatUeuseItem($value, $myblocklist, $mybookmark, $pdo, $userId);
if(!($value["role"] === "ice")){ if ($formatted !== null) {
if(filter_var($value['iconname'], FILTER_VALIDATE_URL)){ $ueuseItems[] = $formatted;
$value['iconname'] = $value['iconname'];
}else{
$value['iconname'] = "../" . $value['iconname'];
}
// ""や"none"をnullに変換
$value = to_null($value);
$value = to_array_safetext($value);
$value["role"] = explode(',', $value["role"]);
if(!empty($value['rpuniqid'])){
$value["type"] = "Reply";
//リユーズどうするから始める
}elseif(!empty($value['ruuniqid'])){
$value["type"] = "Reuse";
$reused = getUeuseData($pdo, $value['ruuniqid']); // 例:ruuniqidから元投稿を取得する関数
if ($reused) {
$reusedUserData = getUserData($pdo, $reused['account']); // 例:元投稿のユーザー情報を取得する関数
$reusedUserData["role"] = explode(',', $reusedUserData["role"]);
// ""や"none"をnullに変換
$reused = to_null($reused);
$reused = to_array_safetext($reused);
// Reusedataを作成
$value["reuse"] = array(
"type" => "Reuse",
"uniqid" => $reused["uniqid"],
"datetime" => $reused["datetime"],
"userid" => $reused["account"],
"userdata" => array(
"userid" => $reusedUserData["userid"],
"username" => $reusedUserData["username"],
"iconurl" => filter_var($reusedUserData['iconname'], FILTER_VALIDATE_URL)
? $reusedUserData['iconname']
: "../" . $reusedUserData['iconname'],
"role" => $reusedUserData["role"],
),
"ueuse" => $reused["ueuse"],
"photo1" => $reused["photo1"],
"photo2" => $reused["photo2"],
"photo3" => $reused["photo3"],
"photo4" => $reused["photo4"],
"video1" => $reused["video1"],
"rpuniqid" => $reused["rpuniqid"],
"ruuniqid" => $reused["ruuniqid"],
"nsfw" => filter_var($reused["nsfw"], FILTER_VALIDATE_BOOLEAN),
"favoritecount" => $reused["favorite_conut"],
"replycount" => $reused["reply_count"],
"reusecount" => $reused["reuse_count"],
"is_favorite" => in_array($userId, explode(',', $reused['favorite'])),
"is_bookmark" => in_array($reused["uniqid"], explode(',', $mybookmark)),
"abi" => array(
"abi_text" => $reused["abi"],
"abi_date" => $reused["abidate"],
),
);
}else{
$value["reuse"] = null;
}
}else{
$value["type"] = "Ueuse";
}
$ueuse = array(
"type" => $value["type"],
"uniqid" => $value["uniqid"],
"datetime" => $value["datetime"],
"userid" => $value["account"],
"userdata" => array(
"userid" => $value["account"],
"username" => $value["username"],
"iconurl" => $value['iconname'],
"role" => $value["role"],
),
"ueuse" => $value["ueuse"],
"photo1" => $value["photo1"],
"photo2" => $value["photo2"],
"photo3" => $value["photo3"],
"photo4" => $value["photo4"],
"video1" => $value["video1"],
"rpuniqid" => $value["rpuniqid"],
"ruuniqid" => $value["ruuniqid"],
"nsfw" => filter_var($value["nsfw"], FILTER_VALIDATE_BOOLEAN),
"favoritecount" => $value["favorite_conut"],
"replycount" => $value["reply_count"],
"reusecount" => $value["reuse_count"],
"is_favorite" => in_array($userId, explode(',', $value['favorite'])),
"is_bookmark" => in_array($value["uniqid"], explode(',', $mybookmark)),
"abi" => array(
"abi_text" => $value["abi"],
"abi_date" => $value["abidate"],
),
);
if ($value["type"] === "Reuse") {
$ueuse["reuse"] = $value["reuse"];
}
$ueuseItems[] = $ueuse;
}
} }
} }
+36 -103
View File
@@ -3,6 +3,9 @@ header('Content-Type: application/json');
require('../db.php'); require('../db.php');
require('../function/function.php'); require('../function/function.php');
blockedIP($_SERVER['REMOTE_ADDR']); blockedIP($_SERVER['REMOTE_ADDR']);
$domain = $_SERVER['HTTP_HOST'];
$serversettings_file = "../server/serversettings.ini";
$serversettings = parse_ini_file($serversettings_file, true);
if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safetext(isset($_POST['account_id'])) && safetext(isset($_COOKIE['loginkey'])) && safetext(isset($_POST['id']))) { if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safetext(isset($_POST['account_id'])) && safetext(isset($_COOKIE['loginkey'])) && safetext(isset($_POST['id']))) {
$page = safetext($_POST['page']); $page = safetext($_POST['page']);
@@ -11,6 +14,36 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe
$loginid = safetext($_POST['account_id']); $loginid = safetext($_POST['account_id']);
$loginkey = safetext($_COOKIE['loginkey']); $loginkey = safetext($_COOKIE['loginkey']);
if (safetext($serversettings["serverinfo"]["server_activitypub"]) === "true") {
if (isset($_POST['activity_domain'])) {
$activity_domain = safetext($_POST['activity_domain']) ? safetext($_POST['activity_domain']) : '';
if (!($activity_domain == $domain)) {
$domain_response = GetActivityPubUser($uwuzuid, $activity_domain);
if (empty($domain_response) || array_key_exists("error", $domain_response)) {
$userData = null;
} else {
$userData = $domain_response;
}
//var_dump($domain_response);
$is_local = false;
$item = array(
"success" => false,
"ueuses" => null,
"ads" => null,
"error" => "no_ueuse",
);
echo json_encode($item, JSON_UNESCAPED_UNICODE);
exit;
} else {
$is_local = true;
}
}
} else {
$activity_domain = $domain;
$is_local = true;
}
$is_login = uwuzuUserLoginCheck($loginid, $loginkey, "user"); $is_login = uwuzuUserLoginCheck($loginid, $loginkey, "user");
if ($is_login === false) { if ($is_login === false) {
echo json_encode(['success' => false, 'error' => 'bad_request']); echo json_encode(['success' => false, 'error' => 'bad_request']);
@@ -130,109 +163,9 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe
$ueuseItems = array(); $ueuseItems = array();
if(!empty($messages)){ if(!empty($messages)){
foreach ($messages as $value) { foreach ($messages as $value) {
if (!(in_array(safetext($value['account']), explode(",", $myblocklist)))){ $formatted = FormatUeuseItem($value, $myblocklist, $mybookmark, $pdo, $userId);
if(!($value["role"] === "ice")){ if ($formatted !== null) {
if(filter_var($value['iconname'], FILTER_VALIDATE_URL)){ $ueuseItems[] = $formatted;
$value['iconname'] = $value['iconname'];
}else{
$value['iconname'] = "../" . $value['iconname'];
}
// ""や"none"をnullに変換
$value = to_null($value);
$value = to_array_safetext($value);
$value["role"] = explode(',', $value["role"]);
if(!empty($value['rpuniqid'])){
$value["type"] = "Reply";
//リユーズどうするから始める
}elseif(!empty($value['ruuniqid'])){
$value["type"] = "Reuse";
$reused = getUeuseData($pdo, $value['ruuniqid']); // 例:ruuniqidから元投稿を取得する関数
if ($reused) {
$reusedUserData = getUserData($pdo, $reused['account']); // 例:元投稿のユーザー情報を取得する関数
$reusedUserData["role"] = explode(',', $reusedUserData["role"]);
// ""や"none"をnullに変換
$reused = to_null($reused);
$reused = to_array_safetext($reused);
// Reusedataを作成
$value["reuse"] = array(
"type" => "Reuse",
"uniqid" => $reused["uniqid"],
"datetime" => $reused["datetime"],
"userid" => $reused["account"],
"userdata" => array(
"userid" => $reusedUserData["userid"],
"username" => $reusedUserData["username"],
"iconurl" => filter_var($reusedUserData['iconname'], FILTER_VALIDATE_URL)
? $reusedUserData['iconname']
: "../" . $reusedUserData['iconname'],
"role" => $reusedUserData["role"],
),
"ueuse" => $reused["ueuse"],
"photo1" => $reused["photo1"],
"photo2" => $reused["photo2"],
"photo3" => $reused["photo3"],
"photo4" => $reused["photo4"],
"video1" => $reused["video1"],
"rpuniqid" => $reused["rpuniqid"],
"ruuniqid" => $reused["ruuniqid"],
"nsfw" => filter_var($reused["nsfw"], FILTER_VALIDATE_BOOLEAN),
"favoritecount" => $reused["favorite_conut"],
"replycount" => $reused["reply_count"],
"reusecount" => $reused["reuse_count"],
"is_favorite" => in_array($userId, explode(',', $reused['favorite'])),
"is_bookmark" => in_array($reused["uniqid"], explode(',', $mybookmark)),
"abi" => array(
"abi_text" => $reused["abi"],
"abi_date" => $reused["abidate"],
),
);
}else{
$value["reuse"] = null;
}
}else{
$value["type"] = "Ueuse";
}
$ueuse = array(
"type" => $value["type"],
"uniqid" => $value["uniqid"],
"datetime" => $value["datetime"],
"userid" => $value["account"],
"userdata" => array(
"userid" => $value["account"],
"username" => $value["username"],
"iconurl" => $value['iconname'],
"role" => $value["role"],
),
"ueuse" => $value["ueuse"],
"photo1" => $value["photo1"],
"photo2" => $value["photo2"],
"photo3" => $value["photo3"],
"photo4" => $value["photo4"],
"video1" => $value["video1"],
"rpuniqid" => $value["rpuniqid"],
"ruuniqid" => $value["ruuniqid"],
"nsfw" => filter_var($value["nsfw"], FILTER_VALIDATE_BOOLEAN),
"favoritecount" => $value["favorite_conut"],
"replycount" => $value["reply_count"],
"reusecount" => $value["reuse_count"],
"is_favorite" => in_array($userId, explode(',', $value['favorite'])),
"is_bookmark" => in_array($value["uniqid"], explode(',', $mybookmark)),
"abi" => array(
"abi_text" => $value["abi"],
"abi_date" => $value["abidate"],
),
);
if ($value["type"] === "Reuse") {
$ueuse["reuse"] = $value["reuse"];
}
$ueuseItems[] = $ueuse;
}
} }
} }
+36 -103
View File
@@ -3,6 +3,9 @@ header('Content-Type: application/json');
require('../db.php'); require('../db.php');
require('../function/function.php'); require('../function/function.php');
blockedIP($_SERVER['REMOTE_ADDR']); blockedIP($_SERVER['REMOTE_ADDR']);
$domain = $_SERVER['HTTP_HOST'];
$serversettings_file = "../server/serversettings.ini";
$serversettings = parse_ini_file($serversettings_file, true);
if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safetext(isset($_POST['account_id'])) && safetext(isset($_COOKIE['loginkey'])) && safetext(isset($_POST['id']))) { if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safetext(isset($_POST['account_id'])) && safetext(isset($_COOKIE['loginkey'])) && safetext(isset($_POST['id']))) {
$page = safetext($_POST['page']); $page = safetext($_POST['page']);
@@ -11,6 +14,36 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe
$loginid = safetext($_POST['account_id']); $loginid = safetext($_POST['account_id']);
$loginkey = safetext($_COOKIE['loginkey']); $loginkey = safetext($_COOKIE['loginkey']);
if (safetext($serversettings["serverinfo"]["server_activitypub"]) === "true") {
if (isset($_POST['activity_domain'])) {
$activity_domain = safetext($_POST['activity_domain']) ? safetext($_POST['activity_domain']) : '';
if (!($activity_domain == $domain)) {
$domain_response = GetActivityPubUser($uwuzuid, $activity_domain);
if (empty($domain_response) || array_key_exists("error", $domain_response)) {
$userData = null;
} else {
$userData = $domain_response;
}
//var_dump($domain_response);
$is_local = false;
$item = array(
"success" => false,
"ueuses" => null,
"ads" => null,
"error" => "no_ueuse",
);
echo json_encode($item, JSON_UNESCAPED_UNICODE);
exit;
} else {
$is_local = true;
}
}
} else {
$activity_domain = $domain;
$is_local = true;
}
$is_login = uwuzuUserLoginCheck($loginid, $loginkey, "user"); $is_login = uwuzuUserLoginCheck($loginid, $loginkey, "user");
if ($is_login === false) { if ($is_login === false) {
echo json_encode(['success' => false, 'error' => 'bad_request']); echo json_encode(['success' => false, 'error' => 'bad_request']);
@@ -127,109 +160,9 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe
$ueuseItems = array(); $ueuseItems = array();
if(!empty($messages)){ if(!empty($messages)){
foreach ($messages as $value) { foreach ($messages as $value) {
if (!(in_array(safetext($value['account']), explode(",", $myblocklist)))){ $formatted = FormatUeuseItem($value, $myblocklist, $mybookmark, $pdo, $userId);
if(!($value["role"] === "ice")){ if ($formatted !== null) {
if(filter_var($value['iconname'], FILTER_VALIDATE_URL)){ $ueuseItems[] = $formatted;
$value['iconname'] = $value['iconname'];
}else{
$value['iconname'] = "../" . $value['iconname'];
}
// ""や"none"をnullに変換
$value = to_null($value);
$value = to_array_safetext($value);
$value["role"] = explode(',', $value["role"]);
if(!empty($value['rpuniqid'])){
$value["type"] = "Reply";
//リユーズどうするから始める
}elseif(!empty($value['ruuniqid'])){
$value["type"] = "Reuse";
$reused = getUeuseData($pdo, $value['ruuniqid']); // 例:ruuniqidから元投稿を取得する関数
if ($reused) {
$reusedUserData = getUserData($pdo, $reused['account']); // 例:元投稿のユーザー情報を取得する関数
$reusedUserData["role"] = explode(',', $reusedUserData["role"]);
// ""や"none"をnullに変換
$reused = to_null($reused);
$reused = to_array_safetext($reused);
// Reusedataを作成
$value["reuse"] = array(
"type" => "Reuse",
"uniqid" => $reused["uniqid"],
"datetime" => $reused["datetime"],
"userid" => $reused["account"],
"userdata" => array(
"userid" => $reusedUserData["userid"],
"username" => $reusedUserData["username"],
"iconurl" => filter_var($reusedUserData['iconname'], FILTER_VALIDATE_URL)
? $reusedUserData['iconname']
: "../" . $reusedUserData['iconname'],
"role" => $reusedUserData["role"],
),
"ueuse" => $reused["ueuse"],
"photo1" => $reused["photo1"],
"photo2" => $reused["photo2"],
"photo3" => $reused["photo3"],
"photo4" => $reused["photo4"],
"video1" => $reused["video1"],
"rpuniqid" => $reused["rpuniqid"],
"ruuniqid" => $reused["ruuniqid"],
"nsfw" => filter_var($reused["nsfw"], FILTER_VALIDATE_BOOLEAN),
"favoritecount" => $reused["favorite_conut"],
"replycount" => $reused["reply_count"],
"reusecount" => $reused["reuse_count"],
"is_favorite" => in_array($userId, explode(',', $reused['favorite'])),
"is_bookmark" => in_array($reused["uniqid"], explode(',', $mybookmark)),
"abi" => array(
"abi_text" => $reused["abi"],
"abi_date" => $reused["abidate"],
),
);
}else{
$value["reuse"] = null;
}
}else{
$value["type"] = "Ueuse";
}
$ueuse = array(
"type" => $value["type"],
"uniqid" => $value["uniqid"],
"datetime" => $value["datetime"],
"userid" => $value["account"],
"userdata" => array(
"userid" => $value["account"],
"username" => $value["username"],
"iconurl" => $value['iconname'],
"role" => $value["role"],
),
"ueuse" => $value["ueuse"],
"photo1" => $value["photo1"],
"photo2" => $value["photo2"],
"photo3" => $value["photo3"],
"photo4" => $value["photo4"],
"video1" => $value["video1"],
"rpuniqid" => $value["rpuniqid"],
"ruuniqid" => $value["ruuniqid"],
"nsfw" => filter_var($value["nsfw"], FILTER_VALIDATE_BOOLEAN),
"favoritecount" => $value["favorite_conut"],
"replycount" => $value["reply_count"],
"reusecount" => $value["reuse_count"],
"is_favorite" => in_array($userId, explode(',', $value['favorite'])),
"is_bookmark" => in_array($value["uniqid"], explode(',', $mybookmark)),
"abi" => array(
"abi_text" => $value["abi"],
"abi_date" => $value["abidate"],
),
);
if ($value["type"] === "Reuse") {
$ueuse["reuse"] = $value["reuse"];
}
$ueuseItems[] = $ueuse;
}
} }
} }
+184 -161
View File
@@ -3,6 +3,9 @@ header('Content-Type: application/json');
require('../db.php'); require('../db.php');
require('../function/function.php'); require('../function/function.php');
blockedIP($_SERVER['REMOTE_ADDR']); blockedIP($_SERVER['REMOTE_ADDR']);
$domain = $_SERVER['HTTP_HOST'];
$serversettings_file = "../server/serversettings.ini";
$serversettings = parse_ini_file($serversettings_file, true);
if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safetext(isset($_POST['account_id'])) && safetext(isset($_COOKIE['loginkey'])) && safetext(isset($_POST['id']))) { if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safetext(isset($_POST['account_id'])) && safetext(isset($_COOKIE['loginkey'])) && safetext(isset($_POST['id']))) {
$page = safetext($_POST['page']); $page = safetext($_POST['page']);
@@ -11,6 +14,29 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe
$loginid = safetext($_POST['account_id']); $loginid = safetext($_POST['account_id']);
$loginkey = safetext($_COOKIE['loginkey']); $loginkey = safetext($_COOKIE['loginkey']);
if (safetext($serversettings["serverinfo"]["server_activitypub"]) === "true") {
if (isset($_POST['activity_domain'])) {
$activity_domain = safetext($_POST['activity_domain']) ? safetext($_POST['activity_domain']) : '';
if (!($activity_domain == $domain)) {
$domain_response = GetActivityPubUser($uwuzuid, $activity_domain);
if (empty($domain_response) || array_key_exists("error", $domain_response)) {
$userData = null;
} else {
$userData = $domain_response;
}
//var_dump($domain_response);
$is_local = false;
} else {
$is_local = true;
}
}
} else {
$activity_domain = $domain;
$is_local = true;
}
$is_login = uwuzuUserLoginCheck($loginid, $loginkey, "user"); $is_login = uwuzuUserLoginCheck($loginid, $loginkey, "user");
if ($is_login === false) { if ($is_login === false) {
echo json_encode(['success' => false, 'error' => 'bad_request']); echo json_encode(['success' => false, 'error' => 'bad_request']);
@@ -36,69 +62,167 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe
$itemsPerPage = 15; // 1ページあたりのユーズ数 $itemsPerPage = 15; // 1ページあたりのユーズ数
$pageNumber = $page; $pageNumber = $page;
if($pageNumber <= 0 || (!(is_numeric($pageNumber)))){ if ($pageNumber <= 0 || (!(is_numeric($pageNumber)))) {
$pageNumber = 1; $pageNumber = 1;
} }
$offset = ($pageNumber - 1) * $itemsPerPage; $offset = ($pageNumber - 1) * $itemsPerPage;
$messages = array(); $messages = array();
$userQuery = $pdo->prepare("SELECT username, userid, profile, role, follower FROM account WHERE userid = :userid");
$userQuery->bindValue(':userid', $uwuzuid);
$userQuery->execute();
$userData = $userQuery->fetch();
$messageQuery = $pdo->prepare("SELECT * FROM ueuse WHERE account = :userid AND rpuniqid = ''ORDER BY datetime DESC LIMIT :offset, :itemsPerPage");
$messageQuery->bindValue(':userid', $uwuzuid);
$messageQuery->bindValue(':offset', $offset, PDO::PARAM_INT);
$messageQuery->bindValue(':itemsPerPage', $itemsPerPage, PDO::PARAM_INT);
$messageQuery->execute();
$message_array = $messageQuery->fetchAll();
$messages = array();
foreach ($message_array as $row) {
$messages[] = $row;
}
// ユーザー情報を取得して、$messages内のusernameをuserDataのusernameに置き換える if ($is_local === true) {
foreach ($messages as &$message) { $userQuery = $pdo->prepare("SELECT username, userid, profile, role, follower FROM account WHERE userid = :userid");
$userQuery = $pdo->prepare("SELECT username, userid, profile, role, iconname, headname, sacinfo FROM account WHERE userid = :userid"); $userQuery->bindValue(':userid', $uwuzuid);
$userQuery->bindValue(':userid', $message["account"]);
$userQuery->execute(); $userQuery->execute();
$userData = $userQuery->fetch(); $userData = $userQuery->fetch();
if ($userData) { $messageQuery = $pdo->prepare("SELECT * FROM ueuse WHERE account = :userid AND rpuniqid = ''ORDER BY datetime DESC LIMIT :offset, :itemsPerPage");
$message['iconname'] = $userData['iconname']; $messageQuery->bindValue(':userid', $uwuzuid);
$message['headname'] = $userData['headname']; $messageQuery->bindValue(':offset', $offset, PDO::PARAM_INT);
$message['username'] = $userData['username']; $messageQuery->bindValue(':itemsPerPage', $itemsPerPage, PDO::PARAM_INT);
$message['sacinfo'] = $userData['sacinfo']; $messageQuery->execute();
$message['role'] = $userData['role']; $message_array = $messageQuery->fetchAll();
foreach ($message_array as $row) {
$messages[] = $row;
} }
//リプライ数取得 // ユーザー情報を取得して、$messages内のusernameをuserDataのusernameに置き換える
$rpQuery = $pdo->prepare("SELECT COUNT(*) as reply_count FROM ueuse WHERE rpuniqid = :rpuniqid"); foreach ($messages as &$message) {
$rpQuery->bindValue(':rpuniqid', $message['uniqid']); $userQuery = $pdo->prepare("SELECT username, userid, profile, role, iconname, headname, sacinfo FROM account WHERE userid = :userid");
$rpQuery->execute(); $userQuery->bindValue(':userid', $message["account"]);
$rpData = $rpQuery->fetch(PDO::FETCH_ASSOC); $userQuery->execute();
$userData = $userQuery->fetch();
if ($rpData){
$message['reply_count'] = $rpData['reply_count'];
}
//リユーズ数取得 if ($userData) {
$ruQuery = $pdo->prepare("SELECT COUNT(*) as reuse_count FROM ueuse WHERE ruuniqid = :ruuniqid"); $message['iconname'] = $userData['iconname'];
$ruQuery->bindValue(':ruuniqid', $message['uniqid']); $message['headname'] = $userData['headname'];
$ruQuery->execute(); $message['username'] = $userData['username'];
$ruData = $ruQuery->fetch(PDO::FETCH_ASSOC); $message['sacinfo'] = $userData['sacinfo'];
$message['role'] = $userData['role'];
if ($ruData){ }
$message['reuse_count'] = $ruData['reuse_count'];
}
$fav = $message['favorite']; //リプライ数取得
$favIds = explode(',', $fav); $rpQuery = $pdo->prepare("SELECT COUNT(*) as reply_count FROM ueuse WHERE rpuniqid = :rpuniqid");
$message["favorite_conut"] = count($favIds)-1; $rpQuery->bindValue(':rpuniqid', $message['uniqid']);
$rpQuery->execute();
$rpData = $rpQuery->fetch(PDO::FETCH_ASSOC);
if ($rpData) {
$message['reply_count'] = $rpData['reply_count'];
}
//リユーズ数取得
$ruQuery = $pdo->prepare("SELECT COUNT(*) as reuse_count FROM ueuse WHERE ruuniqid = :ruuniqid");
$ruQuery->bindValue(':ruuniqid', $message['uniqid']);
$ruQuery->execute();
$ruData = $ruQuery->fetch(PDO::FETCH_ASSOC);
if ($ruData) {
$message['reuse_count'] = $ruData['reuse_count'];
}
$fav = $message['favorite'];
$favIds = explode(',', $fav);
$message["favorite_conut"] = count($favIds) - 1;
}
} elseif($userData != null) {
$activity_base = GetActivityPubJson($userData['outbox']);
$pageUrl = $activity_base['first'] ?? null;
$pageNumber = max(1, (int)$page); // 1ページ目以上に固定
$currentPageData = null;
for ($i = 1; $i <= $pageNumber; $i++) {
if (!$pageUrl) break;
$currentPageData = GetActivityPubJson($pageUrl);
// 目的のページに達していなければ next をたどる
if ($i < $pageNumber) {
$pageUrl = $currentPageData['next'] ?? null;
}
}
$orderedItems = $currentPageData['orderedItems'] ?? [];
$createItems = array_filter($orderedItems, function ($item) {
return isset($item['type']) && $item['type'] === 'Create';
});
$createItems = array_values($createItems);
foreach ($createItems as $item) {
// object がURLなら取得
$object = $item['object'] ?? null;
if (is_string($object)) {
$object = GetActivityPubJson($object);
}
// nullや不正なobjectはスキップ
if (!is_array($object)) continue;
$contentHtml = $object['content'] ?? '';
$withNewlines = preg_replace('/<br\s*\/?>/i', "\n", $contentHtml);
$plainContent = strip_tags($withNewlines);
$photos = [];
$video = null;
if (!empty($object['attachment'])) {
$attachments = is_array($object['attachment']) ? $object['attachment'] : [$object['attachment']];
foreach ($attachments as $att) {
if (!is_array($att)) continue;
$mediaType = $att['mediaType'] ?? '';
$url = $att['url'] ?? ($att['href'] ?? null);
if (!$url) continue;
// 画像(mediaTypeで判定)
if (str_starts_with($mediaType, 'image/')) {
if (count($photos) < 4) {
$photos[] = $url;
}
}
// 動画(mediaTypeで判定)
if (str_starts_with($mediaType, 'video/') && !$video) {
$video = $url;
}
}
}
$messages[] = [
"rpuniqid" => "",
"ruuniqid" => "",
"uniqid" => "",
"datetime" => date("Y-m-d H:i:s", strtotime($object["published"] ?? "now")),
"account" => $userData["userid"] . "@" . $activity_domain,
"username" => $userData["username"],
"iconname" => $userData["iconname"],
"headname" => $userData["headname"] ?? null,
"role" => $userData["role"] ?? "user",
"sacinfo" => "",
"ueuse" => $plainContent,
"photo1" => $photos[0] ?? null,
"photo2" => $photos[1] ?? null,
"photo3" => $photos[2] ?? null,
"photo4" => $photos[3] ?? null,
"video1" => $video,
"nsfw" => $object["sensitive"] ?? false,
"favorite" => "",
"favorite_conut" => 0,
"reply_count" => 0,
"reuse_count" => 0,
"abi" => "",
"abidate" => null,
"activitypub" => true,
];
}
}else{
$message = array();
} }
//adsystem------------------ //adsystem------------------
$message['ads'] = "false"; $message['ads'] = "false";
@@ -109,7 +233,7 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe
$adsQuery->bindValue(':today', $today); $adsQuery->bindValue(':today', $today);
$adsQuery->execute(); $adsQuery->execute();
$adsresult = $adsQuery->fetch(); $adsresult = $adsQuery->fetch();
if(!(empty($adsresult))){ if (!(empty($adsresult))) {
$message['ads'] = "true"; $message['ads'] = "true";
$message['ads_url'] = $adsresult["url"]; $message['ads_url'] = $adsresult["url"];
$message['ads_img_url'] = $adsresult["image_url"]; $message['ads_img_url'] = $adsresult["image_url"];
@@ -118,122 +242,22 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe
//-------------------------- //--------------------------
$ueuseItems = array(); $ueuseItems = array();
if(!empty($messages)){ if (!empty($messages)) {
foreach ($messages as $value) { foreach ($messages as $value) {
if (!(in_array(safetext($value['account']), explode(",", $myblocklist)))){ $formatted = FormatUeuseItem($value, $myblocklist, $mybookmark, $pdo, $userId);
if(!($value["role"] === "ice")){ if ($formatted !== null) {
if(filter_var($value['iconname'], FILTER_VALIDATE_URL)){ $ueuseItems[] = $formatted;
$value['iconname'] = $value['iconname'];
}else{
$value['iconname'] = "../" . $value['iconname'];
}
// ""や"none"をnullに変換
$value = to_null($value);
$value = to_array_safetext($value);
$value["role"] = explode(',', $value["role"]);
if(!empty($value['rpuniqid'])){
$value["type"] = "Reply";
//リユーズどうするから始める
}elseif(!empty($value['ruuniqid'])){
$value["type"] = "Reuse";
$reused = getUeuseData($pdo, $value['ruuniqid']); // 例:ruuniqidから元投稿を取得する関数
if ($reused) {
$reusedUserData = getUserData($pdo, $reused['account']); // 例:元投稿のユーザー情報を取得する関数
$reusedUserData["role"] = explode(',', $reusedUserData["role"]);
// ""や"none"をnullに変換
$reused = to_null($reused);
$reused = to_array_safetext($reused);
// Reusedataを作成
$value["reuse"] = array(
"type" => "Reuse",
"uniqid" => $reused["uniqid"],
"datetime" => $reused["datetime"],
"userid" => $reused["account"],
"userdata" => array(
"userid" => $reusedUserData["userid"],
"username" => $reusedUserData["username"],
"iconurl" => filter_var($reusedUserData['iconname'], FILTER_VALIDATE_URL)
? $reusedUserData['iconname']
: "../" . $reusedUserData['iconname'],
"role" => $reusedUserData["role"],
),
"ueuse" => $reused["ueuse"],
"photo1" => $reused["photo1"],
"photo2" => $reused["photo2"],
"photo3" => $reused["photo3"],
"photo4" => $reused["photo4"],
"video1" => $reused["video1"],
"rpuniqid" => $reused["rpuniqid"],
"ruuniqid" => $reused["ruuniqid"],
"nsfw" => filter_var($reused["nsfw"], FILTER_VALIDATE_BOOLEAN),
"favoritecount" => $reused["favorite_conut"],
"replycount" => $reused["reply_count"],
"reusecount" => $reused["reuse_count"],
"is_favorite" => in_array($userId, explode(',', $reused['favorite'])),
"is_bookmark" => in_array($reused["uniqid"], explode(',', $mybookmark)),
"abi" => array(
"abi_text" => $reused["abi"],
"abi_date" => $reused["abidate"],
),
);
}else{
$value["reuse"] = null;
}
}else{
$value["type"] = "Ueuse";
}
$ueuse = array(
"type" => $value["type"],
"uniqid" => $value["uniqid"],
"datetime" => $value["datetime"],
"userid" => $value["account"],
"userdata" => array(
"userid" => $value["account"],
"username" => $value["username"],
"iconurl" => $value['iconname'],
"role" => $value["role"],
),
"ueuse" => $value["ueuse"],
"photo1" => $value["photo1"],
"photo2" => $value["photo2"],
"photo3" => $value["photo3"],
"photo4" => $value["photo4"],
"video1" => $value["video1"],
"rpuniqid" => $value["rpuniqid"],
"ruuniqid" => $value["ruuniqid"],
"nsfw" => filter_var($value["nsfw"], FILTER_VALIDATE_BOOLEAN),
"favoritecount" => $value["favorite_conut"],
"replycount" => $value["reply_count"],
"reusecount" => $value["reuse_count"],
"is_favorite" => in_array($userId, explode(',', $value['favorite'])),
"is_bookmark" => in_array($value["uniqid"], explode(',', $mybookmark)),
"abi" => array(
"abi_text" => $value["abi"],
"abi_date" => $value["abidate"],
),
);
if ($value["type"] === "Reuse") {
$ueuse["reuse"] = $value["reuse"];
}
$ueuseItems[] = $ueuse;
}
} }
} }
if($message['ads'] === "true"){ if ($message['ads'] === "true") {
$adsystem = array( $adsystem = array(
"type" => "Ads", "type" => "Ads",
"url" => $message['ads_url'], "url" => $message['ads_url'],
"imgurl" => $message['ads_img_url'], "imgurl" => $message['ads_img_url'],
"memo" => $message['ads_memo'], "memo" => $message['ads_memo'],
); );
}else{ } else {
$adsystem = null; $adsystem = null;
} }
@@ -242,9 +266,9 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe
"ueuses" => $ueuseItems, "ueuses" => $ueuseItems,
"ads" => $adsystem, "ads" => $adsystem,
); );
echo json_encode($item, JSON_UNESCAPED_UNICODE); echo json_encode($item, JSON_UNESCAPED_UNICODE);
}else{ } else {
$item = array( $item = array(
"success" => false, "success" => false,
"ueuses" => null, "ueuses" => null,
@@ -253,10 +277,10 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe
); );
echo json_encode($item, JSON_UNESCAPED_UNICODE); echo json_encode($item, JSON_UNESCAPED_UNICODE);
} }
$pdo = null; $pdo = null;
} }
}else{ } else {
$item = array( $item = array(
"success" => false, "success" => false,
"ueuses" => null, "ueuses" => null,
@@ -265,4 +289,3 @@ if (safetext(isset($_POST['page'])) && safetext(isset($_POST['userid'])) && safe
); );
echo json_encode($item, JSON_UNESCAPED_UNICODE); echo json_encode($item, JSON_UNESCAPED_UNICODE);
} }
?>
+19 -13
View File
@@ -79,6 +79,7 @@ $pdo = null;
<script src="../js/jquery-min.js"></script> <script src="../js/jquery-min.js"></script>
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<script src="../js/view_function.js"></script>
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
@@ -130,29 +131,34 @@ $pdo = null;
<script> <script>
$(document).ready(function() { $(document).ready(function() {
loadPosts(); var userid = '<?php echo $userid; ?>';
var loginid = '<?php echo $loginid; ?>';
var pageNumber = 1; var pageNumber = 1;
var isLoading = false; var isLoading = false;
view_ueuse_init(userid, loginid);
loadPosts();
function loadPosts() { function loadPosts() {
if (isLoading) return; if (isLoading) return;
isLoading = true; isLoading = true;
$("#loading").show(); $("#loading").show();
var userid = '<?php echo $userid; ?>';
var account_id = '<?php echo $loginid; ?>';
$.ajax({ $.ajax({
url: '../nextpage/notification.php', // PHPファイルへのパス url: '../nextpage/notification.php', // PHPファイルへのパス
method: 'GET', method: 'POST',
data: { page: pageNumber, userid: userid , account_id: account_id }, data: { page: pageNumber, userid: userid, account_id: loginid },
dataType: 'html', dataType: 'json',
timeout: 300000, timeout: 300000,
success: function(response) { success: function(response) {
$('#postContainer').append(response); if(renderNotifications(response)){
pageNumber++; pageNumber++;
isLoading = false; isLoading = false;
$("#loading").hide(); $("#loading").hide();
$("#error").hide(); }else{
isLoading = false;
$("#loading").hide();
$("#error").show();
}
}, },
error: function (xhr, textStatus, errorThrown) { // エラーと判定された場合 error: function (xhr, textStatus, errorThrown) { // エラーと判定された場合
isLoading = false; isLoading = false;
+357 -246
View File
@@ -1,9 +1,5 @@
<?php <?php
function random_token($length = 64)
{
return substr(str_shuffle('1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), 0, $length);
}
$domain = $_SERVER['HTTP_HOST']; $domain = $_SERVER['HTTP_HOST'];
$serversettings_file = "../server/serversettings.ini"; $serversettings_file = "../server/serversettings.ini";
$serversettings = parse_ini_file($serversettings_file, true); $serversettings = parse_ini_file($serversettings_file, true);
@@ -25,37 +21,36 @@ $option = null;
session_name('uwuzu_s_id'); session_name('uwuzu_s_id');
session_set_cookie_params([ session_set_cookie_params([
'lifetime' => 0, 'lifetime' => 0,
'path' => '/', 'path' => '/',
'domain' => '', 'domain' => '',
'secure' => true, 'secure' => true,
'httponly' => true, 'httponly' => true,
'samesite' => 'Lax' 'samesite' => 'Lax'
]); ]);
session_start(); session_start();
session_regenerate_id(true); session_regenerate_id(true);
try { try {
$option = array( $option = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_MULTI_STATEMENTS => false PDO::MYSQL_ATTR_MULTI_STATEMENTS => false
); );
$pdo = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option); $pdo = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, $option);
} catch (PDOException $e) {
} catch(PDOException $e) { // 接続エラーのときエラー内容を取得する
$error_message[] = $e->getMessage();
// 接続エラーのときエラー内容を取得する
$error_message[] = $e->getMessage();
} }
//ログイン認証--------------------------------------------------- //ログイン認証---------------------------------------------------
blockedIP($_SERVER['REMOTE_ADDR']); blockedIP($_SERVER['REMOTE_ADDR']);
$is_login = uwuzuUserLogin($_SESSION, $_COOKIE, $_SERVER['REMOTE_ADDR'], "user"); $is_login = uwuzuUserLogin($_SESSION, $_COOKIE, $_SERVER['REMOTE_ADDR'], "user");
if($is_login === false){ if ($is_login === false) {
header("Location: ../index.php"); header("Location: ../index.php");
exit; exit;
}else{ } else {
$userid = safetext($is_login['userid']); $userid = safetext($is_login['userid']);
$username = safetext($is_login['username']); $username = safetext($is_login['username']);
$loginid = safetext($is_login["loginid"]); $loginid = safetext($is_login["loginid"]);
@@ -72,40 +67,36 @@ $notiData = $notiQuery->fetch(PDO::FETCH_ASSOC);
$notificationcount = $notiData['notification_count']; $notificationcount = $notiData['notification_count'];
if( !empty($pdo) ) { if (!empty($pdo)) {
$userData = getUserData($pdo, $userid);
// データベース接続の設定
$dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
));
$userQuery = $dbh->prepare("SELECT userid,token,role FROM account WHERE userid = :userid"); $apitokenQuery = $pdo->prepare("SELECT * FROM api WHERE userid = :userid ORDER BY datetime DESC");
$userQuery->bindValue(':userid', $userid); $apitokenQuery->bindValue(':userid', $userid);
$userQuery->execute(); $apitokenQuery->execute();
$userData = $userQuery->fetch();
while ($row = $apitokenQuery->fetch(PDO::FETCH_ASSOC)) {
$apiData[] = $row;
}
} }
if( !empty($_POST['btn_submit']) ) { if (!empty($_POST['btn_submit'])) {
$chkuserid = safetext($_POST['chkuserid']); $chkuserid = safetext($_POST['chkuserid']);
if( empty($chkuserid) ) { if (empty($chkuserid)) {
$error_message[] = '確認用ユーザーIDを入力してください。(USERID_CHECK_INPUT_PLEASE)'; $error_message[] = '確認用ユーザーIDを入力してください。(USERID_CHECK_INPUT_PLEASE)';
} else { } else {
if($chkuserid === $userData["userid"]){ if ($chkuserid === $userData["userid"]) {
$res = addJob($pdo, $userData["userid"], "deleteUser", "stop_account"); $res = addJob($pdo, $userData["userid"], "deleteUser", "stop_account");
if ($res) { if ($res) {
if (isset($_SERVER['HTTP_COOKIE'])) { if (isset($_SERVER['HTTP_COOKIE'])) {
$cookies = explode(';', $_SERVER['HTTP_COOKIE']); $cookies = explode(';', $_SERVER['HTTP_COOKIE']);
foreach($cookies as $cookie) { foreach ($cookies as $cookie) {
$parts = explode('=', $cookie); $parts = explode('=', $cookie);
$name = trim($parts[0]); $name = trim($parts[0]);
setcookie($name, '', time()-1000); setcookie($name, '', time() - 1000);
setcookie($name, '', time()-1000, '/'); setcookie($name, '', time() - 1000, '/');
} }
} }
header("Location:../index.php"); header("Location:../index.php");
@@ -114,141 +105,102 @@ if( !empty($_POST['btn_submit']) ) {
$error_message[] = 'アカウント削除に失敗しました。(ACCOUNT_DELETE_DAME)'; $error_message[] = 'アカウント削除に失敗しました。(ACCOUNT_DELETE_DAME)';
} }
// プリペアドステートメントを削除 // プリペアドステートメントを削除
$stmt = null; $stmt = null;
}else{ } else {
$error_message[] = '確認用ユーザーIDが違います。(USERID_CHIGAUYANKE)'; $error_message[] = '確認用ユーザーIDが違います。(USERID_CHIGAUYANKE)';
} }
} }
} }
if( !empty($_POST['session_submit']) ) { if (!empty($_POST['session_submit'])) {
$LoginIdBytes = random_bytes(64); $LoginIdBytes = random_bytes(64);
$loginid = hash('sha3-512', $LoginIdBytes); $loginid = hash('sha3-512', $LoginIdBytes);
$pdo->beginTransaction(); $pdo->beginTransaction();
try { try {
$stmt = $pdo->prepare("UPDATE account SET loginid = :loginid WHERE userid = :userid;");
$stmt->bindParam(':loginid', $loginid, PDO::PARAM_STR); $stmt = $pdo->prepare("UPDATE account SET loginid = :loginid WHERE userid = :userid;");
$stmt->bindValue(':userid', $userid, PDO::PARAM_STR); $stmt->bindParam(':loginid', $loginid, PDO::PARAM_STR);
// SQLクエリの実行 $stmt->bindValue(':userid', $userid, PDO::PARAM_STR);
$res = $stmt->execute();
// コミット // SQLクエリの実行
$res = $pdo->commit(); $res = $stmt->execute();
} catch (Exception $e) {
// エラーが発生した時はロールバック // コミット
$pdo->rollBack(); $res = $pdo->commit();
} } catch (Exception $e) {
if ($res) { // エラーが発生した時はロールバック
if (isset($_SERVER['HTTP_COOKIE'])) { $pdo->rollBack();
$cookies = explode(';', $_SERVER['HTTP_COOKIE']); }
foreach($cookies as $cookie) {
$parts = explode('=', $cookie); if ($res) {
$name = trim($parts[0]); if (isset($_SERVER['HTTP_COOKIE'])) {
setcookie($name, '', time()-1000); $cookies = explode(';', $_SERVER['HTTP_COOKIE']);
setcookie($name, '', time()-1000, '/'); foreach ($cookies as $cookie) {
} $parts = explode('=', $cookie);
$name = trim($parts[0]);
setcookie($name, '', time() - 1000);
setcookie($name, '', time() - 1000, '/');
} }
// リダイレクト先のURLへ転送する
$url = '../index.php';
header('Location: ' . $url, true, 303);
// すべての出力を終了
exit;
} else {
$error_message[] = 'セッショントークンの再生成に失敗しました。(END_OF_SESSION_DAME)';
} }
// リダイレクト先のURLへ転送する
$url = '../index.php';
header('Location: ' . $url, true, 303);
// すべての出力を終了
exit;
} else {
$error_message[] = 'セッショントークンの再生成に失敗しました。(END_OF_SESSION_DAME)';
}
} }
if( !empty($_POST['logout_submit']) ) { if (!empty($_POST['logout_submit'])) {
$url = '../logout/index.php'; $url = '../logout/index.php';
header('Location: ' . $url); header('Location: ' . $url);
exit; exit;
} }
if( !empty($_POST['token_submit']) ) { if (!empty($_POST['token_off_submit'])) {
$token = random_token();
$nones = "none";
$pdo->beginTransaction();
try {
$stmt = $pdo->prepare("UPDATE account SET token = :token, sacinfo = :new_sacinfo WHERE userid = :userid;");
$stmt->bindParam(':token', $token, PDO::PARAM_STR);
$stmt->bindParam(':new_sacinfo', $nones, PDO::PARAM_STR);
$stmt->bindValue(':userid', $userid, PDO::PARAM_STR);
// SQLクエリの実行
$res = $stmt->execute();
// コミット
$res = $pdo->commit();
} catch (Exception $e) {
// エラーが発生した時はロールバック
$pdo->rollBack();
}
if ($res) {
$_SESSION['token'] = $token;
// リダイレクト先のURLへ転送する
$url = 'token.php';
header('Location: ' . $url, true, 303);
exit;
} else {
$error_message[] = 'アクセストークンの発行に失敗しました。(CREATE_TOKEN_DAME)';
}
}
if( !empty($_POST['token_off_submit']) ) {
$token = ''; $token = '';
$new_sacinfo = 'none'; $new_sacinfo = 'none';
$pdo->beginTransaction(); $pdo->beginTransaction();
try { try {
$stmt = $pdo->prepare("UPDATE account SET token = :token,sacinfo = :sacinfo WHERE userid = :userid;");
$stmt->bindParam(':token', $token, PDO::PARAM_STR); $stmt = $pdo->prepare("UPDATE account SET token = :token,sacinfo = :sacinfo WHERE userid = :userid;");
$stmt->bindParam(':sacinfo', $new_sacinfo, PDO::PARAM_STR);
$stmt->bindValue(':userid', $userid, PDO::PARAM_STR); $stmt->bindParam(':token', $token, PDO::PARAM_STR);
$stmt->bindParam(':sacinfo', $new_sacinfo, PDO::PARAM_STR);
// SQLクエリの実行 $stmt->bindValue(':userid', $userid, PDO::PARAM_STR);
$res = $stmt->execute();
// コミット // SQLクエリの実行
$res = $pdo->commit(); $res = $stmt->execute();
} catch (Exception $e) {
// エラーが発生した時はロールバック // コミット
$pdo->rollBack(); $res = $pdo->commit();
} } catch (Exception $e) {
if ($res) {
$url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header("Location:".$url."");
exit;
} else {
$error_message[] = 'アクセストークンの削除に失敗しました。(TOKEN_DELETE_DAME)';
}
// エラーが発生した時はロールバック
$pdo->rollBack();
}
if ($res) {
$url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header("Location:" . $url . "");
exit;
} else {
$error_message[] = 'アクセストークンの削除に失敗しました。(TOKEN_DELETE_DAME)';
}
} }
if( !empty($_POST['cache_submit']) ) { if (!empty($_POST['cache_submit'])) {
header("Location: cache_clear.php"); header("Location: cache_clear.php");
exit; exit;
} }
require('../logout/logout.php'); require('../logout/logout.php');
@@ -257,95 +209,144 @@ require('../logout/logout.php');
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="ja"> <html lang="ja">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="../css/home.css"> <link rel="stylesheet" href="../css/home.css">
<script src="../js/unsupported.js"></script> <script src="../js/unsupported.js"></script>
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<script src="../js/jquery-min.js"></script> <script src="../js/jquery-min.js"></script>
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <script src="../js/nsfw_event.js"></script>
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<title>その他の項目 - <?php echo safetext($serversettings["serverinfo"]["server_name"]);?></title> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title>その他の項目 - <?php echo safetext($serversettings["serverinfo"]["server_name"]); ?></title>
</head> </head>
<body> <body>
<?php require('../require/leftbox.php');?> <div>
<div id="notify" class="new_ueuse" style="display:none;">
<p>お知らせです</p>
</div>
</div>
<?php require('../require/leftbox.php'); ?>
<main> <main>
<?php if( !empty($error_message) ): ?> <?php if (!empty($error_message)): ?>
<ul class="errmsg"> <ul class="errmsg">
<?php foreach( $error_message as $value ): ?> <?php foreach ($error_message as $value): ?>
<p> <?php echo $value; ?></p> <p> <?php echo $value; ?></p>
<?php endforeach; ?> <?php endforeach; ?>
</ul> </ul>
<?php endif; ?> <?php endif; ?>
<form class="formarea" method="post"> <form class="formarea" method="post">
<h1>セッショントークンの再生成</h1> <h1>セッショントークンの再生成</h1>
<p>下のセッショントークン再生成ボタンを押すと全てのログイン中のデバイスからログアウトされます。<br>再度uwuzu使用するにはログインが必須になります。</p> <p>下のセッショントークン再生成ボタンを押すと全てのログイン中のデバイスからログアウトされます。<br>再度uwuzu使用するにはログインが必須になります。</p>
<input type="submit" class = "irobutton" name="session_submit" value="セッショントークン再生成"> <input type="submit" class="irobutton" name="session_submit" value="セッショントークン再生成">
<hr> <hr>
<h1>ログアウト</h1> <h1>ログアウト</h1>
<p>ログアウトです。他のログイン済みの端末からはログアウトされません。</p> <p>ログアウトです。他のログイン済みの端末からはログアウトされません。</p>
<input type="submit" class = "irobutton" name="logout_submit" value="ログアウト"> <input type="submit" class="irobutton" name="logout_submit" value="ログアウト">
<hr> <hr>
<h1>キャッシュクリア</h1> <h1>キャッシュクリア</h1>
<p>下のボタンを押すことでキャッシュクリアが可能です。</p> <p>下のボタンを押すことでキャッシュクリアが可能です。</p>
<div class="p2">この機能は試験的なものであり、正常に動作しない可能性があります。</div> <div class="p2">この機能は試験的なものであり、正常に動作しない可能性があります。</div>
<input type="submit" class = "irobutton" name="cache_submit" value="キャッシュクリア"> <input type="submit" class="irobutton" name="cache_submit" value="キャッシュクリア">
<hr> <hr>
<h1>チュートリアル</h1> <h1>チュートリアル</h1>
<p>uwuzuの基礎的なチュートリアルを行うことができます!</p> <p>uwuzuの基礎的なチュートリアルを行うことができます!</p>
<input type="button" class = "irobutton" id="tutorial" value="チュートリアル"> <input type="button" class="irobutton" id="tutorial" value="チュートリアル">
<hr> <hr>
<h1>他のサーバーへアカウント移行</h1> <h1>他のサーバーへアカウント移行</h1>
<p>uwuzuサーバー同士でのアカウント移行が可能になりました!</p> <p>uwuzuサーバー同士でのアカウント移行が可能になりました!</p>
<?php if($userData['token']==='ice'){ ?> <?php if ($userData['token'] === 'ice') { ?>
<p>このアカウントは凍結されているため移行できません。</p> <p>このアカウントは凍結されているため移行できません。</p>
<?php }else{ ?> <?php } else { ?>
<a href="account_migration" class="irobutton">アカウント移行</a> <a href="account_migration" class="irobutton">アカウント移行</a>
<?php }?> <?php } ?>
<hr> <hr>
<h1>アカウント削除</h1> <h1>アカウント削除</h1>
<p>アカウント誤削除を防ぐため下の入力ボックスにご自身のユーザーIDを入力する必要があります。</p> <p>アカウント誤削除を防ぐため下の入力ボックスにご自身のユーザーIDを入力する必要があります。</p>
<?php if($is_Admin === "yes"){?> <?php if ($is_Admin === "yes") { ?>
<p class="errmsg">あなたはこのサーバーの管理者のようです。<br>管理者アカウントの移行は済んでいますか?<br>アカウントを削除しても大丈夫なのですか...</p> <p class="errmsg">あなたはこのサーバーの管理者のようです。<br>管理者アカウントの移行は済んでいますか?<br>アカウントを削除しても大丈夫なのですか...</p>
<?php }?> <?php } ?>
<div> <div>
<p>確認用ユーザーID</p> <p>確認用ユーザーID</p>
<input id="chkuserid" placeholder="" class="inbox" type="text" name="chkuserid" value=""> <input id="chkuserid" placeholder="" class="inbox" type="text" name="chkuserid" value="">
</div> </div>
<input type="submit" class = "irobutton" name="btn_submit" value="アカウント削除"> <input type="submit" class="irobutton" name="btn_submit" value="アカウント削除">
<hr>
<h1>API</h1>
<p>APIの使用方法はdocs.uwuzu.xyzよりAPIドキュメントをご確認ください。</p>
<?php <hr>
if(empty($userData['token'])){ <h1>API</h1>
?> <p>APIの使用方法はdocs.uwuzu.xyzよりAPIドキュメントをご確認ください。</p>
<p>以下のボタンよりアクセストークンを取得すると使用できます。<br>アクセストークンは一度発行すると作り直すまで再度確認はできません。また、絶対に他人に知られないように保護してください。<p>
<input type="submit" class = "irobutton" name="token_submit" value="アクセストークン発行">
<?php }elseif($userData['role']==='ice'){ ?>
<p>アクセストークンはアカウントが凍結されているため発行できません。</p>
<?php }else{ ?>
<p>以下のボタンよりアクセストークンを削除できます。ボタンを押すとすぐに削除されますのでご注意ください。</p>
<input type="submit" class = "irobutton" name="token_off_submit" value="アクセストークン削除">
<?php }?>
<hr>
<div class="p2" id="help_me">もしものときは</div>
</form> <?php if (empty($userData['token'])) { ?>
<p>以下のボタンよりアクセストークンを取得すると使用できます。<br>アクセストークンは一度発行すると作り直すまで再度確認はできません。また、絶対に他人に知られないように保護してください。<br>
v1.6.0より詳細な権限設定の可能なアクセストークンの生成管理システムが実装されました。<br>
これにより従来のAPIアクセストークン発行機能は利用できなくなりました。<br>
アクセストークン自体には互換性があるため、従来のアクセストークンも引き続きご利用いただけます。
<p>
<input type="button" class="irobutton" id="create_api_token" value="アクセストークン発行">
<?php } elseif ($userData['role'] === 'ice') { ?>
<p>アクセストークンはアカウントが凍結されているため発行できません。</p>
<?php } else { ?>
<p>以下のボタンよりアクセストークンを削除できます。ボタンを押すとすぐに削除されますのでご注意ください。</p>
<input type="submit" class="irobutton" name="token_off_submit" value="アクセストークン削除">
<?php } ?>
<?php if(!(empty($apiData))){?>
<?php foreach ($apiData as $value) {
if(!(empty($value["scope"]))){
$client_scope_base = array_unique(array_map('trim', explode(",", $value["scope"])));
$client_scope = [];
foreach ($client_scope_base as $scope) {
if (GetAPIScopes($scope)) {
$client_scope[] = GetAPIScopes($scope);
} else {
$client_scope[] = "未知のスコープ ($scope)";
}
}
}else{
$client_scope[] = "権限なし";
}
?>
<div class="emoji_admin">
<details>
<summary><?php echo safetext($value["clientname"]);?></summary>
<hr>
<div class="p2">権限</div>
<?php
foreach ($client_scope as $view_scope) {
echo "<p>- " . safetext($view_scope) . "</p>";
}
?>
<hr>
<div class="p2">登録日時</div>
<p><?php echo date("Y年m月d日 H:i", strtotime(safetext($value["datetime"])));?></p>
<hr>
<div class="delbox">
<p>削除ボタンを押すとこのアクセストークンは削除されます。</p>
<input type="button" data-uniqid="<?php echo safetext($value["uniqid"]);?>" class="delbtn apitoken_del" value="削除">
</div>
</details>
</div>
<?php }?>
<?php }?>
<hr>
<div class="p2" id="help_me">もしものときは</div>
</form>
<div id="help_me_Modal" class="modal"> <div id="help_me_Modal" class="modal">
<div class="modal-content"> <div class="modal-content">
@@ -362,46 +363,156 @@ require('../logout/logout.php');
</form> </form>
</div> </div>
</div> </div>
<div id="create_api_token_Modal" class="modal">
<div class="modal-content">
<h1>アクセストークンの発行</h1>
<p>アクセストークンを使用するクライアント名と許可する権限を入力してください。</p>
<form id="create_api_token_Form">
<div class="p2">クライアント名</div>
<input type="text" id="client_name" class="inbox" placeholder="appname" value="">
<div class="p2">許可する権限</div>
<?php
$scopes = GetAPIScopes(null);
foreach ($scopes as $key => $label) { ?>
<div class="flexbox">
<div class="scope-item">
<input id="<?php echo safetext($key); ?>"
class="switch_input"
type="checkbox"
name="scopes[]"
value="<?php echo safetext($key); ?>" />
<label for="<?php echo safetext($key); ?>" class="switch_label"></label>
</div>
<div class="scope_desc"><?php echo safetext($label); ?></div>
</div>
<?php }; ?>
<div class="btn_area">
<input type="button" id="create_api_sendButton" class="fbtn_no" value="次へ">
<input type="button" id="create_api_cancelButton" class="fbtn" value="キャンセル">
</div>
</form>
<div class="p2">生成されたアクセストークンのURL</div>
<div id="auth-url-box" class="inbox">https://</div>
</div>
</div>
</div>
</main> </main>
<?php require('../require/rightbox.php');?> <?php require('../require/rightbox.php'); ?>
<?php require('../require/botbox.php');?> <?php require('../require/botbox.php'); ?>
<?php require('../require/noscript_modal.php');?> <?php require('../require/noscript_modal.php'); ?>
<?php require('../require/tutorial.php');?> <?php require('../require/tutorial.php'); ?>
</body> </body>
</html> </html>
<script> <script>
$(document).ready(function() { $(document).ready(function() {
$('#tutorial').on('click', function() { $('#tutorial').on('click', function() {
$(".tutorial_background").show(); $(".tutorial_background").show();
});
var modal = document.getElementById('help_me_Modal');
var cancelButton = document.getElementById('cancelButton');
var modalMain = $('.modal-content');
$('#help_me').on('click', function() {
modal.style.display = 'block';
modalMain.addClass("slideUp");
modalMain.removeClass("slideDown");
cancelButton.addEventListener('click', () => { // 追加
modalMain.removeClass("slideUp");
modalMain.addClass("slideDown");
window.setTimeout(function() {
modal.style.display = 'none';
}, 150);
});
});
$(function() {
$("input").keydown(function(e) {
if ((e.which && e.which === 13) || (e.keyCode && e.keyCode === 13)) {
return false;
} else {
return true;
}
});
});
$('#create_api_token').on('click', function() {
$("#create_api_token_Modal").show();
$("#create_api_token_Modal").children(".modal-content").addClass("slideUp");
$("#create_api_token_Modal").children(".modal-content").removeClass("slideDown");
$('#create_api_cancelButton').on('click', function() {
$("#create_api_token_Modal").children(".modal-content").removeClass("slideUp");
$("#create_api_token_Modal").children(".modal-content").addClass("slideDown");
window.setTimeout(function() {
$("#create_api_token_Modal").hide();
}, 150);
});
});
$('#create_api_token_Form').change(function() {
const uwuzuDomain = "https://<?php echo safetext($domain);?>"; // ← あなたのドメインに変更
const sessionId = self.crypto.randomUUID();
const clientName = $('#client_name').val() || "uwuzu_client";
const about = "これはAPIトークンの取得用URL認証ページです!";
const callback = "https://<?php echo safetext($domain);?>/others/token.php?session=" + encodeURIComponent(sessionId);
const icon = "<?php echo safetext($serversettings["serverinfo"]["server_icon"]); ?>"
// チェックされているscopeの値を収集
const scopes = [];
$('input[name="scopes[]"]:checked').each(function() {
scopes.push($(this).val());
});
const scopeStr = scopes.join(',');
const authUrl = `${uwuzuDomain}/api/auth?session=${encodeURIComponent(sessionId)}&client=${encodeURIComponent(clientName)}&scope=${encodeURIComponent(scopeStr)}&icon=${encodeURIComponent(icon)}&about=${encodeURIComponent(about)}&callback=${encodeURIComponent(callback)}`;
$('#auth-url-box').text(authUrl);
$('#auth-link').attr('href', authUrl);
$('#create_api_sendButton').on('click', function() {
window.location.href = authUrl;
});
});
var isSending = false;
var userid = "<?php echo safetext($userid); ?>";
var account_id = "<?php echo safetext($loginid); ?>";
$('.apitoken_del').on('click', function() {
if (isSending) return;
isSending = true;
const button = $(this);
const uniqid = button.data('uniqid');
const parentDiv = button.closest('.emoji_admin');
$.ajax({
url: '../function/delete_apitoken.php',
type: 'POST',
data: { uniqid: uniqid, userid: userid, account_id: account_id },
dataType: 'json',
success: function(response) {
if(response.success == true){
parentDiv.remove();
view_notify("アクセストークンを削除しました!");
isSending = false;
}else{
view_notify(response.error);
isSending = false;
}
},
error: function(xhr, status, error) {
view_notify("削除に失敗しました。");
isSending = false;
}
});
});
}); });
var modal = document.getElementById('help_me_Modal');
var cancelButton = document.getElementById('cancelButton');
var modalMain = $('.modal-content');
$('#help_me').on('click', function() {
modal.style.display = 'block';
modalMain.addClass("slideUp");
modalMain.removeClass("slideDown");
cancelButton.addEventListener('click', () => { // 追加
modalMain.removeClass("slideUp");
modalMain.addClass("slideDown");
window.setTimeout(function(){
modal.style.display = 'none';
}, 150);
});
});
$(function(){
$("input"). keydown(function(e) {
if ((e.which && e.which === 13) || (e.keyCode && e.keyCode === 13)) {
return false;
} else {
return true;
}
});
});
});
</script> </script>
+36 -20
View File
@@ -1,4 +1,5 @@
<?php <?php
$domain = $_SERVER['HTTP_HOST'];
$serversettings_file = "../server/serversettings.ini"; $serversettings_file = "../server/serversettings.ini";
$serversettings = parse_ini_file($serversettings_file, true); $serversettings = parse_ini_file($serversettings_file, true);
@@ -28,11 +29,6 @@ $stmt = null;
$res = null; $res = null;
$option = null; $option = null;
$userid = safetext($_SESSION['userid']);
$token = safetext($_SESSION['token']);
try { try {
$option = array( $option = array(
@@ -63,6 +59,30 @@ if($is_login === false){
$myfollowlist = safetext($is_login["follow"]); $myfollowlist = safetext($is_login["follow"]);
$is_Admin = safetext($is_login["admin"]); $is_Admin = safetext($is_login["admin"]);
} }
if(isset($_GET["session"])){
$session_id = safetext($_GET["session"]);
$url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . "/api/token/get?session=" . $session_id;
$options = array(
'http' => array(
'method'=> 'GET',
'header'=> 'Content-type: application/json; charset=UTF-8'
)
);
$context = stream_context_create($options);
$get_data = json_decode(file_get_contents($url, false,$context), true);
if(isset($get_data["token"])){
$API_token = $get_data["token"];
} else {
$API_token = "";
$error_message[] = "アクセストークンの取得に失敗しました。";
}
} else {
$session_id = "";
}
$notiQuery = $pdo->prepare("SELECT COUNT(*) as notification_count FROM notification WHERE touserid = :userid AND userchk = 'none'"); $notiQuery = $pdo->prepare("SELECT COUNT(*) as notification_count FROM notification WHERE touserid = :userid AND userchk = 'none'");
$notiQuery->bindValue(':userid', $userid); $notiQuery->bindValue(':userid', $userid);
$notiQuery->execute(); $notiQuery->execute();
@@ -85,7 +105,7 @@ require('../logout/logout.php');
<script src="../js/console_notice.js"></script> <script src="../js/console_notice.js"></script>
<link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="../favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="../favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="../favicon/icon-192x192.png">
<title>アクセストークン発行完了 - <?php echo safetext($serversettings["serverinfo"]["server_name"]);?></title> <title>アクセストークン発行 - <?php echo safetext($serversettings["serverinfo"]["server_name"]);?></title>
</head> </head>
@@ -102,21 +122,17 @@ require('../logout/logout.php');
<?php endif; ?> <?php endif; ?>
<div class="emojibox"> <div class="emojibox">
<h1>アクセストークン発行完了</h1> <h1>アクセストークン発行</h1>
<?php if( !empty($error_message) ): ?>
<ul class="errmsg">
<?php foreach( $error_message as $value ): ?>
<p> <?php echo $value; ?></p>
<?php endforeach; ?>
</ul>
<?php endif; ?>
<div class="formarea"> <div class="formarea">
<p>発行完了!以下のアクセストークンでこのアカウント(<?php echo $userid?>)に投稿を行えます!</p> <?php if($session_id == ""){ ?>
<p>アクセストークンは以下のものです!</p> <p>アクセストークンを取得リクエストがされていません。</p>
<ul class="errmsg"> <?php } else { ?>
<p>以下のアクセストークンは絶対に他人に知られないように大切に保管してください!</p> <ul class="errmsg">
</ul> <p>以下のアクセストークンは絶対に他人に知られないように大切に保管してください!</p>
<p><?php echo safetext($token);?></p> </ul>
<p><?php echo safetext($API_token);?></p>
<?php }?>
</div> </div>
<a href="index" class="irobutton">戻る</a> <a href="index" class="irobutton">戻る</a>
+9 -4
View File
@@ -271,10 +271,15 @@ $(document).ready(function() {
dataType: 'json', dataType: 'json',
timeout: 300000, timeout: 300000,
success: function(response) { success: function(response) {
renderUeuses(response); if(renderUeuses(response)){
pageNumber++; pageNumber++;
isLoading = false; isLoading = false;
$("#loading").hide(); $("#loading").hide();
}else{
isLoading = false;
$("#loading").hide();
$("#error").show();
}
}, },
error: function(xhr, textStatus, errorThrown) { error: function(xhr, textStatus, errorThrown) {
isLoading = false; isLoading = false;
+4 -3
View File
@@ -42,8 +42,9 @@ daichimarukanaと一緒に開発したいよ~って人は私のHPからメー
(uwuzuはv1.3.0よりAGPLからUPULに変更されました。) (uwuzuはv1.3.0よりAGPLからUPULに変更されました。)
## 8. ロゴは誰が作ったのですか? ## 8. ロゴは誰が作ったのですか?
ロゴはまだない。 ロゴはともき(@tomoki3192)さんよりいただいたものを使用しています!
ロゴは下記のリンクよりuwuzuに関連しているコンテンツのみDLしてご利用いただけます。(uwuzuへ飛ぶリンクボタンなどはOK) 改めまして、この場を借りてご応募いただいた皆様に感謝申し上げます。
ロゴはUPULのもとご利用いただけます。
### 色付き ### 色付き
#img ../img/uwuzucolorlogo.svg #img ../img/uwuzucolorlogo.svg
@@ -97,4 +98,4 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
## 更新情報 ## 更新情報
編集者 : daichimarukana 編集者 : daichimarukana
最終更新日 : 2024/11/06 21:54 最終更新日 : 2025/08/05 0:45
+2 -2
View File
@@ -1,4 +1,4 @@
uwuzu uwuzu
1.5.4 1.6.0
2025/06/08 2025/08/05
daichimarukana,putonfps daichimarukana,putonfps
+66
View File
@@ -1,6 +1,72 @@
## リリースノートだぜぇぇぇぇぇぇい!!!!!!! ## リリースノートだぜぇぇぇぇぇぇい!!!!!!!
ここにはuwuzuの更新情報を載せてくぜぇ~!(いやまてテンションおかしいだろ...) ここにはuwuzuの更新情報を載せてくぜぇ~!(いやまてテンションおかしいだろ...)
## Version 1.6.0 (Hapuego)
2025/08/05
fix: ローディングに時間がかかっている際に、ユーズの表示の順番が狂ってしまう問題を修正しました。
fix: ロールの設定が不正な際にエラー表示以外のエラーが発生する問題を修正しました。
fix: ユーズ内のコードブロックで、テキストがはみ出してしまう問題を修正しました。
fix: 公式アカウントによるリユーズで、公式ロールのないアカウントのユーズに公式マークが付いてしまう問題を修正しました!
fix: 自分自身をフォローできてしまうおそれのある問題を修正
fix: 自分自身をブロックできてしまうおそれのある問題を修正
fix: メンション機能にて、ユーザーIDの大文字・小文字の表記揺れによって、正常に通知が送信されないおそれのある問題を修正しました!
fix: メンション取得APIにて正常にメンションが取得できない問題を修正しました!
これにより、uwuzuのDB内のueuseテーブルの構造に「mentions」(mediumtext)を追加する必要があります。
また、この修正により、このアップデート以前のメンション付きユーズに関しましては取得ができなくなります。
fix: IPブロック機能にてブロックされているIPアドレスからアクセスがあった際に正常にブロックされないおそれがある問題を修正しました!
fix: Botであることを表示する機能がタイムライン上で正常に動作していない問題を修正しました!
fix: フォロー解除APIでフォローをしてしまう問題を修正しました!
fix: ユニークIDの生成にあたって、重複のリスクが非常に高い問題を修正しました!
fix: ユーズ時にIDが重複するおそれがある問題を修正しました!
fix: 凍結されているユーザーをフォローできる・凍結されているユーザーからフォローできてしまうことにより、フォロー・フォロワーの整合性が保てなくなる問題を修正しました!
fix: ユーズのMarkdown機能にある、`||[ここにテキスト]|| (カーソルをのせて文字を表示)`機能で、絵文字など特殊文字やURL、メンションなどが隠れない問題を修正しました!
この修正にあたってのコードはYurai(@yurai-git)さんよりいただいたものを使用させていただきました。この場を借りて感謝申し上げます。
fix: エラーページで本来想定されない動作が起こる問題を修正しました。
chg: 凍結されているユーザーをフォローできないように仕様変更しました。
chg: UIを一部変更しました。
chg: 通知の表示プログラムをサーバーサイドからクライアントサイドへ移行しました!
new: uwuzuにロゴができました!
ロゴはともき(@tomoki3192)さんにいただきました!
応募された全員の方にこの場を借りて感謝申し上げます!
new: APIの発行システムを作成しました!
これにより、クライアントごとの詳細な権限設定と、ユーザーによるワンクリックでの認可が可能になりました!
APIトークンを求めるクライアントより、uwuzu上の/api/auth?session=[一意のセッションID]&client=[クライアント名]&scope=[要求権限一覧(,区切り)]を開くことで認証画面を表示し、
認可された場合にはAPIトークンが発行され、/api/token/get?session=[一意のセッションID]で認可したユーザー名、ユーザーID、APIトークンが返されます。
/api/token/get?session=[一意のセッションID]はセキュリティの観点から一度のみAPIキーを取得できます。(二度目以降はsession_invalidエラーとなります)
クライアントによる認証画面は、最大で以下の数まで要素を追加可能です。
- session=[一意のセッションID](必須)
- client=[クライアント名](必須)
- scope=[要求権限一覧(,区切り)](必須)
- about=[クライアントの説明]
- icon=[クライアントのアイコン画像のURL]
- callback=[認可後のコールバックURL]
従来のAPIキーも引き続きご利用いただけます。
これにより、uwuzuのDBに以下の内容でのapiテーブルの追加が必要となります。
- sysid(int):AUTO_INCREMENT:システムID
- uniqid(varchar(256)):指定なし:ユニークID
- userid(varchar(512)):指定なし:実行ユーザーID
- job(varchar(1024)):指定なし:ジョブ名
- step(varchar(256)):指定なし:ステップ名
- status(varchar(256)):指定なし:ステータス
- datetime(datetime):指定なし:ジョブ作成日時
new: 通知APIを追加しました!
/api/me/notification/よりご利用いただけます。
また、通知の既読は/api/me/notification/readよりご利用いただけます(呼び出すとすべての通知が既読になります)
new: アカウント設定変更APIを追加しました!
/api/me/settings/よりご利用いただけます。
new: ブックマーク取得APIを追加しました!
/api/ueuse/bookmark/よりご利用いただけます。
new: いいねなどの通知の送信のキャンセル機能を実装しました!
このアップデート後に行われたいいねに対し、いいねを外すといいね時に送信された通知が削除されます。
今後、この他の通知要素にも実装予定です。
なお、このアップデートによりuwuzuのDB内のnotificationテーブルの構造に「notificationid」(varchar(512))を追加する必要があります。
new: ActivityPubのリモートユーザーのプロフィール・投稿を見られるようになりました!
なお、フォローやいいねなど、諸々の操作は行えません。
閲覧は通常のユーザーページのURL(/@userid)に@domainを追加してください。
del: 従来のAPIアクセストークンの発行機能を削除しました!
uwuzu_database.sqlは更新済みです。
## Version 1.5.4 (Combeny) ## Version 1.5.4 (Combeny)
2025/06/08 2025/06/08
fix: uwuzuのセットアップ時にエラーが発生して進めなくなる問題を修正しました。 fix: uwuzuのセットアップ時にエラーが発生して進めなくなる問題を修正しました。
+11 -1
View File
@@ -113,6 +113,16 @@ if( !empty($pdo) ) {
}else{ }else{
$userData['headname'] = "../" . $userData['headname']; $userData['headname'] = "../" . $userData['headname'];
} }
$apitokenQuery = $pdo->prepare("SELECT 1 FROM api WHERE userid = :userid LIMIT 1");
$apitokenQuery->bindValue(':userid', $userid);
$apitokenQuery->execute();
if ($apitokenQuery->fetch()) {
$is_allow_bot = true;
} else {
$is_allow_bot = false;
}
} }
@@ -548,7 +558,7 @@ $pdo = null;
<textarea id="profile" type="text" placeholder="" class="inbox" name="profile" value=""><?php if( !empty($userData['profile']) ){ echo safetext( $userData['profile']); } ?></textarea> <textarea id="profile" type="text" placeholder="" class="inbox" name="profile" value=""><?php if( !empty($userData['profile']) ){ echo safetext( $userData['profile']); } ?></textarea>
</div> </div>
<?php if(!empty($userData['token'])){?> <?php if(!empty($userData['token']) || $is_allow_bot === true){?>
<p>このアカウントがBotであることを公開する</p> <p>このアカウントがBotであることを公開する</p>
<div class="switch_button"> <div class="switch_button">
+15 -21
View File
@@ -23,7 +23,12 @@ if(safetext($serversettings["serverinfo"]["server_activitypub"]) == "true"){
$error_message[] = $e->getMessage(); $error_message[] = $e->getMessage();
} }
$ueuse = safetext($_GET['ueuse']); if(isset($_GET['id']) && !empty($_GET['id'])){
$ueuse = safetext($_GET['id']);
} else {
header("HTTP/1.1 400 Bad Request");
exit;
}
if( !empty($pdo) ) { if( !empty($pdo) ) {
@@ -54,32 +59,21 @@ if(safetext($serversettings["serverinfo"]["server_activitypub"]) == "true"){
$value["sensitive"] = false; $value["sensitive"] = false;
} }
$orderedItem = array( $orderedItem = array(
"type" => "Note",
"@context" => "https://www.w3.org/ns/activitystreams", "@context" => "https://www.w3.org/ns/activitystreams",
"id" => "https://" . $domain . "/ueuse/activity/?ueuse=" . $value["uniqid"], "id" => "https://" . $domain . "/ueuse/activity/?id=" . $value["uniqid"],
"actor" => "https://" . $domain . "/actor/?actor=@" . $value["account"], "url" => "https://" . $domain . "/ueuse/activity/?id=" . $value["uniqid"],
"type" => "Create",
"published" => date(DATE_ATOM, strtotime($value["datetime"])), "published" => date(DATE_ATOM, strtotime($value["datetime"])),
"to" => [ "to" => [
"https://" . $domain . "/followers", "https://" . $domain . "/followers",
"https://www.w3.org/ns/activitystreams#Public", "https://www.w3.org/ns/activitystreams#Public",
], ],
"object" => array( "attributedTo" => "https://" . $domain . "/@" . $value["account"],
"type" => "Note", "content" => nl2br($value["ueuse"]),
"@context" => "https://www.w3.org/ns/activitystreams", "inReplyTo" => null,
"id" => "https://" . $domain . "/ueuse/activity/?ueuse=" . $value["uniqid"], "attachment" => [],
"url" => "https://" . $domain . "/ueuse/activity/?ueuse=" . $value["uniqid"], "sensitive" => $value["sensitive"],
"published" => date(DATE_ATOM, strtotime($value["datetime"])), "tag" => [],
"to" => [
"https://" . $domain . "/followers",
"https://www.w3.org/ns/activitystreams#Public",
],
"attributedTo" => "https://" . $domain . "/@" . $value["account"],
"content" => nl2br($value["ueuse"]),
"inReplyTo" => null,
"attachment" => [],
"sensitive" => $value["sensitive"],
"tag" => [],
),
); );
$orderedItems[] = $orderedItem; $orderedItems[] = $orderedItem;
+9 -4
View File
@@ -344,10 +344,15 @@ $(document).ready(function() {
dataType: 'json', dataType: 'json',
timeout: 300000, timeout: 300000,
success: function(response) { success: function(response) {
renderUeuses(response, ueuseid); if(renderUeuses(response)){
pageNumber++; pageNumber++;
isLoading = false; isLoading = false;
$("#loading").hide(); $("#loading").hide();
}else{
isLoading = false;
$("#loading").hide();
$("#error").show();
}
}, },
error: function(xhr, textStatus, errorThrown) { error: function(xhr, textStatus, errorThrown) {
isLoading = false; isLoading = false;
+8 -6
View File
@@ -1,13 +1,12 @@
<?php <?php
require('db.php'); require_once("function/function.php");
require("function/function.php");
$serversettings_file = "server/serversettings.ini"; $serversettings_file = __DIR__."/server/serversettings.ini";
$serversettings = parse_ini_file($serversettings_file, true); $serversettings = parse_ini_file($serversettings_file, true);
//------------------------ //------------------------
$serverinfofile = 'server/info.txt'; $serverinfofile = __DIR__.'/server/info.txt';
$serverinfo = file_get_contents($serverinfofile); $serverinfo = file_get_contents($serverinfofile);
//------------------------------------- //-------------------------------------
@@ -16,7 +15,7 @@ $domain = $_SERVER['HTTP_HOST'];
//------------------------ //------------------------
$softwarefile = "server/uwuzuinfo.txt"; $softwarefile = __DIR__."/server/uwuzuinfo.txt";
$softwaredata = file_get_contents($softwarefile); $softwaredata = file_get_contents($softwarefile);
$softwaredata = explode( "\n", $softwaredata ); $softwaredata = explode( "\n", $softwaredata );
@@ -40,6 +39,9 @@ if(isset($_GET['errcode']) || isset($_GET['browser']) || isset($_GET['os']) || i
$ssl = "NULL"; $ssl = "NULL";
$block = "NULL"; $block = "NULL";
} }
if(isset($fron_uwuzu_errcode)){
$errcode = $fron_uwuzu_errcode;
}
if($errcode == "UNSUPPORTED_BROWSER"){ if($errcode == "UNSUPPORTED_BROWSER"){
$errabout = "対応していないブラウザです。"; $errabout = "対応していないブラウザです。";
@@ -62,7 +64,7 @@ if($errcode == "UNSUPPORTED_BROWSER"){
<html lang="ja"> <html lang="ja">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="css/unsupported.css"> <link rel="stylesheet" href="/css/unsupported.css">
<link rel="apple-touch-icon" type="image/png" href="favicon/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" type="image/png" href="favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" href="favicon/icon-192x192.png"> <link rel="icon" type="image/png" href="favicon/icon-192x192.png">
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
+51 -13
View File
@@ -1,21 +1,28 @@
{ {
"software": "uwuzu", "software": "uwuzu",
"version": "1.5.4", "version": "1.6.0",
"release_date": "2025/06/08", "release_date": "2025/08/05",
"release_notes": "このアップデートにはユーズのMarkdownの解析に失敗する問題の修正やuwuzuのセットアップが行えなくなってしまう問題の修正が含まれます!詳細はリリースノートをご覧ください。", "release_notes": "このアップデートにはAPIの大幅強化や様々なバグの修正が含まれます!詳細はリリースノートをご覧ください。",
"notices": "アップデート前にデータのバックアップを行うことをおすすめします!\nまた、アップデート後はキャッシュクリアをお忘れなく!", "notices": "このアップデートには実行前にSQL構造の更新が必要です。\nまた、このアップデート前にデータのバックアップを行うことをおすすめします!\nアップデート後はキャッシュクリアをお忘れなく!",
"files": { "files": {
"overwrite": [ "overwrite": [
"/.htaccess",
"/.well-known/host-meta/index.php",
"/.well-known/nodeinfo/index.php",
"/.well-known/webfinger/index.php", "/.well-known/webfinger/index.php",
"/.well-known/webfinger.php",
"/.well-known/host-meta.php",
"/.well-known/nodeinfo.php",
"/actor/index.php", "/actor/index.php",
"/admin/addadmin.php", "/api/auth.php",
"/admin/index.php",
"/admin/setup_db_php.php",
"/admin/setup_uwuzu_db.php",
"/admin/success.php",
"/api/favorite/change.php", "/api/favorite/change.php",
"/api/favorite/get.php", "/api/favorite/get.php",
"/api/me/index.php", "/api/me/index.php",
"/api/me/notification/index.php",
"/api/me/notification/read.php",
"/api/me/settings/index.php",
"/api/token/get.php",
"/api/ueuse/bookmark/index.php",
"/api/ueuse/create.php", "/api/ueuse/create.php",
"/api/ueuse/delete.php", "/api/ueuse/delete.php",
"/api/ueuse/get.php", "/api/ueuse/get.php",
@@ -26,17 +33,48 @@
"/api/users/follow.php", "/api/users/follow.php",
"/api/users/index.php", "/api/users/index.php",
"/api/users/unfollow.php", "/api/users/unfollow.php",
"/api/v1/instance.php",
"/bookmark/bookmark.php",
"/css/home.css",
"/css/style.css",
"/errorpage/httperror.php",
"/function/delete_apitoken.php",
"/function/function.php", "/function/function.php",
"/js/nsfw_event.js", "/home/index.php",
"/js/unsupported.js", "/img/titleimg/2.png",
"/img/uwuzucolorlogo.svg",
"/img/uwuzuicon.png",
"/img/uwuzulogo.svg",
"/js/view_function.js", "/js/view_function.js",
"/others/cache_clear.php", "/nextpage/bookmarktimeline.php",
"/nextpage/followtimeline.php",
"/nextpage/foryoutimeline.php",
"/nextpage/localtimeline.php",
"/nextpage/notification.php",
"/nextpage/searchtimeline.php",
"/nextpage/ueusetimeline.php",
"/nextpage/userliketimeline.php",
"/nextpage/usermediatimeline.php",
"/nextpage/usertimeline.php",
"/notification/index.php",
"/others/index.php", "/others/index.php",
"/others/token.php",
"/search/index.php",
"/settings/index.php",
"/ueuse/index.php",
"/ueuse/activity/index.php",
"/user/index.php",
"/user/outbox/index.php",
"/uwuzu_error_code.txt",
"/unsupported.php",
"/check.php",
"/authlogin.php",
"/server/uwuzuabout.txt", "/server/uwuzuabout.txt",
"/server/uwuzuinfo.txt", "/server/uwuzuinfo.txt",
"/server/uwuzurelease.txt" "/server/uwuzurelease.txt"
], ],
"delete": [] "delete": [
]
} }
} }
+176 -114
View File
@@ -72,126 +72,167 @@ $notificationcount = $notiData['notification_count'];
if (!empty($pdo)) { if (!empty($pdo)) {
$uwuzuid2 = safetext(str_replace('@', '', $_GET['uwuzuid'])); $uwuzuid = safetext(str_replace('@', '', $_GET['userid']));
$is_local = true;
$uwuzuid = safetext(str_replace('@' . $domain, '', $uwuzuid2)); if(safetext($serversettings["serverinfo"]["server_activitypub"]) === "true"){
if(isset($_GET['domain'])){
$userQuery = $pdo->prepare("SELECT username, userid, profile, role, follower, blocklist FROM account WHERE userid = :userid"); $activity_domain = safetext(str_replace('@', '', $_GET['domain']));
$userQuery->bindValue(':userid', $uwuzuid);
$userQuery->execute();
$userData = $userQuery->fetch();
if(!($activity_domain == $domain)){
$domain_response = GetActivityPubUser($uwuzuid, $activity_domain);
if (empty($domain_response) || array_key_exists("error", $domain_response)) {
$userData = null;
} else {
$userData = $domain_response;
}
//var_dump($domain_response);
$is_local = false;
}else{
$activity_domain = $domain;
$is_local = true;
}
}else{
$activity_domain = $domain;
}
}else{
$activity_domain = $domain;
$is_local = true;
}
if($is_local == true){
$userQuery = $pdo->prepare("SELECT username, userid, profile, role, follower, blocklist FROM account WHERE userid = :userid");
$userQuery->bindValue(':userid', $uwuzuid);
$userQuery->execute();
$userData = $userQuery->fetch();
}
if (!empty($userData["userid"])) { if (!empty($userData["userid"])) {
if($is_local == true){
$roles = array_filter(explode(',', $userData["role"])); // カンマで区切られたロールを配列に分割
$rerole = $pdo->prepare("SELECT follow, follower,blocklist, username, userid, password, mailadds, profile, iconname, headname, role, datetime, other_settings FROM account WHERE userid = :userid");
$roles = array_filter(explode(',', $userData["role"])); // カンマで区切られたロールを配列に分割 $rerole->bindValue(':userid', $uwuzuid);
// SQL実行
$rerole = $pdo->prepare("SELECT follow, follower,blocklist, username, userid, password, mailadds, profile, iconname, headname, role, datetime, other_settings FROM account WHERE userid = :userid");
$rerole->bindValue(':userid', $uwuzuid);
// SQL実行
$rerole->execute();
$userdata = $rerole->fetch();
$roleDataArray = array();
foreach ($roles as $roleId) {
$rerole = $pdo->prepare("SELECT rolename, roleauth, rolecolor, roleeffect FROM role WHERE roleidname = :role");
$rerole->bindValue(':role', $roleId);
$rerole->execute(); $rerole->execute();
$roleDataArray[$roleId] = $rerole->fetch();
}
$isAIBlock = val_OtherSettings("isAIBlock", $userdata["other_settings"]); $userdata = $rerole->fetch();
//-------フォロー数--------- $roleDataArray = array();
$follow = $userdata['follow']; // コンマで区切られたユーザーIDを含む変数
// コンマで区切って配列に分割し、要素数を数える foreach ($roles as $roleId) {
$followIds = array_reverse(array_values(array_filter(explode(',', $follow)))); $rerole = $pdo->prepare("SELECT rolename, roleauth, rolecolor, roleeffect FROM role WHERE roleidname = :role");
$followCount = count($followIds); $rerole->bindValue(':role', $roleId);
$rerole->execute();
$follow_on_me = array_search($userid, $followIds); $roleDataArray[$roleId] = $rerole->fetch();
if ($follow_on_me !== false) {
$follow_yes = "フォローされています"; // worldを含む:6
} else {
$follow_yes = ""; // worldを含む:6
}
//-------フォロワー数---------
$follower = $userdata['follower']; // コンマで区切られたユーザーIDを含む変数
// コンマで区切って配列に分割し、要素数を数える
$followerIds = array_reverse(array_values(array_filter(explode(',', $follower))));
$followerCount = count($followerIds);
$profileText = safetext($userData['profile']);
$allueuse = $pdo->prepare("SELECT account FROM ueuse WHERE account = :userid");
$allueuse->bindValue(':userid', $uwuzuid);
$allueuse->execute();
$ueuse_cnt = $allueuse->rowCount();
//-------フォロワー取得---------
$follower_userdata = array();
if(!(empty($followerIds))){
// フォロワーのユーザーIDを $follower_userids 配列に追加
foreach ($followerIds as $follower_userid) {
$follower_userids[] = $follower_userid;
} }
// フォロワーのユーザー情報を取得 $isAIBlock = val_OtherSettings("isAIBlock", $userdata["other_settings"]);
foreach ($follower_userids as $follower_userid) { //-------フォロー数---------
$follower_userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, sacinfo FROM account WHERE userid = :userid"); $follow = $userdata['follow']; // コンマで区切られたユーザーIDを含む変数
$follower_userQuery->bindValue(':userid', $follower_userid);
$follower_userQuery->execute();
$follower_userinfo = $follower_userQuery->fetch();
if ($follower_userinfo) { // コンマで区切って配列に分割し、要素数を数える
// フォロワーのユーザー情報を $follower_userdata 配列に追加 $followIds = array_reverse(array_values(array_filter(explode(',', $follow))));
$follower_userdata[] = $follower_userinfo; $followCount = count($followIds);
$follow_on_me = array_search($userid, $followIds);
if ($follow_on_me !== false) {
$follow_yes = "フォローされています"; // worldを含む:6
} else {
$follow_yes = ""; // worldを含む:6
}
//-------フォロワー数---------
$follower = $userdata['follower']; // コンマで区切られたユーザーIDを含む変数
// コンマで区切って配列に分割し、要素数を数える
$followerIds = array_reverse(array_values(array_filter(explode(',', $follower))));
$followerCount = count($followerIds);
$profileText = safetext($userData['profile']);
$allueuse = $pdo->prepare("SELECT account FROM ueuse WHERE account = :userid");
$allueuse->bindValue(':userid', $uwuzuid);
$allueuse->execute();
$ueuse_cnt = $allueuse->rowCount();
//-------フォロワー取得---------
$follower_userdata = array();
if(!(empty($followerIds))){
// フォロワーのユーザーIDを $follower_userids 配列に追加
foreach ($followerIds as $follower_userid) {
$follower_userids[] = $follower_userid;
}
// フォロワーのユーザー情報を取得
foreach ($follower_userids as $follower_userid) {
$follower_userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, sacinfo FROM account WHERE userid = :userid");
$follower_userQuery->bindValue(':userid', $follower_userid);
$follower_userQuery->execute();
$follower_userinfo = $follower_userQuery->fetch();
if ($follower_userinfo) {
// フォロワーのユーザー情報を $follower_userdata 配列に追加
$follower_userdata[] = $follower_userinfo;
}
} }
} }
}
//-------フォロー取得--------- //-------フォロー取得---------
$follow_userdata = array(); $follow_userdata = array();
if(!(empty($followIds))){ if(!(empty($followIds))){
foreach ($followIds as $follow_userid) { foreach ($followIds as $follow_userid) {
$follow_userids[] = $follow_userid; $follow_userids[] = $follow_userid;
} }
foreach ($follow_userids as $follow_userid) { foreach ($follow_userids as $follow_userid) {
$follow_userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, sacinfo FROM account WHERE userid = :userid"); $follow_userQuery = $pdo->prepare("SELECT username, userid, iconname, headname, sacinfo FROM account WHERE userid = :userid");
$follow_userQuery->bindValue(':userid', $follow_userid); $follow_userQuery->bindValue(':userid', $follow_userid);
$follow_userQuery->execute(); $follow_userQuery->execute();
$follow_userinfo = $follow_userQuery->fetch(); $follow_userinfo = $follow_userQuery->fetch();
if ($follow_userinfo) { if ($follow_userinfo) {
// フォロワーのユーザー情報を $follower_userdata 配列に追加 // フォロワーのユーザー情報を $follower_userdata 配列に追加
$follow_userdata[] = $follow_userinfo; $follow_userdata[] = $follow_userinfo;
}
} }
} }
}
if(filter_var($userdata['iconname'], FILTER_VALIDATE_URL)){ if(filter_var($userdata['iconname'], FILTER_VALIDATE_URL)){
$userdata['iconname'] = $userdata['iconname']; $userdata['iconname'] = $userdata['iconname'];
}else{ }else{
$userdata['iconname'] = "../" . $userdata['iconname']; $userdata['iconname'] = "../" . $userdata['iconname'];
} }
if(filter_var($userdata['headname'], FILTER_VALIDATE_URL)){ if(filter_var($userdata['headname'], FILTER_VALIDATE_URL)){
$userdata['headname'] = $userdata['headname']; $userdata['headname'] = $userdata['headname'];
}else{ }else{
$userdata['headname'] = "../" . $userdata['headname']; $userdata['headname'] = "../" . $userdata['headname'];
}
}elseif($userData != null){
$userdata = $userData;
$roles = array("user");
foreach ($roles as $roleId) {
$rerole = $pdo->prepare("SELECT rolename, roleauth, rolecolor, roleeffect FROM role WHERE roleidname = :role");
$rerole->bindValue(':role', $roleId);
$rerole->execute();
$roleDataArray[$roleId] = $rerole->fetch();
}
$isAIBlock = false;
$profileText = $userData["profile"];
$ueuse_cnt = "zero";
$followCount = "zero";
$followerCount = "zero";
} }
} else { } else {
$userData["userid"] = "none"; $userData["userid"] = "none";
$userData['username'] = "でふぉると"; $userData['username'] = "でふぉると";
@@ -345,7 +386,7 @@ $pdo = null;
<div class="icon"> <div class="icon">
<img src="<?php echo safetext($userdata['iconname']); ?>"> <img src="<?php echo safetext($userdata['iconname']); ?>">
<h2><?php echo replaceProfileEmojiImages(safetext($userData['username'])); ?></h2> <h2><?php echo replaceProfileEmojiImages(safetext($userData['username'])); ?></h2>
<p>@<?php echo safetext($userData['userid']); ?><!--<span>@<?php /*echo safetext($domain); */ ?></span>--></p> <p>@<?php echo safetext($userData['userid']); ?><?php if(safetext($serversettings["serverinfo"]["server_activitypub"]) === "true"){echo "<span>@".safetext($activity_domain)."</span>";} ?></p>
</div> </div>
<div class="roleboxes"> <div class="roleboxes">
@@ -389,6 +430,7 @@ $pdo = null;
<?php } ?> <?php } ?>
</div> </div>
<?php if($is_local == true){?>
<div class="fzone"> <div class="fzone">
<div class="time"> <div class="time">
<p><?php echo date('Y年m月d日 H:i', strtotime($userdata['datetime'])); ?>からuwuzuを利用しています。</p> <p><?php echo date('Y年m月d日 H:i', strtotime($userdata['datetime'])); ?>からuwuzuを利用しています。</p>
@@ -430,7 +472,7 @@ $pdo = null;
</div> </div>
<?php } else { ?> <?php } else { ?>
<?php if (!(in_array(safetext($userData['userid']), explode(",", $myblocklist)))) { ?> <?php if (!(in_array(safetext($userData['userid']), explode(",", $myblocklist)))) {?>
<form method="post"> <form method="post">
<div class="follow"> <div class="follow">
<?php <?php
@@ -440,8 +482,10 @@ $pdo = null;
// フォロー済みの場合はフォロー解除ボタンを表示 // フォロー済みの場合はフォロー解除ボタンを表示
echo '<input type="button" id="openModalButton" class="fbtn_un" name="unfollow" value="フォロー解除">'; echo '<input type="button" id="openModalButton" class="fbtn_un" name="unfollow" value="フォロー解除">';
} else { } else {
// 未フォローの場合はフォローボタンを表示 if (!(safetext($userdata['role']) === "ice")) {
echo '<input type="submit" class="fbtn" name="follow" value="フォロー">'; // 未フォローの場合はフォローボタンを表示
echo '<input type="submit" class="fbtn" name="follow" value="フォロー">';
}
} }
} }
?> ?>
@@ -459,6 +503,8 @@ $pdo = null;
}; ?></p> }; ?></p>
</div> </div>
</div> </div>
<?php } ?>
<?php } ?> <?php } ?>
<?php if (!($role === "ice")) { ?> <?php if (!($role === "ice")) { ?>
@@ -679,18 +725,24 @@ $pdo = null;
$("#loading").show(); $("#loading").show();
$("#error").hide(); $("#error").hide();
var uwuzuid = '<?php echo $uwuzuid; ?>'; var uwuzuid = '<?php echo $uwuzuid; ?>';
var activity_domain = '<?php echo $activity_domain; ?>';
if (mode == 'allueuse') { if (mode == 'allueuse') {
$.ajax({ $.ajax({
url: '../nextpage/usertimeline.php', url: '../nextpage/usertimeline.php',
method: 'POST', method: 'POST',
data: { page: pageNumber, userid: userid, account_id: account_id, id: uwuzuid,}, data: { page: pageNumber, userid: userid, account_id: account_id, id: uwuzuid, activity_domain: activity_domain},
dataType: 'json', dataType: 'json',
timeout: 300000, timeout: 300000,
success: function(response) { success: function(response) {
renderUeuses(response); if(renderUeuses(response)){
pageNumber++; pageNumber++;
isLoading = false; isLoading = false;
$("#loading").hide(); $("#loading").hide();
}else{
isLoading = false;
$("#loading").hide();
$("#error").show();
}
}, },
error: function(xhr, textStatus, errorThrown) { error: function(xhr, textStatus, errorThrown) {
isLoading = false; isLoading = false;
@@ -702,14 +754,19 @@ $pdo = null;
$.ajax({ $.ajax({
url: '../nextpage/usermediatimeline.php', url: '../nextpage/usermediatimeline.php',
method: 'POST', method: 'POST',
data: { page: pageNumber, userid: userid, account_id: account_id, id: uwuzuid,}, data: { page: pageNumber, userid: userid, account_id: account_id, id: uwuzuid, activity_domain: activity_domain},
dataType: 'json', dataType: 'json',
timeout: 300000, timeout: 300000,
success: function(response) { success: function(response) {
renderUeuses(response); if(renderUeuses(response)){
pageNumber++; pageNumber++;
isLoading = false; isLoading = false;
$("#loading").hide(); $("#loading").hide();
}else{
isLoading = false;
$("#loading").hide();
$("#error").show();
}
}, },
error: function(xhr, textStatus, errorThrown) { error: function(xhr, textStatus, errorThrown) {
isLoading = false; isLoading = false;
@@ -721,14 +778,19 @@ $pdo = null;
$.ajax({ $.ajax({
url: '../nextpage/userliketimeline.php', url: '../nextpage/userliketimeline.php',
method: 'POST', method: 'POST',
data: { page: pageNumber, userid: userid, account_id: account_id, id: uwuzuid,}, data: { page: pageNumber, userid: userid, account_id: account_id, id: uwuzuid, activity_domain: activity_domain},
dataType: 'json', dataType: 'json',
timeout: 300000, timeout: 300000,
success: function(response) { success: function(response) {
renderUeuses(response); if(renderUeuses(response)){
pageNumber++; pageNumber++;
isLoading = false; isLoading = false;
$("#loading").hide(); $("#loading").hide();
}else{
isLoading = false;
$("#loading").hide();
$("#error").show();
}
}, },
error: function(xhr, textStatus, errorThrown) { error: function(xhr, textStatus, errorThrown) {
isLoading = false; isLoading = false;
+92 -85
View File
@@ -5,107 +5,114 @@ blockedIP($_SERVER['REMOTE_ADDR']);
$serversettings_file = "../../server/serversettings.ini"; $serversettings_file = "../../server/serversettings.ini";
$serversettings = parse_ini_file($serversettings_file, true); $serversettings = parse_ini_file($serversettings_file, true);
if(safetext($serversettings["serverinfo"]["server_activitypub"]) === "true"){ if (safetext($serversettings["serverinfo"]["server_activitypub"]) === "true") {
header("Content-Type: application/activity+json; charset=utf-8"); header("Content-Type: application/activity+json; charset=utf-8");
header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Origin: *");
$domain = $_SERVER['HTTP_HOST']; $domain = $_SERVER['HTTP_HOST'];
require('../../db.php');
// データベースに接続
try { try {
$option = array( $pdo = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_MULTI_STATEMENTS => false PDO::MYSQL_ATTR_MULTI_STATEMENTS => false
); ]);
$pdo = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, $option);
} catch (PDOException $e) { } catch (PDOException $e) {
// 接続エラーのときエラー内容を取得する http_response_code(500);
$error_message[] = $e->getMessage(); echo json_encode(['error' => $e->getMessage()]);
exit;
} }
$user = safetext($_GET['actor']); $user = safetext($_GET['actor'] ?? '');
$userid = str_replace('@', '', str_replace('@' . $domain, '', $user));
$page = isset($_GET['page']) ? (int)$_GET['page'] : 0;
$itemsPerPage = 10;
$offset = ($page > 0 ? ($page - 1) : 0) * $itemsPerPage;
$userid = str_replace('@','', str_replace('@'.$domain.'', '', $user)); $dbh = new PDO('mysql:charset=utf8mb4;dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS, [
if( !empty($pdo) ) { PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
$dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ]);
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
));
$userQuery = $dbh->prepare("SELECT username, userid, profile, follower, iconname FROM account WHERE userid = :userid");
$userQuery->bindValue(':userid', $userid);
$userQuery->execute();
$userData = $userQuery->fetch();
$messageQuery = $dbh->prepare("SELECT * FROM ueuse WHERE account = :userid AND rpuniqid = '' ORDER BY datetime DESC"); $userQuery = $dbh->prepare("SELECT * FROM account WHERE userid = :userid");
$messageQuery->bindValue(':userid', $userid); $userQuery->bindValue(':userid', $userid);
$messageQuery->execute(); $userQuery->execute();
$message_array = $messageQuery->fetchAll(); $userData = $userQuery->fetch();
$messages = array(); if (!$userData) {
foreach ($message_array as $row) { echo json_encode(["type" => "user_not_found"]);
$messages[] = $row; exit;
}
} }
if (!empty($userData)) { // 全投稿数取得
if (!empty($messages)) { $countQuery = $dbh->prepare("SELECT COUNT(*) as cnt FROM ueuse WHERE account = :userid AND rpuniqid = ''");
$orderedItems = array(); $countQuery->bindValue(':userid', $userid);
$countQuery->execute();
foreach ($messages as $value) { $totalItems = (int)$countQuery->fetch()['cnt'];
$activity = array(
"type" => "Create", if ($page === 0) {
"id" => "https://" . $domain . "/ueuse/activity/?ueuse=" . $value["uniqid"], // OrderedCollectionfirstのみ)
"url" => "https://" . $domain . "/ueuse/activity/?ueuse=" . $value["uniqid"], echo json_encode([
"published" => date(DATE_ATOM, strtotime($value["datetime"])), "@context" => "https://www.w3.org/ns/activitystreams",
"to" => [ "id" => "https://{$domain}/user/outbox/?actor=@{$userid}",
"https://www.w3.org/ns/activitystreams#Public", "type" => "OrderedCollection",
], "totalItems" => $totalItems,
"actor" => "https://" . $domain . "/actor/?actor=@" . $userid, "first" => "https://{$domain}/user/outbox/?actor=@{$userid}&page=1"
"object" => array( ], JSON_UNESCAPED_UNICODE);
"type" => "Note", exit;
"@context" => "https://www.w3.org/ns/activitystreams", }
"id" => "https://" . $domain . "/!" . $value["uniqid"],
"url" => "https://" . $domain . "/!" . $value["uniqid"], // ページ投稿取得
"published" => date(DATE_ATOM, strtotime($value["datetime"])), $messageQuery = $dbh->prepare("SELECT * FROM ueuse WHERE account = :userid AND rpuniqid = '' ORDER BY datetime DESC LIMIT :offset, :limit");
"to" => [ $messageQuery->bindValue(':userid', $userid);
"https://www.w3.org/ns/activitystreams#Public", $messageQuery->bindValue(':offset', $offset, PDO::PARAM_INT);
], $messageQuery->bindValue(':limit', $itemsPerPage, PDO::PARAM_INT);
"attributedTo" => "https://" . $domain . "/@" . $value["account"], $messageQuery->execute();
"content" => "".nl2br($value["ueuse"])."", $messages = $messageQuery->fetchAll();
),
); $orderedItems = [];
foreach ($messages as $value) {
$orderedItems[] = $activity; $id = $value["uniqid"];
} $url = "https://{$domain}/ueuse/activity/?id={$id}";
$orderedItems[] = [
$item = array( "type" => "Create",
"type" => "OrderedCollection", "id" => $url,
"url" => $url,
"published" => date(DATE_ATOM, strtotime($value["datetime"])),
"to" => ["https://www.w3.org/ns/activitystreams#Public"],
"actor" => "https://{$domain}/actor/?actor=@{$userid}",
"object" => [
"type" => "Note",
"@context" => "https://www.w3.org/ns/activitystreams", "@context" => "https://www.w3.org/ns/activitystreams",
"id" => "https://" . $domain . "/user/outbox/?actor=@" . $userid . "&page=true", "id" => $url,
"summary" => "outbox of " . $userid, "url" => $url,
"totalItems" => count($messages), "published" => date(DATE_ATOM, strtotime($value["datetime"])),
"orderedItems" => $orderedItems, "to" => ["https://www.w3.org/ns/activitystreams#Public"],
); "attributedTo" => "https://{$domain}/@{$value["account"]}",
"content" => preg_replace('/\r\n/i', "", nl2br($value["ueuse"])),
echo json_encode($item, JSON_UNESCAPED_UNICODE); ]
} else { ];
$item = array( }
"type" => "item_not_found",
);
echo json_encode($item, JSON_UNESCAPED_UNICODE);
}
} else {
$item = array(
"type" => "user_not_found",
);
echo json_encode($item, JSON_UNESCAPED_UNICODE);
}
}else{ // prev/next リンク
$base_url = "https://{$domain}/user/outbox/?actor=@{$userid}";
$prev_page = $page > 1 ? $base_url . "&page=" . ($page - 1) : null;
$next_page = ($offset + $itemsPerPage < $totalItems) ? $base_url . "&page=" . ($page + 1) : null;
$response = [
"@context" => "https://www.w3.org/ns/activitystreams",
"id" => "{$base_url}&page={$page}",
"type" => "OrderedCollectionPage",
"partOf" => $base_url,
"totalItems" => $totalItems,
"orderedItems" => $orderedItems,
];
if ($prev_page) $response["prev"] = $prev_page;
if ($next_page) $response["next"] = $next_page;
echo json_encode($response, JSON_UNESCAPED_UNICODE);
} else {
header("HTTP/1.1 410 Gone"); header("HTTP/1.1 410 Gone");
} }
?> ?>
+34 -3
View File
@@ -3,7 +3,7 @@
-- https://www.phpmyadmin.net/ -- https://www.phpmyadmin.net/
-- --
-- ホスト: 127.0.0.1 -- ホスト: 127.0.0.1
-- 生成日時: 2025-05-03 15:26:28 -- 生成日時: 2025-08-05 05:53:23
-- サーバのバージョン: 10.4.32-MariaDB -- サーバのバージョン: 10.4.32-MariaDB
-- PHP のバージョン: 8.2.12 -- PHP のバージョン: 8.2.12
@@ -92,6 +92,23 @@ CREATE TABLE `ads` (
-- -------------------------------------------------------- -- --------------------------------------------------------
--
-- テーブルの構造 `api`
--
CREATE TABLE `api` (
`sysid` int(11) NOT NULL,
`uniqid` varchar(256) NOT NULL,
`userid` varchar(512) NOT NULL,
`token` varchar(1024) NOT NULL,
`scope` mediumtext NOT NULL,
`datetime` datetime NOT NULL,
`clientname` mediumtext NOT NULL,
`sessionid` varchar(512) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- --------------------------------------------------------
-- --
-- テーブルの構造 `emoji` -- テーブルの構造 `emoji`
-- --
@@ -193,7 +210,8 @@ CREATE TABLE `notification` (
`datetime` datetime NOT NULL, `datetime` datetime NOT NULL,
`userchk` varchar(32) NOT NULL, `userchk` varchar(32) NOT NULL,
`title` varchar(1024) NOT NULL, `title` varchar(1024) NOT NULL,
`category` varchar(256) NOT NULL `category` varchar(256) NOT NULL,
`notificationid` varchar(512) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- -------------------------------------------------------- -- --------------------------------------------------------
@@ -251,7 +269,8 @@ CREATE TABLE `ueuse` (
`abi` mediumtext NOT NULL, `abi` mediumtext NOT NULL,
`abidate` datetime NOT NULL, `abidate` datetime NOT NULL,
`nsfw` varchar(32) NOT NULL, `nsfw` varchar(32) NOT NULL,
`popularity` int(11) NOT NULL `popularity` int(11) NOT NULL,
`mentions` mediumtext NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- --
@@ -276,6 +295,12 @@ ALTER TABLE `actionlog`
ALTER TABLE `ads` ALTER TABLE `ads`
ADD PRIMARY KEY (`sysid`); ADD PRIMARY KEY (`sysid`);
--
-- テーブルのインデックス `api`
--
ALTER TABLE `api`
ADD PRIMARY KEY (`sysid`);
-- --
-- テーブルのインデックス `emoji` -- テーブルのインデックス `emoji`
-- --
@@ -358,6 +383,12 @@ ALTER TABLE `actionlog`
ALTER TABLE `ads` ALTER TABLE `ads`
MODIFY `sysid` int(11) NOT NULL AUTO_INCREMENT; MODIFY `sysid` int(11) NOT NULL AUTO_INCREMENT;
--
-- テーブルの AUTO_INCREMENT `api`
--
ALTER TABLE `api`
MODIFY `sysid` int(11) NOT NULL AUTO_INCREMENT;
-- --
-- テーブルの AUTO_INCREMENT `emoji` -- テーブルの AUTO_INCREMENT `emoji`
-- --
+2
View File
@@ -28,6 +28,7 @@ migration_bad_success - アカウントの移行後に移行の完了処理が
already_been_completed - 処理が既に完了している場合に表示されます。 already_been_completed - 処理が既に完了している場合に表示されます。
you_cant_it_to_yourself - 自分に対して行えない処理を行おうとした際に表示されます。 you_cant_it_to_yourself - 自分に対して行えない処理を行おうとした際に表示されます。
could_not_complete - 処理を完了できなかった場合に表示されます。 could_not_complete - 処理を完了できなかった場合に表示されます。
this_API_is_ws_only - WebsocketAPIがWebsocket以外の方法でアクセスされた場合に表示されます。
----------(UWUZU ERR CODE)---------- ----------(UWUZU ERR CODE)----------
FILE_DEKASUGUI_PHP_INI_KAKUNIN - php.iniで設定されているファイルサイズ上限を上回っている時に表示されます。 FILE_DEKASUGUI_PHP_INI_KAKUNIN - php.iniで設定されているファイルサイズ上限を上回っている時に表示されます。
@@ -144,6 +145,7 @@ DELETE_FILE_NOT_FOUND - アップデート作業時に、zipファイル内で
UPDATE_FILE_NOT_FOUND - アップデート作業時に、zipファイル内にあるはずの更新用のファイルが存在しなかった際に表示されます。 UPDATE_FILE_NOT_FOUND - アップデート作業時に、zipファイル内にあるはずの更新用のファイルが存在しなかった際に表示されます。
BAD_REQUEST - 不正なリクエストが送信されてきた際に表示されます。 BAD_REQUEST - 不正なリクエストが送信されてきた際に表示されます。
AUTH_INVALID - アカウントの認証に失敗した際に表示されます。
DON'T_TOUCH_SYSTEM_ROLE - システムロールをべたべた触ったり削除しようとしたりすると表示されます。 DON'T_TOUCH_SYSTEM_ROLE - システムロールをべたべた触ったり削除しようとしたりすると表示されます。