1
0
mirror of https://github.com/Daichimarukana/uwuzu.git synced 2026-06-05 03:24:41 +00:00

uwuzu v1.4.4 Funium

This commit is contained in:
Daichimarukana
2024-08-30 19:28:15 +09:00
parent b283b16553
commit a02c236e70
20 changed files with 578 additions and 279 deletions
+18 -8
View File
@@ -74,6 +74,7 @@ if($result2 > 0){
if( !empty($_POST['btn_submit']) ) { if( !empty($_POST['btn_submit']) ) {
$_SESSION['form_data'] = $_POST;
// 空白除去 // 空白除去
$username = safetext($_POST['username']); $username = safetext($_POST['username']);
@@ -88,6 +89,9 @@ if( !empty($_POST['btn_submit']) ) {
} }
$profile = safetext($_POST['profile']); $profile = safetext($_POST['profile']);
if( 1024 < mb_strlen($profile, 'UTF-8') ) {
$error_message[] = 'プロフィールは1024文字以内で入力してください。(INPUT_OVER_MAX_COUNT)';
}
if(safetext($serversettings["serverinfo"]["server_invitation"]) === "true"){ if(safetext($serversettings["serverinfo"]["server_invitation"]) === "true"){
$invitationcode = safetext($_POST['invitationcode']); $invitationcode = safetext($_POST['invitationcode']);
@@ -124,6 +128,7 @@ if( !empty($_POST['btn_submit']) ) {
// アップロードされたファイル情報 // アップロードされたファイル情報
$uploadedFile = $_FILES['image']; $uploadedFile = $_FILES['image'];
if(!(empty($uploadedFile['tmp_name']))){
if(check_mime($uploadedFile['tmp_name'])){ if(check_mime($uploadedFile['tmp_name'])){
// アップロードされたファイルの拡張子を取得 // アップロードされたファイルの拡張子を取得
$extension = pathinfo($uploadedFile['name'], PATHINFO_EXTENSION); $extension = pathinfo($uploadedFile['name'], PATHINFO_EXTENSION);
@@ -162,6 +167,9 @@ if( !empty($_POST['btn_submit']) ) {
}else{ }else{
$error_message[] = "使用できない画像形式です。(SORRY_FILE_HITAIOU)"; $error_message[] = "使用できない画像形式です。(SORRY_FILE_HITAIOU)";
} }
}else{
$error_message[] = "ファイルがアップロードできませんでした。(FILE_UPLOAD_DEKINAKATTA)";
}
} }
//----------------[header image]------------------------------- //----------------[header image]-------------------------------
@@ -309,7 +317,8 @@ if( !empty($_POST['btn_submit']) ) {
$role = "official"; $role = "official";
$admin = "yes"; $admin = "yes";
$hashpassword = password_hash($password, PASSWORD_DEFAULT); $hashpassword = password_hash($password, PASSWORD_DEFAULT);
$loginid = sha1(uniqid(mt_rand(), true)); $LoginIdBytes = random_bytes(64);
$loginid = hash('sha3-512', $LoginIdBytes);
// SQL作成 // SQL作成
$stmt = $pdo->prepare("INSERT INTO account (username, userid, password, loginid, mailadds, profile, iconname, headname, role, datetime, admin, encryption_ivkey) VALUES (:username, :userid, :password, :loginid, :mailadds, :profile, :iconname, :headname, :role, :datetime, :admin ,:encryption_ivkey)"); $stmt = $pdo->prepare("INSERT INTO account (username, userid, password, loginid, mailadds, profile, iconname, headname, role, datetime, admin, encryption_ivkey) VALUES (:username, :userid, :password, :loginid, :mailadds, :profile, :iconname, :headname, :role, :datetime, :admin ,:encryption_ivkey)");
@@ -366,6 +375,7 @@ if( !empty($_POST['btn_submit']) ) {
if ($res) { if ($res) {
// リダイレクト先のURLへ転送する // リダイレクト先のURLへ転送する
$_SESSION['form_data'] = array();
$_SESSION['userid'] = $userid; $_SESSION['userid'] = $userid;
$url = 'success'; $url = 'success';
header('Location: ' . $url, true, 303); header('Location: ' . $url, true, 303);
@@ -441,42 +451,42 @@ $pdo = null;
<div> <div>
<p>ユーザーネーム *</p> <p>ユーザーネーム *</p>
<div class="p2">プロフィールページに掲載され公開されます。<br>※サービス管理者が確認できます。</div> <div class="p2">プロフィールページに掲載され公開されます。<br>※サービス管理者が確認できます。</div>
<input id="username" placeholder="" class="inbox" type="text" name="username" value="<?php if( !empty($_SESSION['username']) ){ echo safetext( $_SESSION['username']); } ?>"> <input id="username" placeholder="" class="inbox" type="text" name="username" value="<?php if( !empty($_SESSION['form_data']['username']) ){ echo safetext($_SESSION['form_data']['username']); } ?>">
</div> </div>
<div> <div>
<p>ユーザーID *</p> <p>ユーザーID *</p>
<div class="p2">後から変更はできません。<br>プロフィールページに掲載され公開されます。<br>※サービス管理者が確認できます。</div> <div class="p2">後から変更はできません。<br>プロフィールページに掲載され公開されます。<br>※サービス管理者が確認できます。</div>
<input onInput="checkForm(this)" placeholder="" class="inbox" id="userid" type="text" name="userid" value="<?php if( !empty($_SESSION['userid']) ){ echo safetext( $_SESSION['userid']); } ?>"> <input onInput="checkForm(this)" placeholder="" class="inbox" id="userid" type="text" name="userid" value="<?php if( !empty($_SESSION['form_data']['userid']) ){ echo safetext($_SESSION['form_data']['userid']); } ?>">
</div> </div>
<!--アカウント関連--> <!--アカウント関連-->
<div> <div>
<p>パスワード *</p> <p>パスワード *</p>
<div class="p2">ログイン時に必要となります。<br>※サービス管理者が確認できません。</div> <div class="p2">ログイン時に必要となります。<br>※サービス管理者が確認できません。</div>
<input placeholder="" class="inbox" id="password" type="text" name="password" value="<?php if( !empty($_SESSION['password']) ){ echo safetext( $_SESSION['password']); } ?>"> <input placeholder="" class="inbox" id="password" type="text" name="password" value="<?php if( !empty($_SESSION['form_data']['password']) ){ echo safetext($_SESSION['form_data']['password']); } ?>">
<div class="p2" id="password_zxcvbn" style="display: none;"></div> <div class="p2" id="password_zxcvbn" style="display: none;"></div>
</div> </div>
<div> <div>
<p>パスワード再確認 *</p> <p>パスワード再確認 *</p>
<input placeholder="" class="inbox" oncopy="return false" onpaste="return false" oncontextmenu="return false" id="chkpass" type="text" style="-webkit-text-security:disc;" name="chkpass" value="<?php if( !empty($_SESSION['chkpass']) ){ echo safetext( $_SESSION['chkpass']); } ?>"> <input placeholder="" class="inbox" oncopy="return false" onpaste="return false" oncontextmenu="return false" id="chkpass" type="text" style="-webkit-text-security:disc;" name="chkpass" value="<?php if( !empty($_SESSION['form_data']['chkpass']) ){ echo safetext($_SESSION['form_data']['chkpass']); } ?>">
</div> </div>
<div> <div>
<p>メールアドレス</p> <p>メールアドレス</p>
<div class="p2">設定しておくとアカウント復旧に利用できます。<br>※サービス管理者が確認できます。</div> <div class="p2">設定しておくとアカウント復旧に利用できます。<br>※サービス管理者が確認できます。</div>
<input id="mailadds" type="text" placeholder="" class="inbox" name="mailadds" value="<?php if( !empty($_SESSION['mailadds']) ){ echo safetext( $_SESSION['mailadds']); } ?>"> <input id="mailadds" type="text" placeholder="" class="inbox" name="mailadds" value="<?php if( !empty($_SESSION['form_data']['mailadds']) ){ echo safetext($_SESSION['form_data']['mailadds']); } ?>">
</div> </div>
<!--プロフィール関連--> <!--プロフィール関連-->
<div> <div>
<p>プロフィール</p> <p>プロフィール</p>
<div class="p2">プロフィールページに掲載され公開されます。<br>※サービス管理者が確認できます。</div> <div class="p2">プロフィールページに掲載され公開されます。<br>※サービス管理者が確認できます。</div>
<input id="profile" type="text" placeholder="" class="inbox" name="profile" value="<?php if( !empty($_SESSION['profile']) ){ echo safetext( $_SESSION['profile']); } ?>"> <input id="profile" type="text" placeholder="" class="inbox" name="profile" value="<?php if( !empty($_SESSION['form_data']['profile']) ){ echo safetext($_SESSION['form_data']['profile']); } ?>">
</div> </div>
<?php if(safetext($serversettings["serverinfo"]["server_invitation"]) === "true"){?> <?php if(safetext($serversettings["serverinfo"]["server_invitation"]) === "true"){?>
<div> <div>
<p>招待コード</p> <p>招待コード</p>
<div class="p2">招待コードがないとこのサーバーには登録できません。</div> <div class="p2">招待コードがないとこのサーバーには登録できません。</div>
<input id="profile" type="text" placeholder="" class="inbox" name="invitationcode" value="<?php if( !empty($_SESSION['invitationcode']) ){ echo safetext( $_SESSION['invitationcode']); } ?>"> <input id="profile" type="text" placeholder="" class="inbox" name="invitationcode" value="<?php if( !empty($_SESSION['form_data']['invitationcode']) ){ echo safetext($_SESSION['form_data']['invitationcode']); } ?>">
</div> </div>
<input type="submit" class = "irobutton" name="btn_submit" value="登録"> <input type="submit" class = "irobutton" name="btn_submit" value="登録">
<?php }else{?> <?php }else{?>
+8 -1
View File
@@ -161,6 +161,13 @@ if(isset($_GET['migration_code'])) {
$ueuse_array = $ueuseQuery->fetchAll(); $ueuse_array = $ueuseQuery->fetchAll();
*/ */
if(!(empty($UserData))){ if(!(empty($UserData))){
if(!(empty($UserData["encryption_ivkey"]))){
$view_mailadds = DecryptionUseEncrKey($UserData["mailadds"], GenUserEnckey($UserData["datetime"]), $UserData["encryption_ivkey"]);
}else{
$view_mailadds = $UserData["mailadds"];
}
/* /*
if(!(empty($ueuse_array))){ if(!(empty($ueuse_array))){
foreach ($ueuse_array as $value) { foreach ($ueuse_array as $value) {
@@ -188,7 +195,7 @@ if(isset($_GET['migration_code'])) {
"user_icon" => (empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$domain."/".safetext($UserData["iconname"]), "user_icon" => (empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$domain."/".safetext($UserData["iconname"]),
"user_header" => (empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$domain."/".safetext($UserData["headname"]), "user_header" => (empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$domain."/".safetext($UserData["headname"]),
"user_profile" => safetext($UserData["profile"]), "user_profile" => safetext($UserData["profile"]),
"mail_adds" => safetext($UserData["mailadds"]), "mail_adds" => safetext($view_mailadds),
), ),
]; ];
+138 -3
View File
@@ -641,6 +641,11 @@ main h1{
font-weight: 900; font-weight: 900;
} }
.userheader .profile{
max-height: 25dvh;
overflow: scroll;
}
.userheader .profile p{ .userheader .profile p{
text-align: left; text-align: left;
margin-top: 12px; margin-top: 12px;
@@ -2894,6 +2899,47 @@ main h1{
color:var(--text-color); color:var(--text-color);
font-family: var(--Text-fonts), sans-serif; font-family: var(--Text-fonts), sans-serif;
} }
.formarea table{
width: 100%;
text-align: left;
font-size: 16px;
color:var(--text-color);
font-family: var(--Mono-fonts), sans-serif;
}
.formarea .emojipreview{
margin-left: auto;
margin-right: auto;
width: 50%;
height: fit-content;
display: flex;
justify-content: space-between;
}
.formarea .emojiimg{
margin-left: auto;
margin-right: auto;
text-align: center;
width: fit-content;
height: fit-content;
padding: 8px;
border-radius: 6px;
box-shadow:0 0px 24px 0 rgba(0, 0, 0, .1)
}
.formarea .light{
background-color: var(--ueuse-color);
}
.formarea .dark{
background-color: var(--dark-sub-color);
}
.formarea .emojiimg img{
vertical-align:top;
object-fit: cover;
margin-left: auto;
margin-right: auto;
text-align: center;
max-height: 64px;
width: auto;
border-radius: 0px;
}
.p2{ .p2{
margin-top: 0px; margin-top: 0px;
@@ -3947,6 +3993,16 @@ label>input {
font-family: var(--Text-fonts), sans-serif; font-family: var(--Text-fonts), sans-serif;
font-weight: bold; font-weight: bold;
} }
.ru a p img{
vertical-align: text-top;
margin-top: auto;
margin-bottom: auto;
margin-left: 4px;
margin-right: 4px;
max-height: 16px;
width: auto;
border-radius: 0px;
}
.this{ .this{
background-color: color-mix(in srgb, var(--sub-color) 30%, var(--background-color))!important; background-color: color-mix(in srgb, var(--sub-color) 30%, var(--background-color))!important;
@@ -5607,6 +5663,67 @@ noscript .noscript_modal .inner .center_text p{
opacity: 0; opacity: 0;
} }
} }
.emoji_admin{
margin-top: 12px;
margin-bottom: 12px;
border-radius: 10px;
padding-left: 12px;
padding-right: 12px;
padding-top: 8px;
background-color: var(--background-color);
border: 1px solid var(--border-color);
width: auto;
}
.emoji_admin details {
padding: 0px;
margin-top: 0px;
margin-bottom: 0px;
text-align: left;
color:var(--text-color);
font-family: var(--Mono-fonts), sans-serif;
word-wrap: break-word;
font-size: 18px;
line-height: 32px;
font-weight: bold;
}
.emoji_admin details img{
padding: 0px;
margin-top: 0px;
margin-bottom: 0px;
margin-right: 12px;
max-height: 32px;
max-width: 100%;
object-fit: initial;
vertical-align: middle;
}
.emoji_admin summary {
display: block;
list-style: none;
color:var(--text-color);
font-family: var(--Mono-fonts), sans-serif;
word-wrap: break-word;
font-size: 20px;
line-height: 32px;
font-weight: bold;
}
.emoji_admin summary::-webkit-details-marker {
display: none;
}
.emoji_admin p{
margin-top: 4px;
margin-bottom: 4px;
text-align: left;
color:var(--text-color);
font-family: var(--Mono-fonts), sans-serif;
word-wrap: break-word;
font-size: 14px;
line-height: 22px;
font-weight: bold;
}
/*------------------------------------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------------------------------------*/
/*--------------------------------------------------スマホ向け--------------------------------------------------*/ /*--------------------------------------------------スマホ向け--------------------------------------------------*/
/*--------------------------------------------------ここから--------------------------------------------------*/ /*--------------------------------------------------ここから--------------------------------------------------*/
@@ -7182,7 +7299,7 @@ noscript .noscript_modal .inner .center_text p{
color: #DDDDDD; color: #DDDDDD;
} }
.ueuse .blur:hover{ .ueuse .blur:hover{
background-color: var(--dark-ueuse-color); background-color: var(--dark-sub-color);
color: var(--dark-text-color); color: var(--dark-text-color);
} }
.ueuse .unixtime{ .ueuse .unixtime{
@@ -7592,10 +7709,10 @@ noscript .noscript_modal .inner .center_text p{
} }
.formarea p{ .formarea p{
color:var(--dark-subtext-color); color:var(--dark-text-color);
} }
.formarea li{ .formarea li{
color:var(--dark-subtext-color); color:var(--dark-text-color);
} }
.formarea .update_box{ .formarea .update_box{
@@ -7616,6 +7733,10 @@ noscript .noscript_modal .inner .center_text p{
color:var(--dark-text-color); color:var(--dark-text-color);
} }
.formarea table{
color:var(--dark-text-color);
}
.modal-content { .modal-content {
background-color: var(--dark-sub-color); background-color: var(--dark-sub-color);
@@ -8089,4 +8210,18 @@ noscript .noscript_modal .inner .center_text p{
background-color: var(--dark-sub-color); background-color: var(--dark-sub-color);
color: var(--main-color); color: var(--main-color);
} }
.emoji_admin{
background-color: var(--dark-background-color);
border: none;
}
.emoji_admin details {
color:var(--dark-text-color);
}
.emoji_admin summary {
color:var(--dark-text-color);
}
.emoji_admin p{
color:var(--dark-text-color);
}
} }
+5
View File
@@ -1315,4 +1315,9 @@ p img{
.errmsg p{ .errmsg p{
color:#ff4848; color:#ff4848;
} }
.module_chk{
background-color: var(--dark-background-color);
border: none;
padding: 0px;
}
} }
+4 -4
View File
@@ -798,7 +798,7 @@ function send_ueuse($userid,$rpUniqid,$ruUniqid,$ueuse,$photo1,$photo2,$photo3,$
// アップロードされたファイル情報 // アップロードされたファイル情報
$uploadedFile2 = $photo2; $uploadedFile2 = $photo2;
if(!(empty($uploadedFile['tmp_name']))){ if(!(empty($uploadedFile2['tmp_name']))){
if(check_mime($uploadedFile2['tmp_name'])){ if(check_mime($uploadedFile2['tmp_name'])){
// アップロードされたファイルの拡張子を取得 // アップロードされたファイルの拡張子を取得
$extension2 = pathinfo($uploadedFile2['name'], PATHINFO_EXTENSION); $extension2 = pathinfo($uploadedFile2['name'], PATHINFO_EXTENSION);
@@ -840,7 +840,7 @@ function send_ueuse($userid,$rpUniqid,$ruUniqid,$ueuse,$photo1,$photo2,$photo3,$
// アップロードされたファイル情報 // アップロードされたファイル情報
$uploadedFile3 = $photo3; $uploadedFile3 = $photo3;
if(!(empty($uploadedFile['tmp_name']))){ if(!(empty($uploadedFile3['tmp_name']))){
if(check_mime($uploadedFile3['tmp_name'])){ if(check_mime($uploadedFile3['tmp_name'])){
// アップロードされたファイルの拡張子を取得 // アップロードされたファイルの拡張子を取得
$extension3 = pathinfo($uploadedFile3['name'], PATHINFO_EXTENSION); $extension3 = pathinfo($uploadedFile3['name'], PATHINFO_EXTENSION);
@@ -881,7 +881,7 @@ function send_ueuse($userid,$rpUniqid,$ruUniqid,$ueuse,$photo1,$photo2,$photo3,$
} }
// アップロードされたファイル情報 // アップロードされたファイル情報
$uploadedFile4 = $photo4; $uploadedFile4 = $photo4;
if(!(empty($uploadedFile['tmp_name']))){ if(!(empty($uploadedFile4['tmp_name']))){
if(check_mime($uploadedFile4['tmp_name'])){ if(check_mime($uploadedFile4['tmp_name'])){
// アップロードされたファイルの拡張子を取得 // アップロードされたファイルの拡張子を取得
$extension4 = pathinfo($uploadedFile4['name'], PATHINFO_EXTENSION); $extension4 = pathinfo($uploadedFile4['name'], PATHINFO_EXTENSION);
@@ -920,7 +920,7 @@ function send_ueuse($userid,$rpUniqid,$ruUniqid,$ueuse,$photo1,$photo2,$photo3,$
// アップロードされたファイル情報 // アップロードされたファイル情報
$uploadedVideo = $video1; $uploadedVideo = $video1;
if(!(empty($uploadedFile['tmp_name']))){ if(!(empty($uploadedVideo['tmp_name']))){
if(check_mime_video($uploadedVideo['tmp_name'])){ if(check_mime_video($uploadedVideo['tmp_name'])){
// アップロードされたファイルの拡張子を取得 // アップロードされたファイルの拡張子を取得
$extensionVideo = strtolower(pathinfo($uploadedVideo['name'], PATHINFO_EXTENSION)); // 小文字に変換 $extensionVideo = strtolower(pathinfo($uploadedVideo['name'], PATHINFO_EXTENSION)); // 小文字に変換
+7 -2
View File
@@ -102,6 +102,7 @@ if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true && isset
} }
if( !empty($_POST['btn_submit']) ) { if( !empty($_POST['btn_submit']) ) {
$_SESSION['form_data'] = $_POST;
$userid = safetext($_POST['userid']); $userid = safetext($_POST['userid']);
$password = safetext($_POST['password']); $password = safetext($_POST['password']);
@@ -204,6 +205,8 @@ if( !empty($_POST['btn_submit']) ) {
$_SESSION['userid'] = $userid; $_SESSION['userid'] = $userid;
$_SESSION['loginid'] = $row["loginid"]; $_SESSION['loginid'] = $row["loginid"];
$_SESSION['form_data'] = array();//フォーム初期化
// リダイレクト先のURLへ転送する // リダイレクト先のURLへ転送する
$url = 'check.php'; $url = 'check.php';
header('Location: ' . $url, true, 303); header('Location: ' . $url, true, 303);
@@ -212,6 +215,8 @@ if( !empty($_POST['btn_submit']) ) {
exit; exit;
}else{ }else{
$_SESSION['userid'] = $userid; $_SESSION['userid'] = $userid;
$_SESSION['form_data'] = array();//フォーム初期化
$url = 'authlogin.php'; $url = 'authlogin.php';
header('Location: ' . $url, true, 303); header('Location: ' . $url, true, 303);
@@ -299,11 +304,11 @@ $pdo = null;
<form class="formarea" method="post"> <form class="formarea" method="post">
<div> <div>
<p>ユーザーID</p> <p>ユーザーID</p>
<input onInput="checkForm(this)" id="userid" class="inbox" type="text" name="userid" value="<?php if( !empty($_SESSION['userid']) ){ echo safetext( $_SESSION['userid']); } ?>"> <input onInput="checkForm(this)" id="userid" class="inbox" type="text" name="userid" value="<?php if( !empty($_SESSION['form_data']['userid']) ){ echo safetext($_SESSION['form_data']['userid']); } ?>">
</div> </div>
<div> <div>
<p>パスワード</p> <p>パスワード</p>
<input id="password" class="inbox" type="password" name="password" maxlength="32" value="<?php if( !empty($_SESSION['password']) ){ echo safetext( $_SESSION['password']); } ?>"> <input id="password" class="inbox" type="password" name="password" maxlength="32" value="<?php if( !empty($_SESSION['form_data']['password']) ){ echo safetext($_SESSION['form_data']['password']); } ?>">
</div> </div>
<div class="switch_flexbox"> <div class="switch_flexbox">
<div class="switch_button"> <div class="switch_button">
+30 -10
View File
@@ -95,6 +95,8 @@ try {
$error_message[] = $e->getMessage(); $error_message[] = $e->getMessage();
} }
if( !empty($_POST['btn_submit']) ) { if( !empty($_POST['btn_submit']) ) {
$_SESSION['form_data'] = $_POST;
if(safetext($serversettings["serverinfo"]["server_account_migration"]) === "true"){ if(safetext($serversettings["serverinfo"]["server_account_migration"]) === "true"){
$new_userid = safetext($_POST['new_userid']); $new_userid = safetext($_POST['new_userid']);
$password = safetext($_POST['password']); $password = safetext($_POST['password']);
@@ -403,17 +405,31 @@ if( !empty($_POST['btn_submit']) ) {
$datetime = date("Y-m-d H:i:s"); $datetime = date("Y-m-d H:i:s");
$username = safetext($json_account_data["userdata"]["user_name"]); $username = safetext($json_account_data["userdata"]["user_name"]);
$mailadds = safetext($json_account_data["userdata"]["mail_adds"]); $mailadds = safetext($json_account_data["userdata"]["mail_adds"]);
$profile = safetext($json_account_data["userdata"]["user_profile"]); $profile = mb_substr(safetext($json_account_data["userdata"]["user_profile"]),0,1024);// 一応文字数制限
$userEnckey = GenUserEnckey($datetime);
$ivLength = openssl_cipher_iv_length('aes-256-cbc');
$randomBytes = random_bytes($ivLength);
$randomhash = hash('sha3-512', $randomBytes);
$iv = substr($randomhash, 0, $ivLength);
// メアドを暗号化する
if(!(empty($mailadds))){
$enc_mailadds = EncryptionUseEncrKey($mailadds, $userEnckey, $iv);
}else{
$enc_mailadds = "";
}
try { try {
$role = "user"; $role = "user";
$admin = "none"; $admin = "none";
$hashpassword = password_hash($password, PASSWORD_DEFAULT); $hashpassword = password_hash($password, PASSWORD_DEFAULT);
$loginid = sha1(uniqid(mt_rand(), true)); $LoginIdBytes = random_bytes(64);
$loginid = hash('sha3-512', $LoginIdBytes);
// SQL作成 // SQL作成
$stmt = $pdo->prepare("INSERT INTO account (username, userid, password, loginid, mailadds, profile, iconname, headname, role, datetime, admin) VALUES (:username, :userid, :password, :loginid, :mailadds, :profile, :iconname, :headname, :role, :datetime, :admin )"); $stmt = $pdo->prepare("INSERT INTO account (username, userid, password, loginid, mailadds, profile, iconname, headname, role, datetime, admin, encryption_ivkey) VALUES (:username, :userid, :password, :loginid, :mailadds, :profile, :iconname, :headname, :role, :datetime, :admin ,:encryption_ivkey)");
// アイコン画像 // アイコン画像
$stmt->bindValue(':iconname', $iconName, PDO::PARAM_STR); $stmt->bindValue(':iconname', $iconName, PDO::PARAM_STR);
@@ -426,11 +442,13 @@ if( !empty($_POST['btn_submit']) ) {
$stmt->bindParam(':userid', $new_userid, PDO::PARAM_STR); $stmt->bindParam(':userid', $new_userid, PDO::PARAM_STR);
$stmt->bindParam(':password', $hashpassword, PDO::PARAM_STR); $stmt->bindParam(':password', $hashpassword, PDO::PARAM_STR);
$stmt->bindParam(':loginid', $loginid, PDO::PARAM_STR); $stmt->bindParam(':loginid', $loginid, PDO::PARAM_STR);
$stmt->bindParam(':mailadds', $mailadds, PDO::PARAM_STR); $stmt->bindParam(':mailadds', $enc_mailadds, PDO::PARAM_STR);
$stmt->bindParam(':profile', $profile, PDO::PARAM_STR); $stmt->bindParam(':profile', $profile, PDO::PARAM_STR);
$stmt->bindParam(':role', $role, PDO::PARAM_STR); $stmt->bindParam(':role', $role, PDO::PARAM_STR);
$stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR); $stmt->bindParam(':datetime', $datetime, PDO::PARAM_STR);
$stmt->bindParam(':encryption_ivkey', $iv, PDO::PARAM_STR);
$stmt->bindParam(':admin', $admin, PDO::PARAM_STR); $stmt->bindParam(':admin', $admin, PDO::PARAM_STR);
// SQLクエリの実行 // SQLクエリの実行
@@ -486,12 +504,14 @@ if( !empty($_POST['btn_submit']) ) {
$_SESSION['userid'] = $new_userid; $_SESSION['userid'] = $new_userid;
$_SESSION['done'] = false; $_SESSION['done'] = false;
} }
$_SESSION['form_data'] = array();
$url = '../success'; $url = '../success';
header('Location: ' . $url, true, 303); header('Location: ' . $url, true, 303);
exit; exit;
}else{ }else{
$_SESSION['userid'] = $new_userid; $_SESSION['userid'] = $new_userid;
$_SESSION['done'] = false; $_SESSION['done'] = false;
$_SESSION['form_data'] = array();
$url = '../success'; $url = '../success';
header('Location: ' . $url, true, 303); header('Location: ' . $url, true, 303);
exit; exit;
@@ -574,28 +594,28 @@ $pdo = null;
<div> <div>
<p>新しいユーザーID</p> <p>新しいユーザーID</p>
<div class="p2">このサーバーで使用するユーザーIDを入力してください。</div> <div class="p2">このサーバーで使用するユーザーIDを入力してください。</div>
<input id="new_userid" type="text" placeholder="" class="inbox" name="new_userid" value=""> <input id="new_userid" type="text" placeholder="" class="inbox" name="new_userid" value="<?php if( !empty($_SESSION['form_data']['new_userid']) ){ echo safetext($_SESSION['form_data']['new_userid']); } ?>">
</div> </div>
<div> <div>
<p>新しいパスワード</p> <p>新しいパスワード</p>
<div class="p2">このサーバーで使用するパスワードを入力してください。</div> <div class="p2">このサーバーで使用するパスワードを入力してください。</div>
<input id="password" type="text" placeholder="" class="inbox" name="password" value=""> <input id="password" type="text" placeholder="" class="inbox" name="password" value="<?php if( !empty($_SESSION['form_data']['password']) ){ echo safetext($_SESSION['form_data']['password']); } ?>">
</div> </div>
<div> <div>
<p>アカウント移行元のuwuzuサーバーのドメイン</p> <p>アカウント移行元のuwuzuサーバーのドメイン</p>
<div class="p2">アカウント移行元のサーバードメインを入力してください。</div> <div class="p2">アカウント移行元のサーバードメインを入力してください。</div>
<input id="moto_server_domain" type="text" placeholder="uwuzu.example.com" class="inbox" name="moto_server_domain" value=""> <input id="moto_server_domain" type="text" placeholder="uwuzu.example.com" class="inbox" name="moto_server_domain" value="<?php if( !empty($_SESSION['form_data']['moto_server_domain']) ){ echo safetext($_SESSION['form_data']['moto_server_domain']); } ?>">
</div> </div>
<div> <div>
<p>識別コード</p> <p>識別コード</p>
<div class="p2">アカウント移行元のサーバーで発行された識別コードを入力してください。</div> <div class="p2">アカウント移行元のサーバーで発行された識別コードを入力してください。</div>
<input id="moto_server_account_check" type="text" placeholder="" class="inbox" name="moto_server_account_check" value=""> <input id="moto_server_account_check" type="text" placeholder="" class="inbox" name="moto_server_account_check" value="<?php if( !empty($_SESSION['form_data']['moto_server_account_check']) ){ echo safetext($_SESSION['form_data']['moto_server_account_check']); } ?>">
</div> </div>
<div> <div>
<p>認証コード</p> <p>認証コード</p>
<div class="p2">アカウント移行元のサーバーで発行された認証コードを入力してください。</div> <div class="p2">アカウント移行元のサーバーで発行された認証コードを入力してください。</div>
<input id="moto_server_account_auth" type="text" placeholder="" class="inbox" name="moto_server_account_auth" value=""> <input id="moto_server_account_auth" type="text" placeholder="" class="inbox" name="moto_server_account_auth" value="<?php if( !empty($_SESSION['form_data']['moto_server_account_auth']) ){ echo safetext($_SESSION['form_data']['moto_server_account_auth']); } ?>">
</div> </div>
<?php if(!empty(H_CAPTCHA_ONOFF && H_CAPTCHA_ONOFF == "true")){?> <?php if(!empty(H_CAPTCHA_ONOFF && H_CAPTCHA_ONOFF == "true")){?>
<div class="captcha_zone"> <div class="captcha_zone">
@@ -612,7 +632,7 @@ $pdo = null;
<div> <div>
<p>招待コード</p> <p>招待コード</p>
<div class="p2">招待コードがないとこのサーバーには登録できません。</div> <div class="p2">招待コードがないとこのサーバーには登録できません。</div>
<input id="invitationcode" type="text" placeholder="" class="inbox" name="invitationcode" value="<?php if( !empty($_SESSION['invitationcode']) ){ echo safetext( $_SESSION['invitationcode']); } ?>"> <input id="invitationcode" type="text" placeholder="" class="inbox" name="invitationcode" value="<?php if( !empty($_SESSION['form_data']['invitationcode']) ){ echo safetext($_SESSION['form_data']['invitationcode']); } ?>">
</div> </div>
<?php }?> <?php }?>
+19 -10
View File
@@ -102,6 +102,7 @@ if(isset($_SESSION['admin_login']) && $_SESSION['admin_login'] === true && isset
if( !empty($_POST['btn_submit']) ) { if( !empty($_POST['btn_submit']) ) {
$_SESSION['form_data'] = $_POST;
// 空白除去 // 空白除去
$username = safetext($_POST['username']); $username = safetext($_POST['username']);
@@ -119,6 +120,9 @@ if( !empty($_POST['btn_submit']) ) {
$profile = safetext($_POST['profile']); $profile = safetext($_POST['profile']);
if( 1024 < mb_strlen($profile, 'UTF-8') ) {
$error_message[] = 'プロフィールは1024文字以内で入力してください。(INPUT_OVER_MAX_COUNT)';
}
if(safetext($serversettings["serverinfo"]["server_invitation"]) === "true"){ if(safetext($serversettings["serverinfo"]["server_invitation"]) === "true"){
$invitationcode = safetext($_POST['invitationcode']); $invitationcode = safetext($_POST['invitationcode']);
@@ -209,6 +213,7 @@ if( !empty($_POST['btn_submit']) ) {
// アップロードされたファイル情報 // アップロードされたファイル情報
$uploadedFile = $_FILES['image']; $uploadedFile = $_FILES['image'];
if(!(empty($uploadedFile['tmp_name']))){
if(check_mime($uploadedFile['tmp_name'])){ if(check_mime($uploadedFile['tmp_name'])){
// アップロードされたファイルの拡張子を取得 // アップロードされたファイルの拡張子を取得
@@ -248,6 +253,9 @@ if( !empty($_POST['btn_submit']) ) {
}else{ }else{
$error_message[] = "使用できない画像形式です。(FILE_UPLOAD_DEKINAKATTA)"; $error_message[] = "使用できない画像形式です。(FILE_UPLOAD_DEKINAKATTA)";
} }
}else{
$error_message[] = "ファイルがアップロードできませんでした。(FILE_UPLOAD_DEKINAKATTA)";
}
} }
//----------------[header image]------------------------------- //----------------[header image]-------------------------------
@@ -401,7 +409,8 @@ if( !empty($_POST['btn_submit']) ) {
$role = "user"; $role = "user";
$admin = "none"; $admin = "none";
$hashpassword = password_hash($password, PASSWORD_DEFAULT); $hashpassword = password_hash($password, PASSWORD_DEFAULT);
$loginid = sha1(uniqid(mt_rand(), true)); $LoginIdBytes = random_bytes(64);
$loginid = hash('sha3-512', $LoginIdBytes);
// SQL作成 // SQL作成
$stmt = $pdo->prepare("INSERT INTO account (username, userid, password, loginid, mailadds, profile, iconname, headname, role, datetime, admin, encryption_ivkey) VALUES (:username, :userid, :password, :loginid, :mailadds, :profile, :iconname, :headname, :role, :datetime, :admin ,:encryption_ivkey)"); $stmt = $pdo->prepare("INSERT INTO account (username, userid, password, loginid, mailadds, profile, iconname, headname, role, datetime, admin, encryption_ivkey) VALUES (:username, :userid, :password, :loginid, :mailadds, :profile, :iconname, :headname, :role, :datetime, :admin ,:encryption_ivkey)");
@@ -459,6 +468,8 @@ if( !empty($_POST['btn_submit']) ) {
if ($res) { if ($res) {
// リダイレクト先のURLへ転送する // リダイレクト先のURLへ転送する
$_SESSION['userid'] = $userid; $_SESSION['userid'] = $userid;
$_SESSION['form_data'] = array();//フォーム初期化
$url = 'authcodechk'; $url = 'authcodechk';
header('Location: ' . $url, true, 303); header('Location: ' . $url, true, 303);
@@ -551,42 +562,40 @@ $pdo = null;
<p id="img_select" style="display:none;">画像を選択しました</p> <p id="img_select" style="display:none;">画像を選択しました</p>
</div> </div>
<script src="js/back.js"></script>
<!--ユーザーネーム関係--> <!--ユーザーネーム関係-->
<div> <div>
<p>ユーザーネーム *</p> <p>ユーザーネーム *</p>
<div class="p2">プロフィールページに掲載され公開されます。<br>※サービス管理者が確認できます。</div> <div class="p2">プロフィールページに掲載され公開されます。<br>※サービス管理者が確認できます。</div>
<input id="username" placeholder="" class="inbox" type="text" name="username" value="<?php if( !empty($_SESSION['username']) ){ echo safetext( $_SESSION['username']); } ?>"> <input id="username" placeholder="" class="inbox" type="text" name="username" value="<?php if( !empty($_SESSION['form_data']['username']) ){ echo safetext($_SESSION['form_data']['username']); } ?>">
</div> </div>
<div> <div>
<p>ユーザーID *</p> <p>ユーザーID *</p>
<div class="p2"><b>後から変更はできません。</b><br>プロフィールページに掲載され公開されます。<br><b>ユーザーIDはログインに必要になるためご自身で覚えておいてください。</b><br>※サービス管理者が確認できます。</div> <div class="p2"><b>後から変更はできません。</b><br>プロフィールページに掲載され公開されます。<br><b>ユーザーIDはログインに必要になるためご自身で覚えておいてください。</b><br>※サービス管理者が確認できます。</div>
<input onInput="checkForm(this)" placeholder="" class="inbox" id="userid" type="text" name="userid" value="<?php if( !empty($_SESSION['userid']) ){ echo safetext( $_SESSION['userid']); } ?>"> <input onInput="checkForm(this)" placeholder="" class="inbox" id="userid" type="text" name="userid" value="<?php if( !empty($_SESSION['form_data']['userid']) ){ echo safetext($_SESSION['form_data']['userid']); } ?>">
</div> </div>
<!--アカウント関連--> <!--アカウント関連-->
<div> <div>
<p>パスワード *</p> <p>パスワード *</p>
<div class="p2">ログイン時に必要となります。<br>※サービス管理者が確認できません。</div> <div class="p2">ログイン時に必要となります。<br>※サービス管理者が確認できません。</div>
<input placeholder="" class="inbox" id="password" type="text" name="password" value="<?php if( !empty($_SESSION['password']) ){ echo safetext( $_SESSION['password']); } ?>"> <input placeholder="" class="inbox" id="password" type="text" name="password" value="<?php if( !empty($_SESSION['form_data']['password']) ){ echo safetext($_SESSION['form_data']['password']); } ?>">
<div class="p2" id="password_zxcvbn" style="display: none;"></div> <div class="p2" id="password_zxcvbn" style="display: none;"></div>
</div> </div>
<div> <div>
<p>パスワード再確認 *</p> <p>パスワード再確認 *</p>
<input placeholder="" class="inbox" oncopy="return false" onpaste="return false" oncontextmenu="return false" id="chkpass" type="text" style="-webkit-text-security:disc;" name="chkpass" value="<?php if( !empty($_SESSION['chkpass']) ){ echo safetext( $_SESSION['chkpass']); } ?>"> <input placeholder="" class="inbox" oncopy="return false" onpaste="return false" oncontextmenu="return false" id="chkpass" type="text" style="-webkit-text-security:disc;" name="chkpass" value="<?php if( !empty($_SESSION['form_data']['chkpass']) ){ echo safetext($_SESSION['form_data']['chkpass']); } ?>">
</div> </div>
<div> <div>
<p>メールアドレス</p> <p>メールアドレス</p>
<div class="p2">設定しておくとアカウント復旧に利用できます。<br>※サービス管理者が確認できます。</div> <div class="p2">設定しておくとアカウント復旧に利用できます。<br>※サービス管理者が確認できます。</div>
<input id="mailadds" type="text" placeholder="" class="inbox" name="mailadds" value="<?php if( !empty($_SESSION['mailadds']) ){ echo safetext( $_SESSION['mailadds']); } ?>"> <input id="mailadds" type="text" placeholder="" class="inbox" name="mailadds" value="<?php if( !empty($_SESSION['form_data']['mailadds']) ){ echo safetext($_SESSION['form_data']['mailadds']); } ?>">
</div> </div>
<!--プロフィール関連--> <!--プロフィール関連-->
<div> <div>
<p>プロフィール</p> <p>プロフィール</p>
<div class="p2">プロフィールページに掲載され公開されます。<br>※サービス管理者が確認できます。</div> <div class="p2">プロフィールページに掲載され公開されます。<br>※サービス管理者が確認できます。</div>
<textarea id="profile" type="text" placeholder="" class="inbox" name="profile"><?php if( !empty($_SESSION['profile']) ){ echo safetext( $_SESSION['profile']); } ?></textarea> <textarea id="profile" type="text" placeholder="" class="inbox" name="profile"><?php if( !empty($_SESSION['form_data']['profile']) ){ echo safetext($_SESSION['form_data']['profile']); } ?></textarea>
</div> </div>
<div class="btn_area"> <div class="btn_area">
@@ -610,7 +619,7 @@ $pdo = null;
<div> <div>
<p>招待コード</p> <p>招待コード</p>
<div class="p2">招待コードがないとこのサーバーには登録できません。</div> <div class="p2">招待コードがないとこのサーバーには登録できません。</div>
<input id="profile" type="text" placeholder="" class="inbox" name="invitationcode" value="<?php if( !empty($_SESSION['invitationcode']) ){ echo safetext( $_SESSION['invitationcode']); } ?>"> <input id="profile" type="text" placeholder="" class="inbox" name="invitationcode" value="<?php if( !empty($_SESSION['form_data']['invitationcode']) ){ echo safetext($_SESSION['form_data']['invitationcode']); } ?>">
</div> </div>
<input type="submit" class = "irobutton" name="btn_submit" value="登録"> <input type="submit" class = "irobutton" name="btn_submit" value="登録">
<?php }else{?> <?php }else{?>
+2 -2
View File
@@ -263,7 +263,7 @@ class MessageDisplay {
//普通のリユーズ---------------------------------------------------------------------------------------------------- //普通のリユーズ----------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------
echo '<div class="ru"><a href="/@' . safetext($this->value['account']) . '"><img src="../'.$this->value['iconname'] . '"><p>' . safetext($this->value['username']) . 'さんがリユーズ</p></a></div>'; echo '<div class="ru"><a href="/@' . safetext($this->value['account']) . '"><img src="../'.$this->value['iconname'] . '"><p>' . replaceProfileEmojiImages(safetext($this->value['username'])) . 'さんがリユーズ</p></a></div>';
echo ' <div class="flebox">'; echo ' <div class="flebox">';
echo ' <a href="/@' . safetext($org_ueuse['account']) . '"><img src="../'.$org_ueuse['iconname'] . '"></a>'; echo ' <a href="/@' . safetext($org_ueuse['account']) . '"><img src="../'.$org_ueuse['iconname'] . '"></a>';
echo ' <a href="/@' . safetext($org_ueuse['account']) . '"><div class="u_name">' . replaceProfileEmojiImages(safetext($org_ueuse['username'])) . '</div></a>'; echo ' <a href="/@' . safetext($org_ueuse['account']) . '"><div class="u_name">' . replaceProfileEmojiImages(safetext($org_ueuse['username'])) . '</div></a>';
@@ -541,7 +541,7 @@ class MessageDisplay {
//普通のリユーズのリユーズ元が消えた場合-------------------------------------------------------------------------------- //普通のリユーズのリユーズ元が消えた場合--------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------
echo '<div class="ru"><a href="/@' . safetext($this->value['account']) . '"><img src="../'.$this->value['iconname'] . '"><p>' . safetext($this->value['username']) . 'さんがリユーズ</p></a></div>'; echo '<div class="ru"><a href="/@' . safetext($this->value['account']) . '"><img src="../'.$this->value['iconname'] . '"><p>' . replaceProfileEmojiImages(safetext($this->value['username'])) . 'さんがリユーズ</p></a></div>';
echo '<p>リユーズ元のユーズは削除されました。</p>'; echo '<p>リユーズ元のユーズは削除されました。</p>';
+2 -1
View File
@@ -364,7 +364,8 @@ if( !empty($_POST['btn_submit']) ) {
if( !empty($_POST['session_submit']) ) { if( !empty($_POST['session_submit']) ) {
$loginid = sha1(uniqid(mt_rand(), true)); $LoginIdBytes = random_bytes(64);
$loginid = hash('sha3-512', $LoginIdBytes);
$pdo->beginTransaction(); $pdo->beginTransaction();
try { try {
+1 -1
View File
@@ -11,7 +11,7 @@ header("Access-Control-Allow-Origin: *");
$domain = $_SERVER['HTTP_HOST']; $domain = $_SERVER['HTTP_HOST'];
if(!(empty($serversettings["serverinfo"]["server_icon"]))){ if(!(empty($serversettings["serverinfo"]["server_icon"]))){
$servericon = safetext($this->value["servericon"]); $servericon = safetext($serversettings["serverinfo"]["server_icon"]);
}else{ }else{
$servericon = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$domain."/img/uwuzuicon.png"; $servericon = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$domain."/img/uwuzuicon.png";
} }
+2 -2
View File
@@ -1,4 +1,4 @@
uwuzu uwuzu
1.4.3 1.4.4
2024/08/23 2024/08/30
daichimarukana,putonfps daichimarukana,putonfps
+14
View File
@@ -1,6 +1,20 @@
## リリースノートだぜぇぇぇぇぇぇい!!!!!!! ## リリースノートだぜぇぇぇぇぇぇい!!!!!!!
ここにはuwuzuの更新情報を載せてくぜぇ~!(いやまてテンションおかしいだろ...) ここにはuwuzuの更新情報を載せてくぜぇ~!(いやまてテンションおかしいだろ...)
## Version 1.4.4 (Funium)
リリース日:2024/08/30
fix: OpenSearchのxmlが正しく生成されない問題を修正しました
fix: 動画をアップロードできない問題、画像のアップロード時にエラーが発生してしまう問題を修正しました
fix: アカウント移行時にメールアドレスが暗号化されたまま移行されてしまい、復号化できなくなってしまう問題を修正しました
fix: プロフィールの文字数が無限に入力できてしまう問題を修正しました。
fix: リユーズ時にうまくカスタム絵文字が表示されない問題を修正しました!
fix: アカウント登録時にプロフィール画像を選択してアカウント登録ボタンを押した際にエラーが発生してしまう問題を修正しました。
chg: セッショントークン(loginid)の生成をより安全な方法に切り替えました
chg: UIを微調整しました
new: 絵文字登録画面のプレビュー機能や管理機能など、絵文字関連の管理機能を強化しました
new: アカウント登録画面などで再読み込みなどを行っても内容が保持されるようにしました
new: サーバー管理画面よりデータベースの容量を確認できるようにしました!
## Version 1.4.3 (Funium) ## Version 1.4.3 (Funium)
リリース日:2024/08/23 リリース日:2024/08/23
fix: メールプラグインの設定画面でエラー表示がエラーを起こしてしまう問題を修正しました。 fix: メールプラグインの設定画面でエラー表示がエラーを起こしてしまう問題を修正しました。
+3
View File
@@ -286,6 +286,9 @@ if( !empty($_POST['btn_submit']) ) {
$profile = safetext($_POST['profile']); $profile = safetext($_POST['profile']);
if( 1024 < mb_strlen($profile, 'UTF-8') ) {
$error_message[] = 'プロフィールは1024文字以内で入力してください。(INPUT_OVER_MAX_COUNT)';
}
// ユーザーネームの入力チェック // ユーザーネームの入力チェック
if( empty($username) ) { if( empty($username) ) {
-6
View File
@@ -285,12 +285,6 @@ if( !empty($_POST['ads_del']) ) {
require('../logout/logout.php'); require('../logout/logout.php');
if(isset($_GET['q'])){
$keyword = safetext($_GET['q']);
}else{
$keyword = "";
}
if (!empty($pdo)) { if (!empty($pdo)) {
$sql = "SELECT * FROM ads ORDER BY datetime DESC"; $sql = "SELECT * FROM ads ORDER BY datetime DESC";
$allads = $pdo->query($sql); $allads = $pdo->query($sql);
+92 -39
View File
@@ -184,30 +184,13 @@ $notificationcount = $notiData['notification_count'];
if( !empty($pdo) ) { if( !empty($pdo) ) {
// データベース接続の設定 $sql = "SELECT * FROM emoji ORDER BY emojidate DESC";
$dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( $allemoji = $pdo->query($sql);
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, role FROM account WHERE userid = :userid"); while ($row = $allemoji->fetch(PDO::FETCH_ASSOC)) {
$userQuery->bindValue(':userid', $userid);
$userQuery->execute();
$userData = $userQuery->fetch();
$role = $userData["role"];
$dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST , DB_USER, DB_PASS, $option);
$rerole = $dbh->prepare("SELECT username, userid, password, mailadds, profile, iconname, headname, role, datetime FROM account WHERE userid = :userid");
$rerole->bindValue(':userid', $userid);
// SQL実行
$rerole->execute();
$userdata = $rerole->fetch(); // ここでデータベースから取得した値を $role に代入する
$Emojis[] = $row;
}
} }
@@ -344,7 +327,48 @@ if( !empty($_POST['btn_submit']) ) {
} }
}
if( !empty($_POST['emoji_del']) ) {
$emoji_name = safetext($_POST['emoji_id']);
$query = $pdo->prepare('SELECT * FROM emoji WHERE emojiname = :emojiname limit 1');
$query->bindValue(':emojiname', $emoji_name);
$query->execute();
$emoji_img = $query->fetch();
if(!(empty($emoji_img))){
if (is_file("../".$emoji_img["emojifile"])) {
unlink("../".$emoji_img["emojifile"]);
}else{
$error_message[] = "絵文字の画像が見つかりませんでした。(EMOJI_NOT_FOUND)";
}
if(empty($error_message)){
try{
// 通知削除クエリを実行
$deleteQuery = $pdo->prepare("DELETE FROM emoji WHERE emojiname = :emojiname");
$deleteQuery->bindValue(':emojiname', $emoji_name, PDO::PARAM_STR);
$res = $deleteQuery->execute();
} catch (Exception $e) {
$pdo->rollBack();
}
if( $res ) {
$url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header("Location:".$url."");
exit;
} else {
$error_message[] = $e->getMessage();
}
}
}else{
$error_message[] = "絵文字が見つかりませんでした。(EMOJI_NOT_FOUND)";
}
// プリペアドステートメントを削除
$stmt = null;
} }
@@ -399,12 +423,20 @@ $pdo = null;
これはカスタム絵文字によってuwuzuが重たくならないようにするための仕様です。</div> これはカスタム絵文字によってuwuzuが重たくならないようにするための仕様です。</div>
<div id="wrap"> <div id="wrap">
<div class="emojipreview">
<div class="emojiimg light">
<img id="emojiimg_light" src="../img/sysimage/errorimage/emoji_404.png">
</div>
<div class="emojiimg dark">
<img id="emojiimg_dark" src="../img/sysimage/errorimage/emoji_404.png">
</div>
</div>
<label class="irobutton" for="file_upload">ファイル選択 <label class="irobutton" for="file_upload">ファイル選択
<input type="file" id="file_upload" name="image" > <input type="file" id="file_upload" name="image" >
</label> </label>
<p id="img_select" style="display:none;">画像を選択しました</p>
</div> </div>
<!--ユーザーネーム関係--> <!--ユーザーネーム関係-->
<div> <div>
<p>EmojiID</p> <p>EmojiID</p>
@@ -417,12 +449,41 @@ $pdo = null;
</div> </div>
<div> <div>
<input type="submit" class = "irobutton" name="btn_submit" value="登録"> <input type="submit" class = "irobutton" name="btn_submit" value="登録">
</div> </div>
</form> </form>
<div class="formarea">
<?php if(!(empty($Emojis))){?>
<?php foreach ($Emojis as $value) {?>
<div class="emoji_admin">
<details>
<summary><img src="../<?php echo safetext($value["emojifile"]);?>"><?php echo safetext($value["emojiname"]);?></summary>
<hr>
<div class="p2">説明</div>
<p><?php echo nl2br(safetext($value["emojiinfo"]));?></p>
<hr>
<div class="p2">登録日時</div>
<p><?php echo date("Y年m月d日 H:i", strtotime(safetext($value["emojidate"])));?></p>
<hr>
<form enctype="multipart/form-data" method="post">
<div class="delbox">
<p>削除ボタンを押すとこの絵文字は削除されます。<br>
この絵文字を使用した投稿からは絵文字が表示されなくなります。</p>
<input type="text" name="emoji_id" id="emoji_id" value="<?php echo safetext($value["emojiname"]);?>" style="display:none;" >
<input type="submit" name="emoji_del" class="delbtn" value="削除">
</div>
</form>
</details>
</div>
<?php }?>
<?php }?>
</div>
</div> </div>
</div> </div>
</main> </main>
@@ -440,23 +501,15 @@ function checkForm(inputElement) {
} }
inputElement.value = str; inputElement.value = str;
} }
$(document).ready(function(){
window.addEventListener('DOMContentLoaded', function(){ $('#file_upload').change(function(e) {
// ファイルが選択されたら実行
document.getElementById("file_upload").addEventListener('change', function(e){
var file_reader = new FileReader(); var file_reader = new FileReader();
// ファイルの読み込みを行ったら実行
file_reader.addEventListener('load', function(e) { file_reader.addEventListener('load', function(e) {
$('#img_select').show();
const element = document.querySelector('#wrap'); $('#emojiimg_light').attr('src', file_reader.result);
const createElement = '<p>画像を選択しました。</p>'; $('#emojiimg_dark').attr('src', file_reader.result);
element.insertAdjacentHTML('afterend', createElement);
}); });
file_reader.readAsDataURL(e.target.files[0]);
file_reader.readAsText(e.target.files[0]);
}); });
}); });
</script> </script>
+42 -1
View File
@@ -197,7 +197,7 @@ $notiData = $notiQuery->fetch(PDO::FETCH_ASSOC);
$notificationcount = $notiData['notification_count']; $notificationcount = $notiData['notification_count'];
if(!empty($pdo)){
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); $mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
@@ -214,6 +214,31 @@ $count3 = $result3->num_rows;
$result4 = $mysqli->query("SELECT userid FROM account WHERE sacinfo = 'bot'"); $result4 = $mysqli->query("SELECT userid FROM account WHERE sacinfo = 'bot'");
$count4 = $result4->num_rows; $count4 = $result4->num_rows;
//DB_Data
try {
$dbname = DB_NAME;
$query = "
SELECT
table_name AS `Table`,
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS `Size`
FROM
information_schema.TABLES
WHERE
table_schema = :database
ORDER BY
`Size` DESC;
";
$stmt = $pdo->prepare($query);
$stmt->bindParam(':database', $dbname);
$stmt->execute();
$db_results = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
$db_results = null;
}
}
if(function_exists("disk_free_space")){ if(function_exists("disk_free_space")){
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
$disk = true; $disk = true;
@@ -256,6 +281,7 @@ if(function_exists("disk_free_space")){
} }
} }
require('../logout/logout.php'); require('../logout/logout.php');
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
@@ -369,6 +395,21 @@ require('../logout/logout.php');
<?php }else{?> <?php }else{?>
<p>過去1分間のロードアベレージ : <?php echo $loadAve?></p> <p>過去1分間のロードアベレージ : <?php echo $loadAve?></p>
<?php };?> <?php };?>
<hr>
<p>データベース</p>
<div class="p2">データベースの容量情報です。</div>
<table>
<?php
if(!empty($db_results)){
foreach ($db_results as $value) {
echo "<tr>";
echo "<td>".$value['Table']."</td>";
echo "<td>".$value['Size']." MB</td>";
echo "</tr>";
}
}
?>
</table>
</div> </div>
</div> </div>
</div> </div>
+1 -1
View File
@@ -240,7 +240,7 @@ if( !empty($_POST['testmail_send_btn_submit']) ) {
$mail_title = "Test email"; $mail_title = "Test email";
$mail_text = "これはuwuzuのテストメールです。 問題なく受信できていますか?"; $mail_text = "これはuwuzuのテストメールです。 問題なく受信できていますか?";
$error_message[] = send_html_mail($test_mail_adds,$mail_title,$mail_text,"../"); $error_message = send_html_mail($test_mail_adds,$mail_title,$mail_text,"../");
} }
/* /*
+20 -19
View File
@@ -1,34 +1,35 @@
{ {
"software": "uwuzu", "software": "uwuzu",
"version": "1.4.3", "version": "1.4.4",
"release_date": "2024-08-23", "release_date": "2024-08-30",
"release_notes": "致命的なバグを修正しました!\nまた、エラーページを一つにまとめました!\n新しいバージョンのuwuzuをお楽しみください!", "release_notes": "このアップデートでは、動画をアップロードできない問題など様々な問題を修正しました!\nまた、安全性の向上や、絵文字の管理機能の強化などが含まれます。\n新しいバージョンのuwuzuをお楽しみください!",
"notices": "アップデートの前に、データのバックアップを行うことをおすすめします!", "notices": "アップデートの前に、データのバックアップを行うことをおすすめします!",
"files": { "files": {
"overwrite": [ "overwrite": [
"/abi/addabi.php",
"/admin/addadmin.php", "/admin/addadmin.php",
"/api/migration-api.php",
"/css/style.css",
"/css/home.css", "/css/home.css",
"/errorpage/httperror.php",
"/function/function.php", "/function/function.php",
"/migration/index.php", "/migration/index.php",
"/rule/privacypolicy.php", "/nextpage/view.php",
"/rule/releasenotes.php", "/others/index.php",
"/rule/terms.php", "/search/opensearch.php",
"/rule/uwuzuabout.php", "/settings/index.php",
"/settings_admin/role_admin.php", "/settings_admin/plugin_settings/phpmailer_sender.php",
"/ueuse/index.php", "/settings_admin/plugin_admin.php",
"/.htaccess", "/settings_admin/ad_admin.php",
"/settings_admin/addemoji_admin.php",
"/settings_admin/overview_admin.php",
"/authlogin.php",
"/login.php",
"/new.php",
"/uwuzu_error_code.txt",
"/server/uwuzuabout.txt", "/server/uwuzuabout.txt",
"/server/uwuzuinfo.txt", "/server/uwuzuinfo.txt",
"/server/uwuzurelease.txt" "/server/uwuzurelease.txt"
], ],
"delete": [ "delete": []
"/errorpage/400.php",
"/errorpage/401.php",
"/errorpage/403.php",
"/errorpage/404.php",
"/errorpage/500.php",
"/errorpage/503.php"
]
} }
} }
+1
View File
@@ -67,6 +67,7 @@ EMOJI_ID_INPUT_PLEASE - 絵文字IDが入力されていない時に表示され
EMOJI_ID_OVER_MAX_COUNT - 絵文字IDの文字数が最大文字数を超過している時に表示されます。 EMOJI_ID_OVER_MAX_COUNT - 絵文字IDの文字数が最大文字数を超過している時に表示されます。
EMOJI_ID_SHIYOUZUMI - ユーザーIDがすでに使用されている時に表示されます。 EMOJI_ID_SHIYOUZUMI - ユーザーIDがすでに使用されている時に表示されます。
EMOJI_OVER_256KB - 絵文字のファイルサイズが256KBを超えている際に表示されます。 EMOJI_OVER_256KB - 絵文字のファイルサイズが256KBを超えている際に表示されます。
EMOJI_NOT_FOUND - 絵文字が見つからない時に表示されます。
INPUT_PLEASE - 入力すべき場所に内容が無い場合に表示されます。 INPUT_PLEASE - 入力すべき場所に内容が無い場合に表示されます。
INPUT_OVER_MAX_COUNT - 入力すべき場所に入力された内容が設定されている最大文字数を超過している際に表示されます。 INPUT_OVER_MAX_COUNT - 入力すべき場所に入力された内容が設定されている最大文字数を超過している際に表示されます。