const State = require('../State') class OwnerState extends State { static get services() { return [...super.services, 'output'] } async apply() { if ( !(await this.check()) ) { const path = await this._path() await path.ownership(this._config.owners, !!this._config.recursive) } } async check() { const path = await this._path() const owners = await path.ownership() if ( this._config.owners.user && owners.user !== this._config.owners.user ) return false else if ( this._config.owners.group && owners.group !== this._config.owners.group ) return false return true } async reverse() { if ( await this.check() ) { if (this._config.revert_to) { const path = await this._path() await path.ownership(this._config.revert_to, !!this._config.recursive) } else { this.output.warn(`Owner state does not support automatic reversal. Specify the revert_to config key for this functionality. (Host: ${this._host.name})`) } } } async _path() { const path = await this._host.get_path(this._config.path) await path.classify() if ( !path.is_valid() ) throw new Error(`Invalid path for OwnerState: ${path}`) return path } failure_message() { return `The ownership state of the file "${this._config.path}" on host "${this._host.name}" is invalid.` } check_message() { return this.failure_message() } } module.exports = exports = OwnerState