immich-app / immich

High performance self-hosted photo and video management solution.
https://immich.app
GNU Affero General Public License v3.0
44.7k stars 2.17k forks source link

DELETE requests on the API doesn't work #8117

Closed adri1m64 closed 5 months ago

adri1m64 commented 5 months ago

The bug

Hello, i've an issue with the API. I can't use the DELETE request put the GET is working. I wanted to delete my orphans assets so first I tried the recommended script but it return:An error occurred: 400 Client Error: Bad Request for url: https://MYIP.COM/api/asset (I've changed with my ip it's just for example). So I tried to create my own script but at the moment of the request, it return me {"message":"Not found or no asset.delete access","error":"Bad Request","statusCode":400}.

Thank you

The OS that Immich Server is running on

Docker on Windows

Version of Immich Server

v1.99.0

Version of Immich Mobile App

1.99.0 build.129

Platform with the issue

Your docker-compose.yml content

version: "3.8"

#
# WARNING: Make sure to use the docker-compose.yml of the current release:
#
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
#
# The compose file on main may not be compatible with the latest release.
#

name: immich

services:
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    command: [ "start.sh", "immich" ]
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env
    ports:
      - 2283:3001
    depends_on:
      - redis
      - database
    restart: always

  immich-microservices:
    container_name: immich_microservices
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/hardware-transcoding
    #   file: hwaccel.transcoding.yml 
    #   service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
    command: [ "start.sh", "microservices" ]
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env
    depends_on:
      - redis
      - database
    restart: always

  immich-machine-learning:
    container_name: immich_machine_learning
    # For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.
    # Example tag: ${IMMICH_VERSION:-release}-cuda
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
    #   file: hwaccel.ml.yml
    #   service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    restart: always

  redis:
    container_name: immich_redis
    image: redis:6.2-alpine@sha256:afb290a0a0d0b2bd7537b62ebff1eb84d045c757c1c31ca2ca48c79536c0de82
    restart: always

  database:
    container_name: immich_postgres
    image: tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
    env_file:
      - .env
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
    volumes:
      - pgdata:/var/lib/postgresql/data
    restart: always

volumes:
  pgdata:
  model-cache:

Your .env content

# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables

# The location where your uploaded files are stored
UPLOAD_LOCATION=./library

# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release

# Connection secrets for postgres and typesense. You should change these to random passwords
TYPESENSE_API_KEY=some-random-text
DB_PASSWORD=postgres

# The values below this line do not need to be changed
###################################################################################
DB_HOSTNAME=immich_postgres
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

REDIS_HOSTNAME=immich_redis

Reproduction steps

1. Import Python script
2. Entered my ip and my api key
3. Cried when I saw the result

Additional information

No response

schuhbacca commented 5 months ago

Can you share the script you created?

adri1m64 commented 5 months ago

hey, sure:

import json
import requests

fichier = open(r"C:/Users/adrie/Downloads/orphans.json" ,"r")
dico = json.loads(fichier.read())   #Ouverture du fichier
fichier.close()
print("ouverture du fichier")
res = []

for i in dico:
    res.append(i["entityId"]) #On crée une liste des entity id

print("liste crée")

final = []
for i in res:
    if i not in final:
        final.append(i)

print("tri effectué")

url = "https://myip.com/api/asset"

for i in final:
  payload = json.dumps({
    "force": True,
    "ids": [
      str(i)
    ]
  })
  headers = {
    'Content-Type': 'application/json',
    'x-api-key': 'apikey'
  }

  response = requests.request("DELETE", url, headers=headers, data=payload)

  print(response.text)

Sorry it's in French but the comments are

The ip and api key are correct in my script because the GET request are working, i just change to not publish it.

Thank you!