constructor({ name, token, username, password, 'client-certificate': certificatePath,
      'client-certificate-data': certificateBase64, 'client-key': keyPath,
      'client-key-data': keyBase64, 'auth-provider': auth_provider, exec }) {
    if (typeof name === 'undefined') {
      throw Error('User name must be defined!');
    }
    if (typeof auth_provider !== 'undefined') {
      this.auth_provider = new AuthProvider(Object.assign({ name: auth_provider.name, config: auth_provider.config }));
    }
    if (typeof exec !== 'undefined') {
      // for now let's treat exec like an AuthProvider
      this.auth_provider = new AuthProvider(Object.assign({ name: 'exec', config: exec }));
    }
    this.name = name;
    this.token = token;
    this.password = password;
    this.certificatePath = certificatePath;
    this.certificateBase64 = certificateBase64;
    this.keyPath = keyPath;
    this.keyBase64 = keyBase64;
    if (typeof username === 'undefined') {
      this.username = name.split('/')[0];
    } else {
      this.username = username;
    }
  }
users:
- name: blue-user
  user:
    token: blue-token
- name: green-user
  user:
    client-certificate: path/to/my/client/cert
    client-key: path/to/my/client/key
- name: orange-user
  user:
    auth-provider:
      name: oidc
      config:
        client-id: xxx
        client-secret: xxx
        id-token: ...idtoken...
        idp-issuer-url: https://myoidcprovider.com
        refresh-token: ...refreshtoken...