From adacfb111015b364f35d168058bc63bf85d802dc Mon Sep 17 00:00:00 2001 From: Jason Rasmussen Date: Mon, 16 Jan 2023 19:31:46 -0500 Subject: [PATCH] feat(cli): list users (#1341) --- docs/docs/features/img/list-users.png | Bin 0 -> 36213 bytes docs/docs/features/server-commands.md | 5 ++++ server/apps/cli/src/app.module.ts | 2 ++ .../cli/src/commands/list-users.command.ts | 23 ++++++++++++++++++ server/apps/cli/src/constants.ts | 9 +++++++ 5 files changed, 39 insertions(+) create mode 100644 docs/docs/features/img/list-users.png create mode 100644 server/apps/cli/src/commands/list-users.command.ts create mode 100644 server/apps/cli/src/constants.ts diff --git a/docs/docs/features/img/list-users.png b/docs/docs/features/img/list-users.png new file mode 100644 index 0000000000000000000000000000000000000000..02c6d8faea87af18e02df4eb6a92d6f1fd937aef GIT binary patch literal 36213 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 literal 0 HcmV?d00001 diff --git a/docs/docs/features/server-commands.md b/docs/docs/features/server-commands.md index 3ad7d3363f..872f12e65a 100644 --- a/docs/docs/features/server-commands.md +++ b/docs/docs/features/server-commands.md @@ -8,6 +8,7 @@ The `immich-server` docker image comes preinstalled with an administrative CLI ( | `reset-admin-password` | Reset the password for the admin user | | `disable-password-login` | Disable password login | | `enable-password-login` | Enable password login | +| `list-users` | List Immich users | ## How to run a command @@ -26,3 +27,7 @@ Disable Password Login Enabled Password Login ![Enable Password Login](./img/enable-password-login.png) + +List Users + +![List Users](./img/list-users.png) diff --git a/server/apps/cli/src/app.module.ts b/server/apps/cli/src/app.module.ts index 91af971c7a..e38c2d749d 100644 --- a/server/apps/cli/src/app.module.ts +++ b/server/apps/cli/src/app.module.ts @@ -2,6 +2,7 @@ import { DomainModule } from '@app/domain'; import { InfraModule, SystemConfigEntity } from '@app/infra'; import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; +import { ListUsersCommand } from './commands/list-users.command'; import { DisablePasswordLoginCommand, EnablePasswordLoginCommand } from './commands/password-login'; import { PromptPasswordQuestions, ResetAdminPasswordCommand } from './commands/reset-admin-password.command'; @@ -17,6 +18,7 @@ import { PromptPasswordQuestions, ResetAdminPasswordCommand } from './commands/r PromptPasswordQuestions, EnablePasswordLoginCommand, DisablePasswordLoginCommand, + ListUsersCommand, ], }) export class AppModule {} diff --git a/server/apps/cli/src/commands/list-users.command.ts b/server/apps/cli/src/commands/list-users.command.ts new file mode 100644 index 0000000000..58513ffe1b --- /dev/null +++ b/server/apps/cli/src/commands/list-users.command.ts @@ -0,0 +1,23 @@ +import { UserService } from '@app/domain'; +import { Command, CommandRunner } from 'nest-commander'; +import { CLI_USER } from '../constants'; + +@Command({ + name: 'list-users', + description: 'List Immich users', +}) +export class ListUsersCommand extends CommandRunner { + constructor(private userService: UserService) { + super(); + } + + async run(): Promise { + try { + const users = await this.userService.getAllUsers(CLI_USER, true); + console.dir(users); + } catch (error) { + console.error(error); + console.error('Unable to load users'); + } + } +} diff --git a/server/apps/cli/src/constants.ts b/server/apps/cli/src/constants.ts new file mode 100644 index 0000000000..cc9d1c72c7 --- /dev/null +++ b/server/apps/cli/src/constants.ts @@ -0,0 +1,9 @@ +import { AuthUserDto } from '@app/domain'; + +export const CLI_USER: AuthUserDto = { + id: 'cli', + email: 'cli@immich.app', + isAdmin: true, + isPublicUser: false, + isAllowUpload: true, +};