|
|
@@ -18,7 +18,7 @@ import {
|
|
|
import { Bot, InputFile, type Context } from 'grammy'
|
|
|
import type { ReactionTypeEmoji } from 'grammy/types'
|
|
|
import { randomBytes } from 'crypto'
|
|
|
-import { readFileSync, writeFileSync, mkdirSync, readdirSync, rmSync, statSync, renameSync, realpathSync } from 'fs'
|
|
|
+import { readFileSync, writeFileSync, mkdirSync, readdirSync, rmSync, statSync, renameSync, realpathSync, chmodSync } from 'fs'
|
|
|
import { homedir } from 'os'
|
|
|
import { join, extname, sep } from 'path'
|
|
|
|
|
|
@@ -30,6 +30,8 @@ const ENV_FILE = join(STATE_DIR, '.env')
|
|
|
// Load ~/.claude/channels/telegram/.env into process.env. Real env wins.
|
|
|
// Plugin-spawned servers don't get an env block — this is where the token lives.
|
|
|
try {
|
|
|
+ // Token is a credential — lock to owner. No-op on Windows (would need ACLs).
|
|
|
+ chmodSync(ENV_FILE, 0o600)
|
|
|
for (const line of readFileSync(ENV_FILE, 'utf8').split('\n')) {
|
|
|
const m = line.match(/^(\w+)=(.*)$/)
|
|
|
if (m && process.env[m[1]] === undefined) process.env[m[1]] = m[2]
|