diff --git a/cli/bin/index.js b/cli/bin/index.js index 20aea6c..85acfdb 100755 --- a/cli/bin/index.js +++ b/cli/bin/index.js @@ -13,7 +13,7 @@ import { runTasksMenu } from '../lib/tasks/index.js'; process.on('unhandledRejection', (err) => handleExitError(err, 'Unhandled rejection')); process.on('uncaughtException', (err) => handleExitError(err, 'Uncaught exception')); -program.name('coryd').description('đŸĒ„ Run commands, jobs, download things and have fun.').version('3.0.0'); +program.name('coryd').description('đŸĒ„ Handle tasks, run commands or jobs, download things and have fun.').version('3.0.0'); program.command('init').description('Initialize CLI and populate required config.').action(initConfig); program.command('run [script]').description('Run site scripts and commands.').action(runRootScript); program.command('tasks').description('Handle repeated tasks.').action(runTasksMenu); diff --git a/cli/lib/tasks/addBlockedRobot.js b/cli/lib/tasks/addBlockedRobot.js new file mode 100644 index 0000000..2fa430e --- /dev/null +++ b/cli/lib/tasks/addBlockedRobot.js @@ -0,0 +1,42 @@ +import inquirer from 'inquirer'; +import { loadConfig } from '../config.js'; +import { initDirectusClient, searchItems, createItem } from '../directus/client.js'; + +export const addBlockedRobot = async () => { + const config = await loadConfig(); + + initDirectusClient(config); + + const robots = await searchItems('robots', '/'); + + let rootRobot = robots.find(r => r.path === '/'); + + if (!rootRobot) { + console.log('â„šī¸ No robots entry for `/` found. Creating one...'); + + const newRobot = await createItem('robots', { path: '/' }); + + rootRobot = newRobot.data || newRobot; + + console.log('✅ Created robots rule for `/`'); + } + + const { userAgent } = await inquirer.prompt({ + name: 'userAgent', + message: '🤖 Enter the user-agent string to block:', + validate: input => !!input || 'User-agent cannot be empty' + }); + + const createdAgent = await createItem('user_agents', { + user_agent: userAgent + }); + + const agentId = createdAgent.data?.id || createdAgent.id; + + await createItem('robots_user_agents', { + robots_id: rootRobot.id, + user_agents_id: agentId + }); + + console.log(`✅ Blocked user-agent "${userAgent}" under path "/"`); +}; diff --git a/cli/lib/tasks/index.js b/cli/lib/tasks/index.js index 2d0a180..7703d40 100644 --- a/cli/lib/tasks/index.js +++ b/cli/lib/tasks/index.js @@ -3,12 +3,14 @@ import { addPost } from './addPost.js'; import { addLinkToShare } from './addLinkToShare.js'; import { addEpisodeToShow } from './addEpisodeToShow.js'; import { updateReadingProgress } from './updateReadingProgress.js'; +import { addBlockedRobot } from './addBlockedRobot.js'; const TASKS = [ { name: '📄 Add post', handler: addPost }, { name: '🔗 Add link to share', handler: addLinkToShare }, { name: '➕ Add episode to show', handler: addEpisodeToShow }, { name: '📚 Update reading progress', handler: updateReadingProgress }, + { name: '🤖 Block robot', handler: addBlockedRobot }, ]; export const runTasksMenu = async () => { diff --git a/cli/package-lock.json b/cli/package-lock.json index 1e780ff..f7c6fdd 100644 --- a/cli/package-lock.json +++ b/cli/package-lock.json @@ -1,12 +1,12 @@ { "name": "coryd", - "version": "3.0.0", + "version": "3.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "coryd", - "version": "3.0.0", + "version": "3.1.0", "dependencies": { "@directus/sdk": "^19.1.0", "chalk": "^5.4.1", diff --git a/cli/package.json b/cli/package.json index 66a654e..635af8b 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "coryd", - "version": "3.0.0", + "version": "3.1.0", "description": "The CLI for my site to run scripts, manage and download assets.", "type": "module", "bin": {