mirror of
				https://github.com/karl0ss/homepage.git
				synced 2025-11-04 08:20:58 +00:00 
			
		
		
		
	rewrite minecraft server status widget to directly ping server
This commit is contained in:
		
							parent
							
								
									f418ee6327
								
							
						
					
					
						commit
						ad66637ff1
					
				@ -20,6 +20,7 @@
 | 
				
			|||||||
    "js-yaml": "^4.1.0",
 | 
					    "js-yaml": "^4.1.0",
 | 
				
			||||||
    "json-rpc-2.0": "^1.4.1",
 | 
					    "json-rpc-2.0": "^1.4.1",
 | 
				
			||||||
    "memory-cache": "^0.2.0",
 | 
					    "memory-cache": "^0.2.0",
 | 
				
			||||||
 | 
					    "minecraft-ping-js": "^1.0.2",
 | 
				
			||||||
    "next": "^12.3.1",
 | 
					    "next": "^12.3.1",
 | 
				
			||||||
    "next-i18next": "^12.0.1",
 | 
					    "next-i18next": "^12.0.1",
 | 
				
			||||||
    "node-os-utils": "^1.3.7",
 | 
					    "node-os-utils": "^1.3.7",
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										17
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										17
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							@ -22,6 +22,7 @@ specifiers:
 | 
				
			|||||||
  js-yaml: ^4.1.0
 | 
					  js-yaml: ^4.1.0
 | 
				
			||||||
  json-rpc-2.0: ^1.4.1
 | 
					  json-rpc-2.0: ^1.4.1
 | 
				
			||||||
  memory-cache: ^0.2.0
 | 
					  memory-cache: ^0.2.0
 | 
				
			||||||
 | 
					  minecraft-ping-js: ^1.0.2
 | 
				
			||||||
  next: ^12.3.1
 | 
					  next: ^12.3.1
 | 
				
			||||||
  next-i18next: ^12.0.1
 | 
					  next-i18next: ^12.0.1
 | 
				
			||||||
  node-os-utils: ^1.3.7
 | 
					  node-os-utils: ^1.3.7
 | 
				
			||||||
@ -53,6 +54,7 @@ dependencies:
 | 
				
			|||||||
  js-yaml: 4.1.0
 | 
					  js-yaml: 4.1.0
 | 
				
			||||||
  json-rpc-2.0: 1.4.1
 | 
					  json-rpc-2.0: 1.4.1
 | 
				
			||||||
  memory-cache: 0.2.0
 | 
					  memory-cache: 0.2.0
 | 
				
			||||||
 | 
					  minecraft-ping-js: 1.0.2
 | 
				
			||||||
  next: 12.3.1_biqbaboplfbrettd7655fr4n2y
 | 
					  next: 12.3.1_biqbaboplfbrettd7655fr4n2y
 | 
				
			||||||
  next-i18next: 12.0.1_azq6kxkn3od7qdylwkyksrwopy
 | 
					  next-i18next: 12.0.1_azq6kxkn3od7qdylwkyksrwopy
 | 
				
			||||||
  node-os-utils: 1.3.7
 | 
					  node-os-utils: 1.3.7
 | 
				
			||||||
@ -2152,6 +2154,13 @@ packages:
 | 
				
			|||||||
    engines: {node: '>=6'}
 | 
					    engines: {node: '>=6'}
 | 
				
			||||||
    dev: false
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /minecraft-ping-js/1.0.2:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-h9QYG2n+fBKgp520tXBwR354XRzR/w5wXe8CJCmxKm6jbLpAoLODM8Nj5+ssuIVQF8rtxkAnjwv7PH+7ehFzQQ==}
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      node-int64: 0.4.0
 | 
				
			||||||
 | 
					      varint: 6.0.0
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /mini-svg-data-uri/1.4.4:
 | 
					  /mini-svg-data-uri/1.4.4:
 | 
				
			||||||
    resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==}
 | 
					    resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==}
 | 
				
			||||||
    hasBin: true
 | 
					    hasBin: true
 | 
				
			||||||
@ -2288,6 +2297,10 @@ packages:
 | 
				
			|||||||
      - babel-plugin-macros
 | 
					      - babel-plugin-macros
 | 
				
			||||||
    dev: false
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /node-int64/0.4.0:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /node-os-utils/1.3.7:
 | 
					  /node-os-utils/1.3.7:
 | 
				
			||||||
    resolution: {integrity: sha512-fvnX9tZbR7WfCG5BAy3yO/nCLyjVWD6MghEq0z5FDfN+ZXpLWNITBdbifxQkQ25ebr16G0N7eRWJisOcMEHG3Q==}
 | 
					    resolution: {integrity: sha512-fvnX9tZbR7WfCG5BAy3yO/nCLyjVWD6MghEq0z5FDfN+ZXpLWNITBdbifxQkQ25ebr16G0N7eRWJisOcMEHG3Q==}
 | 
				
			||||||
    dev: false
 | 
					    dev: false
 | 
				
			||||||
@ -3296,6 +3309,10 @@ packages:
 | 
				
			|||||||
    hasBin: true
 | 
					    hasBin: true
 | 
				
			||||||
    dev: false
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /varint/6.0.0:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==}
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /verror/1.10.0:
 | 
					  /verror/1.10.0:
 | 
				
			||||||
    resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==}
 | 
					    resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==}
 | 
				
			||||||
    engines: {'0': node >=0.6.0}
 | 
					    engines: {'0': node >=0.6.0}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										27
									
								
								src/utils/proxy/handlers/minecraft.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/utils/proxy/handlers/minecraft.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					import { pingWithPromise } from "minecraft-ping-js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import createLogger from "utils/logger";
 | 
				
			||||||
 | 
					import getServiceWidget from "utils/config/service-helpers";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const proxyName = "minecraftProxyHandler";
 | 
				
			||||||
 | 
					const logger = createLogger(proxyName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default async function minecraftProxyHandler(req, res) {
 | 
				
			||||||
 | 
					    const { group, service } = req.query;
 | 
				
			||||||
 | 
					    const serviceWidget = await getServiceWidget(group, service);
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					        const pingResponse = await pingWithPromise(serviceWidget.domain, serviceWidget.port || 25565);
 | 
				
			||||||
 | 
					        res.status(200).send({
 | 
				
			||||||
 | 
					            version: pingResponse.version.name,
 | 
				
			||||||
 | 
					            online: true,
 | 
				
			||||||
 | 
					            players: pingResponse.players
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    } catch (e) {
 | 
				
			||||||
 | 
					        logger.warn(e)
 | 
				
			||||||
 | 
					        res.status(500).send({
 | 
				
			||||||
 | 
					            version: undefined,
 | 
				
			||||||
 | 
					            online: false,
 | 
				
			||||||
 | 
					            players: undefined
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -25,21 +25,14 @@ export default function Component({ service }) {
 | 
				
			|||||||
  const statusIndicator = serverData.online ? 
 | 
					  const statusIndicator = serverData.online ? 
 | 
				
			||||||
  <span className="text-green-500">{t("minecraft.up")}</span>:
 | 
					  <span className="text-green-500">{t("minecraft.up")}</span>:
 | 
				
			||||||
  <span className="text-red-500">{t("minecraft.down")}</span>;
 | 
					  <span className="text-red-500">{t("minecraft.down")}</span>;
 | 
				
			||||||
 | 
					  const players = serverData.players ? `${serverData.players.online} / ${serverData.players.max}` : "-";
 | 
				
			||||||
 | 
					  const version = serverData.version || "-";
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  if(serverData.players){
 | 
					 | 
				
			||||||
  return (
 | 
					  return (
 | 
				
			||||||
    <Container service={service}>
 | 
					    <Container service={service}>
 | 
				
			||||||
      <Block label="minecraft.status" value={statusIndicator} />
 | 
					      <Block label="minecraft.status" value={statusIndicator} />
 | 
				
			||||||
        <Block label="minecraft.players" value={`${serverData.players.online} / ${serverData.players.max}`} />
 | 
					      <Block label="minecraft.players" value={players} />
 | 
				
			||||||
        <Block label="minecraft.version" value={serverData.version} />
 | 
					      <Block label="minecraft.version" value={version} />
 | 
				
			||||||
      </Container>
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
  } 
 | 
					 | 
				
			||||||
  return (
 | 
					 | 
				
			||||||
      <Container service={service}>
 | 
					 | 
				
			||||||
      <Block label="minecraft.status" value={statusIndicator} />
 | 
					 | 
				
			||||||
      <Block label="minecraft.players" value="-" />
 | 
					 | 
				
			||||||
      <Block label="minecraft.version" value="-" />
 | 
					 | 
				
			||||||
    </Container>
 | 
					    </Container>
 | 
				
			||||||
  );
 | 
					  );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,12 +1,11 @@
 | 
				
			|||||||
import genericProxyHandler from "utils/proxy/handlers/generic";
 | 
					import minecraftProxyHandler from "utils/proxy/handlers/minecraft";
 | 
				
			||||||
import { asJson } from "utils/proxy/api-helpers";
 | 
					import { asJson } from "utils/proxy/api-helpers";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const widget = {
 | 
					const widget = {
 | 
				
			||||||
  api: "{url}/{endpoint}/{domain}",
 | 
					  proxyHandler: minecraftProxyHandler,
 | 
				
			||||||
  proxyHandler: genericProxyHandler,
 | 
					 | 
				
			||||||
  mappings: {
 | 
					  mappings: {
 | 
				
			||||||
    status: {
 | 
					    status: {
 | 
				
			||||||
      endpoint: "2",
 | 
					      endpoint: "_",
 | 
				
			||||||
      map: (data) => {
 | 
					      map: (data) => {
 | 
				
			||||||
        const jsonData = asJson(data);
 | 
					        const jsonData = asJson(data);
 | 
				
			||||||
        return {
 | 
					        return {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user