Initial commit
This commit is contained in:
commit
ebe9244c0a
5 changed files with 2296 additions and 0 deletions
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
node_modules
|
||||||
|
dist
|
||||||
|
.env
|
27
package.json
Normal file
27
package.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"name": "youtrack-cert-updater",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Automatically updates YouTrack domain certificate",
|
||||||
|
"main": "dist/app.cjs",
|
||||||
|
"repository": "https://git.rainplus.org/rain-plus/youtrack-cert-updater.git",
|
||||||
|
"author": "LuoRain",
|
||||||
|
"license": "MIT",
|
||||||
|
"private": false,
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"build": "yarn webpack --mode production",
|
||||||
|
"dev": "yarn webpack --mode development --watch",
|
||||||
|
"start": "node dist/app.cjs"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@babel/core": "^7.24.0",
|
||||||
|
"@babel/preset-env": "^7.24.0",
|
||||||
|
"@babel/preset-typescript": "^7.23.3",
|
||||||
|
"babel-loader": "^9.1.3",
|
||||||
|
"dotenv": "^16.4.5",
|
||||||
|
"node-fetch": "^3.3.2",
|
||||||
|
"typescript": "^5.4.2",
|
||||||
|
"webpack": "^5.90.3",
|
||||||
|
"webpack-cli": "^5.1.4"
|
||||||
|
}
|
||||||
|
}
|
67
src/app.ts
Normal file
67
src/app.ts
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
import { readFileSync } from "fs";
|
||||||
|
|
||||||
|
import { config } from "dotenv";
|
||||||
|
import { default as fetch, Headers } from "node-fetch";
|
||||||
|
|
||||||
|
config();
|
||||||
|
|
||||||
|
let endpoint = process.env.YOUTRACK_URL;
|
||||||
|
if (!endpoint) {
|
||||||
|
throw "YouTrack's base URL is required.";
|
||||||
|
}
|
||||||
|
if (!endpoint.endsWith("/")) {
|
||||||
|
endpoint += "/";
|
||||||
|
}
|
||||||
|
|
||||||
|
const token = process.env.YOUTRACK_TOKEN
|
||||||
|
if (!token) {
|
||||||
|
throw "A valid YouTrack access token is required.";
|
||||||
|
}
|
||||||
|
|
||||||
|
let cert = process.env.CERTIFICATE;
|
||||||
|
if (!cert) {
|
||||||
|
const certPath = process.env.CERTIFICATE_FILE;
|
||||||
|
if (!certPath) {
|
||||||
|
throw "A certificate is required.";
|
||||||
|
}
|
||||||
|
cert = readFileSync(certPath, { encoding: "utf-8" });
|
||||||
|
}
|
||||||
|
|
||||||
|
let privKey = process.env.PRIVATE_KEY;
|
||||||
|
if (!privKey) {
|
||||||
|
const privKeyPath = process.env.PRIVATE_KEY_FILE;
|
||||||
|
if (!privKeyPath) {
|
||||||
|
throw "A private key is required.";
|
||||||
|
}
|
||||||
|
privKey = readFileSync(privKeyPath, { encoding: "utf-8" });
|
||||||
|
}
|
||||||
|
|
||||||
|
const apiEndpoint = endpoint + "api/admin/domainSettings";
|
||||||
|
|
||||||
|
function makeAPIHeaders() {
|
||||||
|
return {
|
||||||
|
Authorization: "Bearer " + token,
|
||||||
|
Accept: "application/json",
|
||||||
|
"Cache-Control": "no-cache",
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function execute() {
|
||||||
|
const json = JSON.stringify({
|
||||||
|
certificates: cert,
|
||||||
|
privateKey: privKey
|
||||||
|
});
|
||||||
|
const res = await fetch(apiEndpoint, {
|
||||||
|
method: "POST",
|
||||||
|
headers: new Headers(makeAPIHeaders()),
|
||||||
|
body: json
|
||||||
|
});
|
||||||
|
if (res.ok) {
|
||||||
|
console.log("Success");
|
||||||
|
} else {
|
||||||
|
console.error("Unable to update the certificate", res.body);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
execute();
|
29
webpack.config.js
Normal file
29
webpack.config.js
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
import { dirname } from 'path';
|
||||||
|
import { fileURLToPath } from 'url';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type import("webpack").Configuration
|
||||||
|
*/
|
||||||
|
export default {
|
||||||
|
target: "node",
|
||||||
|
entry: "./src/app.ts",
|
||||||
|
output: {
|
||||||
|
path: dirname(fileURLToPath(import.meta.url)),
|
||||||
|
filename: "dist/app.cjs",
|
||||||
|
chunkFormat: false
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
extensions: [".js", ".ts"]
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
test: /\.(?:js|ts)$/,
|
||||||
|
exclude: /node_modules/,
|
||||||
|
use: [
|
||||||
|
"babel-loader"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue