rimgu/src/handlers.ts

93 lines
2.7 KiB
TypeScript
Raw Normal View History

import Hapi = require('@hapi/hapi');
import '@hapi/vision';
2021-10-08 07:38:43 +00:00
import
{
fetchAlbum, fetchAlbumURL, fetchComments, fetchGallery, fetchMedia, fetchTagPosts, fetchUserInfo, fetchUserPosts
} from './fetchers';
import * as util from './util';
import CONFIG from './config';
export const handleMedia = async (request: Hapi.Request, h: Hapi.ResponseToolkit) => {
const {
baseName,
extension,
} = request.params;
const result = await fetchMedia(`${baseName}.${extension}`);
const response = h.response(result.rawBody)
.header('Content-Type', result.headers["content-type"] || `image/${extension}`);
return response;
};
export const handleAlbum = async (request: Hapi.Request, h: Hapi.ResponseToolkit) => {
// https://imgur.com/a/DfEsrAB
2021-10-06 17:47:10 +00:00
const albumID = request.params.albumID;
if (CONFIG.use_api) {
const album = await fetchAlbum(albumID);
return h.view('gallery', {
...album,
2021-10-06 17:47:10 +00:00
pageTitle: CONFIG.page_title,
util,
});
}
2021-10-07 06:15:35 +00:00
const url = await fetchAlbumURL(albumID);
return h.view('bare-album', {
url,
pageTitle: CONFIG.page_title,
util,
});
};
2021-10-07 17:29:02 +00:00
export const handleUser = async (request: Hapi.Request, h: Hapi.ResponseToolkit) => {
// https://imgur.com/user/MomBotNumber5
2021-10-07 17:29:02 +00:00
if (!CONFIG.use_api) {
return 'User page disabled. Rimgu administrator needs to enable API for this to work.';
}
const userID = request.params.userID;
2021-10-08 07:38:43 +00:00
const user = await fetchUserInfo(userID);
2021-10-08 06:45:56 +00:00
const posts = await fetchUserPosts(userID);
2021-10-08 07:42:13 +00:00
return h.view('posts', {
2021-10-08 06:45:56 +00:00
posts,
2021-10-08 07:38:43 +00:00
user,
2021-10-07 17:29:02 +00:00
pageTitle: CONFIG.page_title,
util,
});
};
2021-10-08 07:56:54 +00:00
export const handleUserCover = async (request: Hapi.Request, h: Hapi.ResponseToolkit) => {
const userID = request.params.userID;
const result = await fetchMedia(`/user/${userID}/cover?maxwidth=2560`);
const response = h.response(result.rawBody)
.header('Content-Type', result.headers["content-type"] || `image/jpeg`);
return response;
};
2021-10-08 06:45:56 +00:00
export const handleTag = async (request: Hapi.Request, h: Hapi.ResponseToolkit) => {
// https://imgur.com/t/funny
2021-10-08 06:45:56 +00:00
if (!CONFIG.use_api) {
return 'Tag page disabled. Rimgu administrator needs to enable API for this to work.';
}
const tagID = request.params.tagID;
const result = await fetchTagPosts(tagID);
2021-10-08 07:42:13 +00:00
return h.view('posts', {
2021-10-08 06:45:56 +00:00
posts: result.items,
pageTitle: CONFIG.page_title,
tag: result,
util,
});
};
export const handleGallery = async (request: Hapi.Request, h: Hapi.ResponseToolkit) => {
const galleryID = request.params.galleryID;
const gallery = await fetchGallery(galleryID);
const comments = CONFIG.use_api
? await fetchComments(galleryID)
: null;
return h.view('gallery', {
...gallery,
comments,
2021-10-06 17:47:10 +00:00
pageTitle: CONFIG.page_title,
util,
});
};