ronething opened a new issue, #10823:
URL: https://github.com/apache/apisix/issues/10823

   ### Current Behavior
   
   When I use 
[secret](https://apisix.apache.org/docs/apisix/terminology/secret/), it will 
cause a 500 stack error when I delete the secret and send request to apisix. 
   
   ### Expected Behavior
   
   After delete secret and update consumer, if send request to apisix, it will 
return http status 401 but not cause 500.
   
   if it is a bug, maybe i can fix it if the priority is not high.
   
   ### Error Logs
   
   ```
   2024/01/15 17:25:54 [error] 27990#390598690: *25233 lua entry thread 
aborted: runtime error: 
...cuments/api7projects/opensource/apisix/apisix/secret.lua:61: attempt to 
index local 'v' (a boolean value)
   stack traceback:
   coroutine 0:
           ...cuments/api7projects/opensource/apisix/apisix/secret.lua: in 
function 'create_obj_fun'
           .../api7projects/opensource/apisix/apisix/core/lrucache.lua:95: in 
function 'secret_kv_lrucache'
           ...cuments/api7projects/opensource/apisix/apisix/secret.lua:88: in 
function 'secret_kv'
           ...cuments/api7projects/opensource/apisix/apisix/secret.lua:156: in 
function 'fetch_by_uri'
           ...cuments/api7projects/opensource/apisix/apisix/secret.lua:188: in 
function 'fetch'
           ...cuments/api7projects/opensource/apisix/apisix/secret.lua:211: in 
function 'fetch_secrets'
           ...ments/api7projects/opensource/apisix/apisix/consumer.lua:107: in 
function 'create_obj_fun'
           .../api7projects/opensource/apisix/apisix/core/lrucache.lua:95: in 
function 'lrucache'
           ...ments/api7projects/opensource/apisix/apisix/consumer.lua:116: in 
function 'consumers_kv'
           ...i7projects/opensource/apisix/apisix/plugins/key-auth.lua:88: in 
function 'phase_func'
           ...cuments/api7projects/opensource/apisix/apisix/plugin.lua:1095: in 
function 'run_plugin'
           ...Documents/api7projects/opensource/apisix/apisix/init.lua:633: in 
function 'http_access_phase'
           access_by_lua(nginx.conf:328):2: in main chunk, client: 127.0.0.1, 
server: _, request: "GET /anything HTTP/1.1", host: "127.0.0.1:9080"
   ```
   
   ### Steps to Reproduce
   
   ```shell
   $ docker run --name vault \
     --cap-add=IPC_LOCK \
     -e VAULT_DEV_ROOT_TOKEN_ID="root" \
     -e VAULT_ADDR="http://0.0.0.0:8200"; \
     -p 8200:8200 \
     vault:1.13.3 server -dev
   ```
   
   ```shell
   docker exec -it vault /bin/sh
   export VAULT_TOKEN='root'
   vault secrets enable -path="kv-v1" kv
   / # vault kv put kv-v1/apisix/jack auth-key=auth-one
   Success! Data written to: kv-v1/apisix/jack
   / # vault kv get kv-v1/apisix/jack
   ====== Data ======
   Key         Value
   ---         -----
   auth-key    auth-one
   ```
   
   ```
   # 1. create secret
   $ curl http://127.0.0.1:9180/apisix/admin/secrets/vault/mysecret \
   -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
   {
       "uri": "http://127.0.0.1:8200";,
       "prefix": "kv-v1/apisix",
       "token": "root"
   }'
   
{"key":"/apisix/secrets/vault/mysecret","value":{"id":"vault/mysecret","uri":"http://127.0.0.1:8200","token":"root","prefix":"kv-v1/apisix","create_time":1705310640,"update_time":1705310640}}
   
   # 2. create consumer
   $ curl http://127.0.0.1:9180/apisix/admin/consumers \
   -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
   {
       "username": "jack",
       "plugins": {
           "key-auth": {
               "key": "$secret://vault/mysecret/jack/auth-key"
           }
       }
   }'
   
{"key":"/apisix/consumers/jack","value":{"plugins":{"key-auth":{"key":"$secret://vault/mysecret/jack/auth-key"}},"username":"jack","update_time":1705310647,"create_time":1705310647}}
   
   # 3. create route
   $ curl http://127.0.0.1:9180/apisix/admin/routes/1 \
   -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
   {
       "uri": "/anything",
       "upstream": {
           "type": "roundrobin",
           "nodes": {
               "httpbin.org": 1
           }
       },
       "plugins": {
           "key-auth": {}
       }
   }'
   HTTP/1.1 201 Created
   Date: Mon, 15 Jan 2024 09:24:13 GMT
   Content-Type: application/json
   Transfer-Encoding: chunked
   Connection: keep-alive
   Server: APISIX/3.2.2
   Access-Control-Allow-Origin: *
   Access-Control-Allow-Credentials: true
   Access-Control-Expose-Headers: *
   Access-Control-Max-Age: 3600
   X-API-VERSION: v3
   
   
{"key":"/apisix/routes/1","value":{"plugins":{"key-auth":{"query":"apikey","hide_credentials":false,"header":"apikey"}},"status":1,"id":"1","uri":"/anything","upstream":{"pass_host":"pass","nodes":{"httpbin.org":1},"type":"roundrobin","hash_on":"vars","scheme":"http"},"priority":0,"create_time":1705310653,"update_time":1705310653}}
   
   # 4. send request, return 200
   $ curl http://127.0.0.1:9080/anything -H "apikey: auth-one" -v
   * Uses proxy env variable no_proxy == '192.168.49.2,localhost,127.0.0.1'
   *   Trying 127.0.0.1:9080...
   * Connected to 127.0.0.1 (127.0.0.1) port 9080
   > GET /anything HTTP/1.1
   > Host: 127.0.0.1:9080
   > User-Agent: curl/8.4.0
   > Accept: */*
   > apikey: auth-one
   >
   < HTTP/1.1 200 OK
   < Content-Type: application/json
   < Content-Length: 413
   < Connection: keep-alive
   < Date: Mon, 15 Jan 2024 09:25:26 GMT
   < Access-Control-Allow-Origin: *
   < Access-Control-Allow-Credentials: true
   < Server: APISIX/3.2.2
   <
   {
     "args": {},
     "data": "",
     "files": {},
     "form": {},
     "headers": {
       "Accept": "*/*",
       "Apikey": "auth-one",
       "Host": "127.0.0.1",
       "User-Agent": "curl/8.4.0",
       "X-Amzn-Trace-Id": "Root=1-65a4fa06-6d7a8d426c9a503a56b23c81",
       "X-Forwarded-Host": "127.0.0.1"
     },
     "json": null,
     "method": "GET",
     "origin": "127.0.0.1, 58.253.51.238",
     "url": "http://127.0.0.1/anything";
   }
   * Connection #0 to host 127.0.0.1 left intact
   
   # 5. delete secret
   $ curl http://127.0.0.1:9180/apisix/admin/secrets/vault/mysecret \
   -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X DELETE
   
   {"deleted":"1","key":"/apisix/secrets/vault/mysecret"}
   
   # 6. get secret
   $ curl http://127.0.0.1:9180/apisix/admin/secrets/vault/mysecret \
   -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X GET
   
   {"message":"Key not found"}
   
   # 7. update consumer for refresh lrucache
   $ curl http://127.0.0.1:9180/apisix/admin/consumers \
   -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
   {
       "username": "jack",
       "plugins": {
           "key-auth": {
               "key": "$secret://vault/mysecret/jack/auth-key"
           }
       }
   }'
   
{"key":"/apisix/consumers/jack","value":{"plugins":{"key-auth":{"key":"$secret://vault/mysecret/jack/auth-key"}},"username":"jack","update_time":1705310750,"create_time":1705310647}}
   
   # 8. send request, then return 500
   $ curl http://127.0.0.1:9080/anything -H "apikey: auth-one" -v
   * Uses proxy env variable no_proxy == '192.168.49.2,localhost,127.0.0.1'
   *   Trying 127.0.0.1:9080...
   * Connected to 127.0.0.1 (127.0.0.1) port 9080
   > GET /anything HTTP/1.1
   > Host: 127.0.0.1:9080
   > User-Agent: curl/8.4.0
   > Accept: */*
   > apikey: auth-one
   >
   < HTTP/1.1 500 Internal Server Error
   < Date: Mon, 15 Jan 2024 09:25:54 GMT
   < Content-Type: text/html; charset=utf-8
   < Content-Length: 174
   < Connection: close
   < Server: APISIX/3.2.2
   <
   <html>
   <head><title>500 Internal Server Error</title></head>
   <body>
   <center><h1>500 Internal Server Error</h1></center>
   <hr><center>openresty</center>
   </body>
   </html>
   * Closing connection
   ```
   
   ### Environment
   
   - APISIX version (run `apisix version`): 
https://github.com/apache/apisix/tree/release/3.2
   - Operating system (run `uname -a`):
   - OpenResty / Nginx version (run `openresty -V` or `nginx -V`):
   - etcd version, if relevant (run `curl 
http://127.0.0.1:9090/v1/server_info`):
   - APISIX Dashboard version, if relevant:
   - Plugin runner version, for issues related to plugin runners:
   - LuaRocks version, for installation issues (run `luarocks --version`):
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to