mirror of
				https://github.com/immich-app/immich.git
				synced 2025-11-04 03:27:09 -05:00 
			
		
		
		
	chore: remove deprecated controller (#13189)
This commit is contained in:
		
							parent
							
								
									dc18731bab
								
							
						
					
					
						commit
						08db817d14
					
				@ -1,204 +0,0 @@
 | 
				
			|||||||
import { LoginResponseDto } from '@immich/sdk';
 | 
					 | 
				
			||||||
import { createUserDto } from 'src/fixtures';
 | 
					 | 
				
			||||||
import { errorDto } from 'src/responses';
 | 
					 | 
				
			||||||
import { app, utils } from 'src/utils';
 | 
					 | 
				
			||||||
import request from 'supertest';
 | 
					 | 
				
			||||||
import { beforeAll, describe, expect, it } from 'vitest';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
describe('/server-info', () => {
 | 
					 | 
				
			||||||
  let admin: LoginResponseDto;
 | 
					 | 
				
			||||||
  let nonAdmin: LoginResponseDto;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  beforeAll(async () => {
 | 
					 | 
				
			||||||
    await utils.resetDatabase();
 | 
					 | 
				
			||||||
    admin = await utils.adminSetup({ onboarding: false });
 | 
					 | 
				
			||||||
    nonAdmin = await utils.userSetup(admin.accessToken, createUserDto.user1);
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  describe('GET /server-info/about', () => {
 | 
					 | 
				
			||||||
    it('should require authentication', async () => {
 | 
					 | 
				
			||||||
      const { status, body } = await request(app).get('/server-info/about');
 | 
					 | 
				
			||||||
      expect(status).toBe(401);
 | 
					 | 
				
			||||||
      expect(body).toEqual(errorDto.unauthorized);
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    it('should return about information', async () => {
 | 
					 | 
				
			||||||
      const { status, body } = await request(app)
 | 
					 | 
				
			||||||
        .get('/server-info/about')
 | 
					 | 
				
			||||||
        .set('Authorization', `Bearer ${admin.accessToken}`);
 | 
					 | 
				
			||||||
      expect(status).toBe(200);
 | 
					 | 
				
			||||||
      expect(body).toEqual({
 | 
					 | 
				
			||||||
        version: expect.any(String),
 | 
					 | 
				
			||||||
        versionUrl: expect.any(String),
 | 
					 | 
				
			||||||
        repository: 'immich-app/immich',
 | 
					 | 
				
			||||||
        repositoryUrl: 'https://github.com/immich-app/immich',
 | 
					 | 
				
			||||||
        build: '1234567890',
 | 
					 | 
				
			||||||
        buildUrl: 'https://github.com/immich-app/immich/actions/runs/1234567890',
 | 
					 | 
				
			||||||
        buildImage: 'e2e',
 | 
					 | 
				
			||||||
        buildImageUrl: 'https://github.com/immich-app/immich/pkgs/container/immich-server',
 | 
					 | 
				
			||||||
        sourceRef: 'e2e',
 | 
					 | 
				
			||||||
        sourceCommit: 'e2eeeeeeeeeeeeeeeeee',
 | 
					 | 
				
			||||||
        sourceUrl: 'https://github.com/immich-app/immich/commit/e2eeeeeeeeeeeeeeeeee',
 | 
					 | 
				
			||||||
        nodejs: expect.any(String),
 | 
					 | 
				
			||||||
        ffmpeg: expect.any(String),
 | 
					 | 
				
			||||||
        imagemagick: expect.any(String),
 | 
					 | 
				
			||||||
        libvips: expect.any(String),
 | 
					 | 
				
			||||||
        exiftool: expect.any(String),
 | 
					 | 
				
			||||||
        licensed: false,
 | 
					 | 
				
			||||||
      });
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  describe('GET /server-info/storage', () => {
 | 
					 | 
				
			||||||
    it('should require authentication', async () => {
 | 
					 | 
				
			||||||
      const { status, body } = await request(app).get('/server-info/storage');
 | 
					 | 
				
			||||||
      expect(status).toBe(401);
 | 
					 | 
				
			||||||
      expect(body).toEqual(errorDto.unauthorized);
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    it('should return the disk information', async () => {
 | 
					 | 
				
			||||||
      const { status, body } = await request(app)
 | 
					 | 
				
			||||||
        .get('/server-info/storage')
 | 
					 | 
				
			||||||
        .set('Authorization', `Bearer ${admin.accessToken}`);
 | 
					 | 
				
			||||||
      expect(status).toBe(200);
 | 
					 | 
				
			||||||
      expect(body).toEqual({
 | 
					 | 
				
			||||||
        diskAvailable: expect.any(String),
 | 
					 | 
				
			||||||
        diskAvailableRaw: expect.any(Number),
 | 
					 | 
				
			||||||
        diskSize: expect.any(String),
 | 
					 | 
				
			||||||
        diskSizeRaw: expect.any(Number),
 | 
					 | 
				
			||||||
        diskUsagePercentage: expect.any(Number),
 | 
					 | 
				
			||||||
        diskUse: expect.any(String),
 | 
					 | 
				
			||||||
        diskUseRaw: expect.any(Number),
 | 
					 | 
				
			||||||
      });
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  describe('GET /server-info/ping', () => {
 | 
					 | 
				
			||||||
    it('should respond with pong', async () => {
 | 
					 | 
				
			||||||
      const { status, body } = await request(app).get('/server-info/ping');
 | 
					 | 
				
			||||||
      expect(status).toBe(200);
 | 
					 | 
				
			||||||
      expect(body).toEqual({ res: 'pong' });
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  describe('GET /server-info/version', () => {
 | 
					 | 
				
			||||||
    it('should respond with the server version', async () => {
 | 
					 | 
				
			||||||
      const { status, body } = await request(app).get('/server-info/version');
 | 
					 | 
				
			||||||
      expect(status).toBe(200);
 | 
					 | 
				
			||||||
      expect(body).toEqual({
 | 
					 | 
				
			||||||
        major: expect.any(Number),
 | 
					 | 
				
			||||||
        minor: expect.any(Number),
 | 
					 | 
				
			||||||
        patch: expect.any(Number),
 | 
					 | 
				
			||||||
      });
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  describe('GET /server-info/features', () => {
 | 
					 | 
				
			||||||
    it('should respond with the server features', async () => {
 | 
					 | 
				
			||||||
      const { status, body } = await request(app).get('/server-info/features');
 | 
					 | 
				
			||||||
      expect(status).toBe(200);
 | 
					 | 
				
			||||||
      expect(body).toEqual({
 | 
					 | 
				
			||||||
        smartSearch: false,
 | 
					 | 
				
			||||||
        configFile: false,
 | 
					 | 
				
			||||||
        duplicateDetection: false,
 | 
					 | 
				
			||||||
        facialRecognition: false,
 | 
					 | 
				
			||||||
        importFaces: false,
 | 
					 | 
				
			||||||
        map: true,
 | 
					 | 
				
			||||||
        reverseGeocoding: true,
 | 
					 | 
				
			||||||
        oauth: false,
 | 
					 | 
				
			||||||
        oauthAutoLaunch: false,
 | 
					 | 
				
			||||||
        passwordLogin: true,
 | 
					 | 
				
			||||||
        search: true,
 | 
					 | 
				
			||||||
        sidecar: true,
 | 
					 | 
				
			||||||
        trash: true,
 | 
					 | 
				
			||||||
        email: false,
 | 
					 | 
				
			||||||
      });
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  describe('GET /server-info/config', () => {
 | 
					 | 
				
			||||||
    it('should respond with the server configuration', async () => {
 | 
					 | 
				
			||||||
      const { status, body } = await request(app).get('/server-info/config');
 | 
					 | 
				
			||||||
      expect(status).toBe(200);
 | 
					 | 
				
			||||||
      expect(body).toEqual({
 | 
					 | 
				
			||||||
        loginPageMessage: '',
 | 
					 | 
				
			||||||
        oauthButtonText: 'Login with OAuth',
 | 
					 | 
				
			||||||
        trashDays: 30,
 | 
					 | 
				
			||||||
        userDeleteDelay: 7,
 | 
					 | 
				
			||||||
        isInitialized: true,
 | 
					 | 
				
			||||||
        externalDomain: '',
 | 
					 | 
				
			||||||
        isOnboarded: false,
 | 
					 | 
				
			||||||
        mapDarkStyleUrl: 'https://tiles.immich.cloud/v1/style/dark.json',
 | 
					 | 
				
			||||||
        mapLightStyleUrl: 'https://tiles.immich.cloud/v1/style/light.json',
 | 
					 | 
				
			||||||
      });
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  describe('GET /server-info/statistics', () => {
 | 
					 | 
				
			||||||
    it('should require authentication', async () => {
 | 
					 | 
				
			||||||
      const { status, body } = await request(app).get('/server-info/statistics');
 | 
					 | 
				
			||||||
      expect(status).toBe(401);
 | 
					 | 
				
			||||||
      expect(body).toEqual(errorDto.unauthorized);
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    it('should only work for admins', async () => {
 | 
					 | 
				
			||||||
      const { status, body } = await request(app)
 | 
					 | 
				
			||||||
        .get('/server-info/statistics')
 | 
					 | 
				
			||||||
        .set('Authorization', `Bearer ${nonAdmin.accessToken}`);
 | 
					 | 
				
			||||||
      expect(status).toBe(403);
 | 
					 | 
				
			||||||
      expect(body).toEqual(errorDto.forbidden);
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    it('should return the server stats', async () => {
 | 
					 | 
				
			||||||
      const { status, body } = await request(app)
 | 
					 | 
				
			||||||
        .get('/server-info/statistics')
 | 
					 | 
				
			||||||
        .set('Authorization', `Bearer ${admin.accessToken}`);
 | 
					 | 
				
			||||||
      expect(status).toBe(200);
 | 
					 | 
				
			||||||
      expect(body).toEqual({
 | 
					 | 
				
			||||||
        photos: 0,
 | 
					 | 
				
			||||||
        usage: 0,
 | 
					 | 
				
			||||||
        usageByUser: [
 | 
					 | 
				
			||||||
          {
 | 
					 | 
				
			||||||
            quotaSizeInBytes: null,
 | 
					 | 
				
			||||||
            photos: 0,
 | 
					 | 
				
			||||||
            usage: 0,
 | 
					 | 
				
			||||||
            userName: 'Immich Admin',
 | 
					 | 
				
			||||||
            userId: admin.userId,
 | 
					 | 
				
			||||||
            videos: 0,
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          {
 | 
					 | 
				
			||||||
            quotaSizeInBytes: null,
 | 
					 | 
				
			||||||
            photos: 0,
 | 
					 | 
				
			||||||
            usage: 0,
 | 
					 | 
				
			||||||
            userName: 'User 1',
 | 
					 | 
				
			||||||
            userId: nonAdmin.userId,
 | 
					 | 
				
			||||||
            videos: 0,
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
        ],
 | 
					 | 
				
			||||||
        videos: 0,
 | 
					 | 
				
			||||||
      });
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  describe('GET /server-info/media-types', () => {
 | 
					 | 
				
			||||||
    it('should return accepted media types', async () => {
 | 
					 | 
				
			||||||
      const { status, body } = await request(app).get('/server-info/media-types');
 | 
					 | 
				
			||||||
      expect(status).toBe(200);
 | 
					 | 
				
			||||||
      expect(body).toEqual({
 | 
					 | 
				
			||||||
        sidecar: ['.xmp'],
 | 
					 | 
				
			||||||
        image: expect.any(Array),
 | 
					 | 
				
			||||||
        video: expect.any(Array),
 | 
					 | 
				
			||||||
      });
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  describe('GET /server-info/theme', () => {
 | 
					 | 
				
			||||||
    it('should respond with the server theme', async () => {
 | 
					 | 
				
			||||||
      const { status, body } = await request(app).get('/server-info/theme');
 | 
					 | 
				
			||||||
      expect(status).toBe(200);
 | 
					 | 
				
			||||||
      expect(body).toEqual({
 | 
					 | 
				
			||||||
        customCss: '',
 | 
					 | 
				
			||||||
      });
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
@ -19,7 +19,6 @@ import { OAuthController } from 'src/controllers/oauth.controller';
 | 
				
			|||||||
import { PartnerController } from 'src/controllers/partner.controller';
 | 
					import { PartnerController } from 'src/controllers/partner.controller';
 | 
				
			||||||
import { PersonController } from 'src/controllers/person.controller';
 | 
					import { PersonController } from 'src/controllers/person.controller';
 | 
				
			||||||
import { SearchController } from 'src/controllers/search.controller';
 | 
					import { SearchController } from 'src/controllers/search.controller';
 | 
				
			||||||
import { ServerInfoController } from 'src/controllers/server-info.controller';
 | 
					 | 
				
			||||||
import { ServerController } from 'src/controllers/server.controller';
 | 
					import { ServerController } from 'src/controllers/server.controller';
 | 
				
			||||||
import { SessionController } from 'src/controllers/session.controller';
 | 
					import { SessionController } from 'src/controllers/session.controller';
 | 
				
			||||||
import { SharedLinkController } from 'src/controllers/shared-link.controller';
 | 
					import { SharedLinkController } from 'src/controllers/shared-link.controller';
 | 
				
			||||||
@ -57,7 +56,6 @@ export const controllers = [
 | 
				
			|||||||
  ReportController,
 | 
					  ReportController,
 | 
				
			||||||
  SearchController,
 | 
					  SearchController,
 | 
				
			||||||
  ServerController,
 | 
					  ServerController,
 | 
				
			||||||
  ServerInfoController,
 | 
					 | 
				
			||||||
  SessionController,
 | 
					  SessionController,
 | 
				
			||||||
  SharedLinkController,
 | 
					  SharedLinkController,
 | 
				
			||||||
  StackController,
 | 
					  StackController,
 | 
				
			||||||
 | 
				
			|||||||
@ -1,84 +0,0 @@
 | 
				
			|||||||
import { Controller, Get } from '@nestjs/common';
 | 
					 | 
				
			||||||
import { ApiExcludeController, ApiTags } from '@nestjs/swagger';
 | 
					 | 
				
			||||||
import { EndpointLifecycle } from 'src/decorators';
 | 
					 | 
				
			||||||
import {
 | 
					 | 
				
			||||||
  ServerAboutResponseDto,
 | 
					 | 
				
			||||||
  ServerConfigDto,
 | 
					 | 
				
			||||||
  ServerFeaturesDto,
 | 
					 | 
				
			||||||
  ServerMediaTypesResponseDto,
 | 
					 | 
				
			||||||
  ServerPingResponse,
 | 
					 | 
				
			||||||
  ServerStatsResponseDto,
 | 
					 | 
				
			||||||
  ServerStorageResponseDto,
 | 
					 | 
				
			||||||
  ServerThemeDto,
 | 
					 | 
				
			||||||
  ServerVersionResponseDto,
 | 
					 | 
				
			||||||
} from 'src/dtos/server.dto';
 | 
					 | 
				
			||||||
import { Authenticated } from 'src/middleware/auth.guard';
 | 
					 | 
				
			||||||
import { ServerService } from 'src/services/server.service';
 | 
					 | 
				
			||||||
import { VersionService } from 'src/services/version.service';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@ApiExcludeController()
 | 
					 | 
				
			||||||
@ApiTags('Server Info')
 | 
					 | 
				
			||||||
@Controller('server-info')
 | 
					 | 
				
			||||||
export class ServerInfoController {
 | 
					 | 
				
			||||||
  constructor(
 | 
					 | 
				
			||||||
    private service: ServerService,
 | 
					 | 
				
			||||||
    private versionService: VersionService,
 | 
					 | 
				
			||||||
  ) {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  @Get('about')
 | 
					 | 
				
			||||||
  @EndpointLifecycle({ deprecatedAt: 'v1.107.0' })
 | 
					 | 
				
			||||||
  @Authenticated()
 | 
					 | 
				
			||||||
  getAboutInfo(): Promise<ServerAboutResponseDto> {
 | 
					 | 
				
			||||||
    return this.service.getAboutInfo();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  @Get('storage')
 | 
					 | 
				
			||||||
  @EndpointLifecycle({ deprecatedAt: 'v1.107.0' })
 | 
					 | 
				
			||||||
  @Authenticated()
 | 
					 | 
				
			||||||
  getStorage(): Promise<ServerStorageResponseDto> {
 | 
					 | 
				
			||||||
    return this.service.getStorage();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  @Get('ping')
 | 
					 | 
				
			||||||
  @EndpointLifecycle({ deprecatedAt: 'v1.107.0' })
 | 
					 | 
				
			||||||
  pingServer(): ServerPingResponse {
 | 
					 | 
				
			||||||
    return this.service.ping();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  @Get('version')
 | 
					 | 
				
			||||||
  @EndpointLifecycle({ deprecatedAt: 'v1.107.0' })
 | 
					 | 
				
			||||||
  getServerVersion(): ServerVersionResponseDto {
 | 
					 | 
				
			||||||
    return this.versionService.getVersion();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  @Get('features')
 | 
					 | 
				
			||||||
  @EndpointLifecycle({ deprecatedAt: 'v1.107.0' })
 | 
					 | 
				
			||||||
  getServerFeatures(): Promise<ServerFeaturesDto> {
 | 
					 | 
				
			||||||
    return this.service.getFeatures();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  @Get('theme')
 | 
					 | 
				
			||||||
  @EndpointLifecycle({ deprecatedAt: 'v1.107.0' })
 | 
					 | 
				
			||||||
  getTheme(): Promise<ServerThemeDto> {
 | 
					 | 
				
			||||||
    return this.service.getTheme();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  @Get('config')
 | 
					 | 
				
			||||||
  @EndpointLifecycle({ deprecatedAt: 'v1.107.0' })
 | 
					 | 
				
			||||||
  getServerConfig(): Promise<ServerConfigDto> {
 | 
					 | 
				
			||||||
    return this.service.getSystemConfig();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  @Get('statistics')
 | 
					 | 
				
			||||||
  @EndpointLifecycle({ deprecatedAt: 'v1.107.0' })
 | 
					 | 
				
			||||||
  @Authenticated({ admin: true })
 | 
					 | 
				
			||||||
  getServerStatistics(): Promise<ServerStatsResponseDto> {
 | 
					 | 
				
			||||||
    return this.service.getStatistics();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  @Get('media-types')
 | 
					 | 
				
			||||||
  @EndpointLifecycle({ deprecatedAt: 'v1.107.0' })
 | 
					 | 
				
			||||||
  getSupportedMediaTypes(): ServerMediaTypesResponseDto {
 | 
					 | 
				
			||||||
    return this.service.getSupportedMediaTypes();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user