{
  "swagger": "2.0",
  "info": {
    "description": "This is a service that provides secret management facilities",
    "version": "1.0.0",
    "title": "Secret Management Service",
    "contact": {
      "email": "kiran.k.kamineni@intel.com"
    },
    "license": {
      "name": "Apache 2.0",
      "url": "http://www.apache.org/licenses/LICENSE-2.0.html"
    }
  },
  "host": "aaf.onap.org:10443",
  "basePath": "/v1/sms/",
  "tags": [
    {
      "name": "domain",
      "description": "Operations related to Secret Domains"
    },
    {
      "name": "secret",
      "description": "Operations related to Secrets"
    }
  ],
  "schemes": [
    "https"
  ],
  "paths": {
    "/domain": {
      "post": {
        "tags": [
          "domain"
        ],
        "summary": "Add a new domain",
        "description": "",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/Domain"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Successful Creation",
            "schema": {
              "$ref": "#/definitions/Domain"
            }
          },
          "400": {
            "description": "Invalid input"
          },
          "500": {
            "description": "Internal Server Error"
          }
        }
      }
    },
    "/domain/{domainName}": {
      "delete": {
        "tags": [
          "domain"
        ],
        "description": "Deletes a domain with provided name",
        "summary": "Deletes a domain by name",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "domainName",
            "in": "path",
            "description": "Name of the domain",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Deletion"
          },
          "404": {
            "description": "Invalid Path or Path not found"
          }
        }
      }
    },
    "/domain/{domainName}/secret": {
      "post": {
        "tags": [
          "secret"
        ],
        "summary": "Add a new secret",
        "description": "",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "domainName",
            "in": "path",
            "description": "Name of the domain",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/Secret"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Successful Creation"
          },
          "404": {
            "description": "Invalid Path or Path not found"
          }
        }
      },
      "get": {
        "tags": [
          "secret"
        ],
        "description": "Gets all secret names in this domain",
        "summary": "List secret Names in this domain",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "domainName",
            "in": "path",
            "description": "Name of the domain in which to look at",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful operation",
            "schema": {
              "type": "object",
              "properties": {
                "secretnames": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "Array of strings referencing the secret names"
                }
              },
              "example": {
                "secretnames": [
                  "secretname1",
                  "secretname2",
                  "secretname3"
                ]
              }
            }
          },
          "404": {
            "description": "Invalid Path or Path not found"
          }
        }
      }
    },
    "/domain/{domainName}/secret/{secretName}": {
      "get": {
        "tags": [
          "secret"
        ],
        "summary": "Find Secret by Name",
        "description": "Returns a single secret",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "domainName",
            "in": "path",
            "description": "Name of the domain in which to look at",
            "required": true,
            "type": "string"
          },
          {
            "name": "secretName",
            "in": "path",
            "description": "Name of the secret which is needed",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "successful operation",
            "schema": {
              "$ref": "#/definitions/Secret"
            }
          },
          "404": {
            "description": "Invalid Path or Path not found"
          }
        }
      },
      "delete": {
        "tags": [
          "secret"
        ],
        "summary": "Deletes a Secret",
        "description": "",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "secretName",
            "in": "path",
            "description": "Name of Secret to Delete",
            "required": true,
            "type": "string"
          },
          {
            "name": "domainName",
            "in": "path",
            "required": true,
            "description": "Path to the SecretDomain which contains the Secret",
            "type": "string"
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Deletion"
          },
          "404": {
            "description": "Invalid Path or Path not found"
          }
        }
      }
    }
  },
  "securityDefinitions": {
    "token": {
      "type": "apiKey",
      "name": "token",
      "in": "header"
    }
  },
  "definitions": {
    "Credential": {
      "type": "object",
      "properties": {
        "username": {
          "type": "string"
        },
        "password": {
          "type": "string"
        }
      }
    },
    "Domain": {
      "type": "object",
      "properties": {
        "uuid": {
          "type": "string",
          "description": "Optional value provided by user. If user does not provide, server will auto generate"
        },
        "name": {
          "type": "string",
          "description": "Name of the secret domain under which all secrets will be stored"
        }
      }
    },
    "Secret": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the secret"
        },
        "values": {
          "description": "Map of key value pairs that constitute the secret",
          "type": "object",
          "additionalProperties": {
            "type": "object"
          },
          "example": {
            "name": "john",
            "Age": 40,
            "admin": true
          }
        }
      }
    }
  },
  "externalDocs": {
    "description": "Find out more about Swagger",
    "url": "http://swagger.io"
  }
}