swagger: "2.0"
info:
  description: Store API V1
  title: Store API V1
  version: 3.0.0
paths:
  /cgi-bin/luci/admin/store/token:
    get:
      tags:
        - token
      summary: 获取csrfToken（用于POST请求）
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ResponseStoreToken"
  /cgi-bin/luci/admin/store/installed:
    get:
      tags:
        - installed
      summary: 获取已安装的插件
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ResponseStoreInstalled"
  /cgi-bin/luci/admin/store/install:
    post:
      tags:
        - install
      summary: 安装插件。安装过程中使用taskd接口获取日志
      parameters:
        - in: "query"
          name: "token"
          type: string
          required: true
        - in: "query"
          name: "package"
          type: string
          required: true
        - in: "query"
          name: "autoconf"
          type: string
          description: "可选参数,表示安装完以后是否自动配置插件"
        - in: "query"
          name: "path"
          type: string
          description: "可选参数,表示安装完以后是否自动配置插件"
        - in: "query"
          name: "enable"
          type: string
          description: "可选参数,表示安装完以后是否自动配置插件"
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ResponseStore"
  /cgi-bin/luci/admin/store/autoconf:
    post:
      tags:
        - install
      summary: 自动配置插件
      parameters:
        - in: "query"
          name: "token"
          type: string
          required: true
        - in: "query"
          name: "package"
          type: string
          required: true
        - in: "query"
          name: "path"
          type: string
          description: "可选参数"
        - in: "query"
          name: "enable"
          type: string
          description: "可选参数"
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ResponseStore"
  /cgi-bin/luci/admin/store/remove:
    post:
      tags:
        - remove
      summary: 卸载插件
      parameters:
        - in: "query"
          name: "token"
          type: string
          required: true
        - in: "query"
          name: "package"
          type: string
          required: true
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ResponseStore"
  /cgi-bin/luci/admin/store/upgrade:
    post:
      tags:
        - upgrade
      summary: 更新插件
      parameters:
        - in: "query"
          name: "token"
          type: string
          required: true
        - in: "query"
          name: "package"
          type: string
          required: true
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ResponseStore"
  /cgi-bin/luci/admin/store/upload:
    post:
      tags:
        - upload
      summary: 上传插件
      description: "(文件上传表单，支持文件扩展名 .ipk,.run )"
      consumes:
        - multipart/form-data
      parameters:
        - in: formData
          name: file
          type: file
          description: The file to upload.
        - in: "query"
          name: "token"
          type: string
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ResponseStore"
  /cgi-bin/luci/admin/store/update:
    post:
      tags:
        - update
      summary: 刷新可用软件列表
      parameters:
        - in: "query"
          name: "token"
          type: string
          required: true
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ResponseStore"
  /cgi-bin/luci/admin/store/status:
    get:
      tags:
        - status
      summary: 查询特定软件状态
      parameters:
        - in: "query"
          name: "package"
          type: string
          required: true
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ResponseStoreStatus"
  /cgi-bin/luci/admin/store/log:
    get:
      tags:
        - log
      summary: 任务日志，已废弃
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ResponseStore"
  /cgi-bin/luci/admin/store/check_self_upgrade:
    get:
      tags:
        - check_self_upgrade
      summary: 检查iStore自身更新
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ResponseStoreCheckSelfUpgrade"
  /cgi-bin/luci/admin/store/do_self_upgrade:
    post:
      tags:
        - do_self_upgrade
      summary: 更新iStore自身
      parameters:
        - in: "query"
          name: "token"
          type: string
          required: true
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ResponseStore"
  /cgi-bin/luci/admin/store/get_block_devices:
    get:
      tags:
        - get_block_devices
      summary: 枚举块设备
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ResponseStoreGetBlockDevices"
  /cgi-bin/luci/admin/store/configured:
    get:
      tags:
        - configured
      summary: 检查插件是否已经配置过
      parameters:
        - in: "query"
          name: "uci"
          type: string
          required: true
          description: "要检查的uci配置文件名称"
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ResponseStoreConfigured"
  /cgi-bin/luci/admin/store/entrysh:
    post:
      tags:
        - entrysh
      summary: 查询插件运行状态，主要为了获取入口信息。
      description: 调用前应该检查meta数据中flags数组包含entrysh，注意如果是安装插件则检查服务器端的flags，如果是调用已安装插件则检查路由器端的flags。
      parameters:
        - in: "query"
          name: "token"
          type: string
          required: true
        - in: "query"
          name: "package"
          type: string
          description: "包名，例如aria2。支持英文逗号分隔多个包名。如果未提供，则返回所有支持entrysh的包"
        - in: "query"
          name: "hostname"
          type: string
          required: true
          description: "主机名，不包含端口。前端应该使用location.hostname获取"
        - in: "query"
          name: "update"
          type: integer
          description: "如果为1则强制更新缓存"
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ResponseStoreEntrysh"
        "400":
          description: Bad Request。hostname不合法
  /cgi-bin/luci/admin/store/docker_check_dir:
    get:
      tags:
        - docker_check_dir
      summary: 检查docker目录是否在系统盘
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ResponseDockerCheckDir"
  /cgi-bin/luci/admin/store/docker_check_migrate:
    get:
      tags:
        - docker_check_migrate
      summary: 检查docker迁移目标目录是否有效
      parameters:
        - in: "query"
          name: "path"
          type: string
          required: true
          description: "完整目标路径"
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ResponseDockerCheckMigrate"
  /cgi-bin/luci/admin/store/docker_migrate:
    post:
      tags:
        - docker_migrate
      summary: docker迁移到目标目录，异步
      description: 当返回code为0的时候，可以使用taskd接口展示日志，跟安装插件时一样
      parameters:
        - in: "query"
          name: "token"
          type: string
          required: true
        - in: "query"
          name: "path"
          type: string
          required: true
          description: "完整目标路径"
        - in: "query"
          name: "overwrite"
          type: string
          description: "如果docker_check_migrate返回的result是existed，使用此参数指定解决方案：‘true’表示覆盖目标目录；‘chdir’表示只修改路径不复制文件"
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ResponseStore"
  
definitions:
  ResponseStoreToken:
   type: object
   properties:
    token:
     type: string
  StoreInstalledApp:
    type: object
    properties:
      tutorial:
        type: string
        description: "教程"
      arch:
        type: array
        description: "适用的架构平台"
        items:
          type: string
      entry:
        type: string
        description: "对于的页面地址"
      author:
        type: string
        description: "作者"
      depends:
        type: array
        description: "关联的依赖"
        items:
          type: string
      time:
        type: integer
        description: "更新日期"
      tags:
        type: array
        description: "标签"
        items:
          type: string
      description_en:
        type: string
        description: "简介，英文"
      description:
        type: string
        description: "简介，英文"
      title:
        type: string
        description: "标题"
      release:
        type: integer
        description: "发布"
      website:
        type: string
        description: "官网"
      version:
        type: string
        description: "版本号"
      name:
        type: string
        description: "名称"
  ResponseStoreInstalled:
    type: array
    items:
      $ref: "#/definitions/StoreInstalledApp"
  ResponseStore:
    type: object
    properties:
      code:
        type: integer
      stdout:
        type: string
      stderr:
        type: string
  ResponseStoreStatus:
    type: object
    allOf:
      - $ref: "#/definitions/StoreInstalledApp"
    properties:
      installed:
        type: boolean
  ResponseStoreCheckSelfUpgrade:
    type: object
    properties:
      code:
        type: integer
        description: "为200时,msg会显示版本号"
      msg:
        type: string
        description: "内容"
  GetBlockDevice:
    type: object
    properties:
      dev:
        type: string
      uuid:
        type: string
      version:
        type: string
      label:
        type: string
      mount:
        type: string
      type:
        type: string
      size:
        type: string
  ResponseStoreGetBlockDevices:
    type: object
    properties:
      code:
        type: integer
        description: "为200时"
      msg:
        type: string
        description: "内容"
      data:
        type: object
        additionalProperties:
          $ref: "#/definitions/GetBlockDevice"
  ResponseStoreConfigured:
    type: object
    properties:
      code:
        type: integer
        description: "为200时"
      configured:
        type: boolean
  ResponseDockerCheckDir:
    type: object
    properties:
      code:
        type: integer
        description: "为200时"
      docker_on_system:
        type: boolean
        description: "docker数据在系统盘"
  ResponseDockerCheckMigrate:
    type: object
    properties:
      code:
        type: integer
        description: "为200时"
      result:
        type: string
        description: "检查结果。可能值‘good’，‘bad’，‘existed’"
      error:
        type: string
        description: "当result为bad时，此处返回错误日志"
  StoreEntrysh:
    type: object
    description: "状态和入口信息，不同插件可能有些不一样，仅列出常用公共参数"
    properties:
      app:
        type: string
        description: "插件名称"
      docker:
        type: boolean
        description: "如果是docker插件"
      running:
        type: boolean
        description: "是否运行中"
      deployed:
        type: boolean
        description: "如果是docker插件且未运行，则是否已经部署"
      web:
        type: string
        description: "url"
      href:
        type: string
        description: "web端直接跳转url"
    
  ResponseStoreEntrysh:
    type: object
    properties:
      code:
        type: integer
        description: "为200时"
      status:
        description: "处理成功的结果集"
        type: array
        items:
          $ref: "#/definitions/StoreEntrysh"
      errors:
        description: "处理失败的结果集"
        type: array
        items:
          type: object
          description: "失败信息"
          properties:
            app:
              type: string
              description: "插件名称"
            code:
              type: integer
              description: "404或500"
            msg:
              type: string
              description: "错误信息"

