Added user resolve endpoint for Sock Chat.
This commit is contained in:
parent
1589be2245
commit
9de494e671
3 changed files with 62 additions and 24 deletions
0
msz
Executable file → Normal file
0
msz
Executable file → Normal file
|
@ -54,6 +54,7 @@ Router::addRoutes(
|
|||
Route::group('/_sockchat', 'SockChat')->addChildren(
|
||||
Route::get('/emotes', 'emotes'),
|
||||
Route::get('/login', 'login'),
|
||||
Route::get('/resolve', 'resolve'),
|
||||
Route::post('/bump', 'bump'),
|
||||
Route::post('/verify', 'verify'),
|
||||
Route::get('/bans', 'bans')->addChildren(
|
||||
|
|
|
@ -95,6 +95,21 @@ final class SockChatHandler extends Handler {
|
|||
return $this->login($response, $request);
|
||||
}
|
||||
|
||||
public static function calculatePermissions(User $userInfo): int {
|
||||
$perms = self::PERMS_DEFAULT;
|
||||
|
||||
if(perms_check_user(MSZ_PERMS_USER, $userInfo->getId(), MSZ_PERM_USER_MANAGE_USERS))
|
||||
$perms |= self::PERMS_MANAGE_USERS;
|
||||
if(perms_check_user(MSZ_PERMS_USER, $userInfo->getId(), MSZ_PERM_USER_MANAGE_WARNINGS))
|
||||
$perms |= self::PERMS_MANAGE_WARNS;
|
||||
if(perms_check_user(MSZ_PERMS_USER, $userInfo->getId(), MSZ_PERM_USER_CHANGE_BACKGROUND))
|
||||
$perms |= self::PERMS_CHANGE_BACKG;
|
||||
if(perms_check_user(MSZ_PERMS_FORUM, $userInfo->getId(), MSZ_PERM_FORUM_MANAGE_FORUMS))
|
||||
$perms |= self::PERMS_MANAGE_FORUM;
|
||||
|
||||
return $perms;
|
||||
}
|
||||
|
||||
public function emotes(HttpResponse $response, HttpRequest $request): array {
|
||||
$response->setHeader('Access-Control-Allow-Origin', '*')
|
||||
->setHeader('Access-Control-Allow-Methods', 'GET');
|
||||
|
@ -134,12 +149,17 @@ final class SockChatHandler extends Handler {
|
|||
continue;
|
||||
|
||||
$isPermanent = $warning->isPermanent();
|
||||
$userInfo = $warning->getUser();
|
||||
$bans[] = [
|
||||
'id' => $warning->getUser()->getId(),
|
||||
'expires' => date('c', $isPermanent ? 0x7FFFFFFF : $warning->getExpirationTime()),
|
||||
'is_permanent' => $isPermanent,
|
||||
'user_id' => $userInfo->getId(),
|
||||
'id' => $userInfo->getId(),
|
||||
'username' => $userInfo->getUsername(),
|
||||
'colour_raw' => $userInfo->getColour()->getRaw(),
|
||||
'rank' => $rank = $userInfo->getRank(),
|
||||
'ip' => $warning->getUserRemoteAddress(),
|
||||
'username' => $warning->getUser()->getUsername(),
|
||||
'is_permanent' => $isPermanent,
|
||||
'expires' => date('c', $isPermanent ? 0x7FFFFFFF : $warning->getExpirationTime()),
|
||||
'perms' => self::calculatePermissions($userInfo),
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -162,6 +182,7 @@ final class SockChatHandler extends Handler {
|
|||
if($warning !== null) {
|
||||
$response['warning'] = $warning->getId();
|
||||
$response['id'] = $warning->getUserId();
|
||||
$response['user_id'] = $warning->getUserId();
|
||||
$response['ip'] = $warning->getUserRemoteAddress();
|
||||
$response['is_permanent'] = $warning->isPermanent();
|
||||
$response['expires'] = date('c', $response['is_permanent'] ? 0x7FFFFFFF : $warning->getExpirationTime());
|
||||
|
@ -236,13 +257,7 @@ final class SockChatHandler extends Handler {
|
|||
break;
|
||||
|
||||
case 'user':
|
||||
try {
|
||||
$userInfo = User::byUsername($subject);
|
||||
} catch(UserNotFoundException $ex) {
|
||||
return 404;
|
||||
}
|
||||
|
||||
$warning = UserWarning::byUserIdActive($userInfo->getId());
|
||||
$warning = UserWarning::byUserIdActive((int)$subject);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -385,25 +400,47 @@ final class SockChatHandler extends Handler {
|
|||
|
||||
$userInfo->bumpActivity($authInfo->ip);
|
||||
|
||||
$perms = self::PERMS_DEFAULT;
|
||||
|
||||
if(perms_check_user(MSZ_PERMS_USER, $userInfo->getId(), MSZ_PERM_USER_MANAGE_USERS))
|
||||
$perms |= self::PERMS_MANAGE_USERS;
|
||||
if(perms_check_user(MSZ_PERMS_USER, $userInfo->getId(), MSZ_PERM_USER_MANAGE_WARNINGS))
|
||||
$perms |= self::PERMS_MANAGE_WARNS;
|
||||
if(perms_check_user(MSZ_PERMS_USER, $userInfo->getId(), MSZ_PERM_USER_CHANGE_BACKGROUND))
|
||||
$perms |= self::PERMS_CHANGE_BACKG;
|
||||
if(perms_check_user(MSZ_PERMS_FORUM, $userInfo->getId(), MSZ_PERM_FORUM_MANAGE_FORUMS))
|
||||
$perms |= self::PERMS_MANAGE_FORUM;
|
||||
|
||||
return [
|
||||
'success' => true,
|
||||
'user_id' => $userInfo->getId(),
|
||||
'username' => $userInfo->getUsername(),
|
||||
'colour_raw' => $userInfo->getColour()->getRaw(),
|
||||
'hierarchy' => $userInfo->getRank(),
|
||||
'rank' => $rank = $userInfo->getRank(),
|
||||
'hierarchy' => $rank,
|
||||
'is_silenced' => date('c', $userInfo->isSilenced() || $userInfo->isBanned() ? ($userInfo->isActiveWarningPermanent() ? strtotime('10 years') : $userInfo->getActiveWarningExpiration()) : 0),
|
||||
'perms' => $perms,
|
||||
'perms' => self::calculatePermissions($userInfo),
|
||||
];
|
||||
}
|
||||
|
||||
public function resolve(HttpResponse $response, HttpRequest $request): array {
|
||||
$userHash = $request->getHeaderLine('X-SharpChat-Signature');
|
||||
$method = (string)$request->getQueryParam('m', FILTER_SANITIZE_STRING);
|
||||
$param = (string)$request->getQueryParam('p', FILTER_SANITIZE_STRING);
|
||||
$realHash = hash_hmac('sha256', "resolve#{$method}#{$param}", $this->hashKey);
|
||||
|
||||
if(!hash_equals($realHash, $userHash))
|
||||
return [];
|
||||
|
||||
try {
|
||||
switch($method) {
|
||||
case 'id':
|
||||
$userInfo = User::byId((int)$param);
|
||||
break;
|
||||
|
||||
case 'name':
|
||||
$userInfo = User::byUsername($param);
|
||||
break;
|
||||
}
|
||||
} catch(UserNotFoundException $ex) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return [
|
||||
'user_id' => $userInfo->getId(),
|
||||
'username' => $userInfo->getUsername(),
|
||||
'colour_raw' => $userInfo->getColour()->getRaw(),
|
||||
'rank' => $rank = $userInfo->getRank(),
|
||||
'perms' => self::calculatePermissions($userInfo),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue