Skip to content

Instantly share code, notes, and snippets.

View Gowee's full-sized avatar
🙂

Hung-I Wang Gowee

🙂
View GitHub Profile
@Gowee
Gowee / cfapi-ddns-worker.js
Last active April 1, 2024 07:17
A DDNS-friendly wrapper/proxy for Cloudflare API with fine-grained permission control, deployed on Cloudflare Workers
// CloudFlare API token
// for zone: example.com (Edit)
const CLOUDFLARE_API_TOKEN = "TO_BE_FILLED";
// Currently, there seems not to be a way to get zone ids with tokens. So hardcode it here.
// https://community.cloudflare.com/t/bug-in-list-zones-endpoint-when-using-api-token/115048
// Trailing dots CANNOT BE OMITTED.
const ZONES = {
"example.org.": {
id: "TO_BE_FILLED"
},
@Gowee
Gowee / uacme-cloudflare-hook.sh
Last active March 9, 2024 01:29
DNS-01 challenge hook script of uacme for Cloudflare
#!/bin/sh
# Copyright (C) 2020 Michel Stam <michel@reverze.net>
# Copyright (C) 2021 Hung-I Wang <whygowe@gmail.com>
#
# The script is adatped from:
# https://github.com/ndilieto/uacme/blob/5edec0eea1bcf6f454ec1787297c2408c2f2e97a/nsupdate.sh
#
# Licensed under the the GNU General Public License <http://www.gnu.org/licenses/>.
# The script is meant to be used as a hook script of uacme to update TXT records for acme challenges.
@Gowee
Gowee / stamp_photo.py
Created February 3, 2024 05:24
Add a date stamp to photos
#!/usr/bin/env python3
import sys
from PIL import Image, ImageDraw, ImageFont
from PIL.ExifTags import TAGS, GPSTAGS
from datetime import date, datetime, timezone
def calculate_crop_dimensions(image, ratio=3/2):
width, height = image.size
l = width > height # is landscape
if not l:
@Gowee
Gowee / nlc-getbook.js
Last active June 29, 2023 12:05
Download PDF from read.nlc.cn
async function downloadBook(aid, bid) {
const [title, myreader, kime, fime] = await getBookKey(aid, bid)
const r = await fetch(`http://read.nlc.cn/menhu/OutOpenBook/getReader?aid=${aid}&bid=${bid}&kime=${kime}&fime=${fime}`, { method: "POST", headers: { myreader: myreader }})
const d = await r.arrayBuffer()
saveByteArray(title + ".pdf", d)
}
async function getBookKey(aid, bid) {
const r = await fetch(`http://read.nlc.cn/OutOpenBook/OpenObjectBook?aid=${aid}&bid=${bid}`)
@Gowee
Gowee / wow.worker.js
Created May 17, 2023 02:09
(draft, incomplete) WebSocket based-proxy service on Workers
const WOW_TOKEN = "W0w!"
async function handleRequest(request) {
const upgradeHeader = request.headers.get('Upgrade');
const token = request.headers.get('X-WOW-TOKEN');
const addr = request.headers.get('X-WOW-ADDR');
if (token !== WOW_TOKEN) {
return new Response('Forbidden', { status: 403 });
}
if (!upgradeHeader || upgradeHeader !== 'websocket') {
@Gowee
Gowee / chaoxing.py
Last active December 20, 2022 03:16
#!/usr/bin/dev python3
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import urllib.parse
import json
from PIL import Image
import pytesseract
import time
@Gowee
Gowee / README.md
Created June 24, 2018 16:24
Rotate the avatar of Telegram based on the time in a day using Pyrogram(MTProto).
#!/bin/sh
parted /dev/vda -- mklabel gpt
parted /dev/vda -- mkpart esp 1MiB 100MiB
parted /dev/vda -- mkpart primary 100MiB 100%
parted /dev/vda -- set 1 boot on
mkfs.ext4 -L nixos /dev/vda2 # btrfs not working?
mkfs.vfat -F32 -n boot /dev/vda1
mkdir -p /mnt
mount /dev/vda2 /mnt
mkdir -p /mnt/boot
@Gowee
Gowee / MDExtBot.py
Last active July 31, 2022 07:12
Backup 2017-01.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Backup 2017-01-07.
from uuid import uuid4
from telegram import InlineQueryResultArticle, ParseMode, \
InputTextMessageContent
from telegram.ext import Updater, InlineQueryHandler, CommandHandler
@Gowee
Gowee / gettelegraf.sh
Created April 16, 2022 07:06
Openwrt get telegraf
#!/bin/sh
set -eux
cd /tmp
filename=$(opkg update && opkg info telegraf | grep "Filename:" | cut -d' ' -f2)
repo=$(cat /etc/opkg/distfeeds.conf | grep "openwrt_packages" | cut -d' ' -f3)
url="$repo/$filename"
wget -q $url