Moved profile check into Misuzu.
This commit is contained in:
parent
a86500ad7a
commit
96e266b1fc
3 changed files with 85 additions and 0 deletions
|
@ -58,6 +58,7 @@ Router::addRoutes(
|
|||
Route::post('/bump', 'bump'),
|
||||
Route::post('/verify', 'verify'),
|
||||
Route::create(['GET', 'OPTIONS'], '/token', 'token'),
|
||||
Route::create(['GET', 'OPTIONS'], '/profile-check', 'profileCheck'),
|
||||
Route::get('/bans', 'bans')->addChildren(
|
||||
Route::get('/check', 'checkBan'),
|
||||
Route::post('/create', 'createBan'),
|
||||
|
|
|
@ -430,4 +430,85 @@ final class SockChatHandler extends Handler {
|
|||
'tkn' => $token->pack(),
|
||||
];
|
||||
}
|
||||
|
||||
public function profileCheck(HttpResponse $response, HttpRequest $request) {
|
||||
$host = $request->getHeaderLine('Host');
|
||||
$origin = $request->getHeaderLine('Origin');
|
||||
$originHost = strtolower(parse_url($origin, PHP_URL_HOST));
|
||||
|
||||
if(!empty($originHost) && $originHost !== $host) {
|
||||
$whitelist = Config::get('sockChat.origins', Config::TYPE_ARR, []);
|
||||
|
||||
if(!in_array($originHost, $whitelist))
|
||||
return 403;
|
||||
|
||||
$originProto = strtolower(parse_url($origin, PHP_URL_SCHEME));
|
||||
$origin = $originProto . '://' . $originHost;
|
||||
|
||||
$response->setHeader('Access-Control-Allow-Origin', $origin);
|
||||
$response->setHeader('Access-Control-Allow-Methods', 'OPTIONS, GET');
|
||||
$response->setHeader('Access-Control-Allow-Credentials', 'true');
|
||||
$response->setHeader('Vary', 'Origin');
|
||||
}
|
||||
|
||||
if($request->getMethod() === 'OPTIONS')
|
||||
return 204;
|
||||
|
||||
$userId = (int)$request->getQueryParam('u', FILTER_SANITIZE_NUMBER_INT);
|
||||
$extendedInfo = $request->hasQueryParam('e');
|
||||
|
||||
if($userId < 1)
|
||||
$userInfo = User::getCurrent();
|
||||
else {
|
||||
try {
|
||||
$userInfo = User::byId($userId);
|
||||
} catch(UserNotFoundException $ex) {
|
||||
$response->setStatusCode(404);
|
||||
return ['is_ok' => false];
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$hasIntro = (bool)DB::prepare('SELECT COUNT(*) > 0 FROM `msz_forum_topics` WHERE `forum_id` = 6 AND `user_id` = :user AND `topic_deleted` IS NULL')
|
||||
->bind('user', $userInfo->getId())
|
||||
->fetchColumn();
|
||||
} catch(\PDOException $ex) {
|
||||
$hasIntro = false;
|
||||
}
|
||||
|
||||
$isOld = $userInfo->getCreatedTime() < strtotime('1 year ago');
|
||||
$hasAvatar = $userInfo->hasAvatar();
|
||||
$hasAbout = $userInfo->hasProfileAbout();
|
||||
$hasLinks = !empty($userInfo->profileFields());
|
||||
$isOk = $isOld;
|
||||
|
||||
if(!$isOk) {
|
||||
$points = 0;
|
||||
if($hasAvatar)
|
||||
++$points;
|
||||
if($hasAbout)
|
||||
++$points;
|
||||
if($hasLinks)
|
||||
++$points;
|
||||
if($hasIntro)
|
||||
++$points;
|
||||
$isOk = $points >= ($userInfo->getCreatedTime() < strtotime('1 month ago') ? 1 : 2);
|
||||
}
|
||||
|
||||
$res = [
|
||||
'user_id' => $userInfo->getId(),
|
||||
'is_ok' => $isOk,
|
||||
];
|
||||
|
||||
if($extendedInfo) {
|
||||
$res['username'] = $userInfo->getUsername();
|
||||
$res['is_old'] = $isOld;
|
||||
$res['has_avatar'] = $hasAvatar;
|
||||
$res['has_about'] = $hasAbout;
|
||||
$res['has_links'] = $hasLinks;
|
||||
$res['has_intro'] = $hasIntro;
|
||||
}
|
||||
|
||||
return $res;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -137,6 +137,9 @@ class HttpRequestMessage extends HttpMessage {
|
|||
return null;
|
||||
return filter_var($this->query[$name], $filter, $options);
|
||||
}
|
||||
public function hasQueryParam(string $name): bool {
|
||||
return isset($this->query[$name]);
|
||||
}
|
||||
|
||||
public function getUploadedFiles() {
|
||||
return $this->files;
|
||||
|
|
Loading…
Reference in a new issue