docs: def login(self):
          """Login endpoint for the API returns a JWT and optionally a refresh token
          ---
          post:
            requestBody:
              required: true
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      username:
                        type: string
                      password:
                        type: string
                      provider:
                        type: string
                        enum:
                        - db
                        - ldap
                      refresh:
                        type: boolean
            responses:
              200:
                description: Authentication Successful
                content:
                  application/json:
                    schema:
                      type: object
                      properties:
                        access_token:
                          type: string
                        refresh_token:
                          type: string
              400:
                $ref: '#/components/responses/400'
              401:
                $ref: '#/components/responses/401'
              500:
                $ref: '#/components/responses/500'
          """
          if not request.is_json:
              return self.response_400(message="Request payload is not JSON")
          username = request.json.get(API_SECURITY_USERNAME_KEY, None)
          password = request.json.get(API_SECURITY_PASSWORD_KEY, None)
          provider = request.json.get(API_SECURITY_PROVIDER_KEY, None)
          refresh = request.json.get(API_SECURITY_REFRESH_KEY, False)
          if not username or not password or not provider:
              return self.response_400(message="Missing required parameter")
          # AUTH
          if provider == API_SECURITY_PROVIDER_DB:
              user = self.appbuilder.sm.auth_user_db(username, password)
          elif provider == API_SECURITY_PROVIDER_LDAP:
              user = self.appbuilder.sm.auth_user_ldap(username, password)
          else:
              return self.response_400(
                  message="Provider {} not supported".format(provider)
              )
          if not user:
              return self.response_401()
  
          # Identity can be any data that is json serializable
          resp = dict()
          resp[API_SECURITY_ACCESS_TOKEN_KEY] = create_access_token(
              identity=user.id, fresh=True
          )
          if refresh:
              resp[API_SECURITY_REFRESH_TOKEN_KEY] = create_refresh_token(
                  identity=user.id
              )
          return self.response(200, **resp)