maestro/app/classes/state/fs/OwnerState.js
2020-03-03 16:47:51 -06:00

45 lines
1.4 KiB
JavaScript

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
}
}
module.exports = exports = OwnerState