title: config.yaml
type: object
required: [ access_token, user_id, base_url, synapse_base_url, keyring, policy_rooms, actions ]
properties:
  base_url:
    type: string
    example: http://127.0.0.1:3080/_matrix
    format: uri
    pattern: ^https?://.+/_matrix$
  synapse_base_url:
    type: string
    example: http://127.0.0.1:3880/_synapse
    format: uri
    pattern: ^https?://.+/_synapse$
  keyring:
    type: string
    example: ./keyring.gpg
  access_token:
    type: string
  dry_run:
    type: boolean
  user_id:
    comment: 'The user_id tied to the access_token. Used for room shutdowns'
    type: string
    pattern: '@[\w\-]+:.+'
  policy_rooms:
    type: array
    items:
      type: string
      pattern: '![\w\-]+:.+'
  actions:
    type: array
    items:
      type: object
      oneOf:
      - required: [ tag ]
        properties:
          tag: { type: string, pattern: ^\w+$ }
      - required: [ tags ]
        properties:
          tags:
            type: array
            items: [ { type: string, pattern: ^\w+$ } ]
      anyOf:
      - required: [ user ]
      - required: [ room ]
      properties:
        user:
          properties:
            archive:
              properties:
                media:
                  comment: 'Save a copy of the identifiers for the last 255 media uploads by this user to disk. This does not save the actual uploads'
                  type: boolean
                rooms:
                  comment: 'Save a copy of all rooms this user was participating in to disk.'
                  type: boolean
            deactivate:
              type: boolean
              comment: 'Deactivate the User'
            notify:
              comment: 'Create an audit log in the audit room about the user.'
              type: boolean
            quarantine:
              comment: 'Quarantine all media uploaded by the user.'
              type: boolean
            # TODO: Add mjolnir list forwarding
        room:
          properties:
            archive:
              properties:
                media:
                  comment: 'Save a copy of the identifiers for the last 255 media uploads in this room to disk. This does not save the actual uploads'
                  type: boolean
                members:
                  comment: 'Save a copy of all users that were participating in this room to disk.'
                  type: boolean
            delist:
              comment: 'Remove the room from the room directory.'
              type: boolean
            notify:
              comment: 'Create an audit log in the audit room about this room.'
              type: boolean
            reason:
              comment: 'For shutdown. A publically visible reason.'
              type: string
            shutdown:
              comment: 'Shutdown the room'
              type: boolean
            silent:
              comment: 'For shutdown. If a notice room should not be created for the closed room.'
              type: boolean
            quarantine:
              comment: 'Quarantine all media uploaded in the room.'
              type: boolean