| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import { Hono } from "hono";
- import type { Variables, WithAuth } from "./middlewares.ts";
- import querystring from "node:querystring";
- import crypto from "node:crypto";
- import { Buffer } from "node:buffer";
- function generateVodSignature(secret_id: string, secret_key: string) {
- // 确定 app 的云 API 密钥
- // var secret_id = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
- // var secret_key = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
- // 确定签名的当前时间和失效时间
- const current = parseInt(((new Date()).getTime() / 1000).toString());
- const expired = current + 86400; // 签名有效期:1天
- // 向参数列表填入参数
- const arg_list = {
- secretId: secret_id,
- currentTimeStamp: current,
- expireTime: expired,
- random: Math.round(Math.random() * Math.pow(2, 32)),
- };
- // 计算签名
- const orignal = querystring.stringify(arg_list);
- const orignal_buffer = Buffer.from(orignal, "utf8");
- const hmac = crypto.createHmac("sha1", secret_key);
- const hmac_buffer = hmac.update(orignal_buffer).digest();
- const signature = Buffer.concat([hmac_buffer, orignal_buffer]).toString(
- "base64",
- );
- return signature;
- }
- export function createVodRoutes(withAuth: WithAuth) {
- const vodRoutes = new Hono<{ Variables: Variables }>();
- // VOD签名生成
- vodRoutes.get("/signature", withAuth, async (c) => {
- try {
- const secretId = Deno.env.get("VOD_SECRET_ID");
- const secretKey = Deno.env.get("VOD_SECRET_KEY");
- if (!secretId || !secretKey) {
- throw new Error("缺少VOD密钥配置");
- }
- const signature = generateVodSignature(secretId, secretKey);
- return c.json({
- signature,
- });
- } catch (error) {
- console.error("VOD签名生成错误:", error);
- return c.json({
- error: "签名生成失败",
- }, 500);
- }
- });
- return vodRoutes;
- }
|