parent
3d1e28e574
commit
993fe072e2
@ -1,58 +1,84 @@
|
|||||||
import { readFileSync, writeFileSync } from 'fs'
|
import { readFileSync, writeFileSync, statSync } from 'fs'
|
||||||
|
import { resolve } from 'path'
|
||||||
import yaml from 'js-yaml'
|
import yaml from 'js-yaml'
|
||||||
import { CONFIG_FILE } from './autorestic'
|
import { flags } from './autorestic'
|
||||||
import { Backend, Config } from './types'
|
import { Backend, Config } from './types'
|
||||||
import { makeObjectKeysLowercase, rand } from './utils'
|
import { makeObjectKeysLowercase, rand } from './utils'
|
||||||
|
import { homedir } from 'os'
|
||||||
|
|
||||||
export const normalizeAndCheckBackends = (config: Config) => {
|
export const normalizeAndCheckBackends = (config: Config) => {
|
||||||
config.backends = makeObjectKeysLowercase(config.backends)
|
config.backends = makeObjectKeysLowercase(config.backends)
|
||||||
|
|
||||||
for (const [name, { type, path, key, ...rest }] of Object.entries(config.backends)) {
|
for (const [name, { type, path, key, ...rest }] of Object.entries(
|
||||||
|
config.backends
|
||||||
if (!type || !path) throw new Error(`The backend "${name}" is missing some required attributes`)
|
)) {
|
||||||
|
if (!type || !path)
|
||||||
const tmp: any = {
|
throw new Error(
|
||||||
type,
|
`The backend "${name}" is missing some required attributes`
|
||||||
path,
|
)
|
||||||
key: key || rand(128),
|
|
||||||
}
|
const tmp: any = {
|
||||||
for (const [key, value] of Object.entries(rest))
|
type,
|
||||||
tmp[key.toUpperCase()] = value
|
path,
|
||||||
|
key: key || rand(128),
|
||||||
config.backends[name] = tmp as Backend
|
}
|
||||||
}
|
for (const [key, value] of Object.entries(rest))
|
||||||
|
tmp[key.toUpperCase()] = value
|
||||||
|
|
||||||
|
config.backends[name] = tmp as Backend
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export const normalizeAndCheckBackups = (config: Config) => {
|
export const normalizeAndCheckBackups = (config: Config) => {
|
||||||
config.locations = makeObjectKeysLowercase(config.locations)
|
config.locations = makeObjectKeysLowercase(config.locations)
|
||||||
const backends = Object.keys(config.backends)
|
const backends = Object.keys(config.backends)
|
||||||
|
|
||||||
const checkDestination = (backend: string, backup: string) => {
|
const checkDestination = (backend: string, backup: string) => {
|
||||||
if (!backends.includes(backend))
|
if (!backends.includes(backend))
|
||||||
throw new Error(`Cannot find the backend "${backend}" for "${backup}"`)
|
throw new Error(`Cannot find the backend "${backend}" for "${backup}"`)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const [name, { from, to, ...rest }] of Object.entries(config.locations)) {
|
for (const [name, { from, to, ...rest }] of Object.entries(
|
||||||
if (!from || !to) throw new Error(`The backup "${name}" is missing some required attributes`)
|
config.locations
|
||||||
|
)) {
|
||||||
if (Array.isArray(to))
|
if (!from || !to)
|
||||||
for (const t of to)
|
throw new Error(
|
||||||
checkDestination(t, name)
|
`The backup "${name}" is missing some required attributes`
|
||||||
else
|
)
|
||||||
checkDestination(to, name)
|
|
||||||
}
|
if (Array.isArray(to)) for (const t of to) checkDestination(t, name)
|
||||||
|
else checkDestination(to, name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const findConfigFile = (): string => {
|
||||||
|
const config = '.autorestic.yml'
|
||||||
|
const paths = [
|
||||||
|
resolve(flags.config || ''),
|
||||||
|
resolve('./' + config),
|
||||||
|
homedir() + '/' + config,
|
||||||
|
]
|
||||||
|
for (const path of paths) {
|
||||||
|
try {
|
||||||
|
const file = statSync(path)
|
||||||
|
if (file.isFile()) return path
|
||||||
|
} catch (e) {}
|
||||||
|
}
|
||||||
|
throw new Error('No Config file found')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export let CONFIG_FILE: string = ''
|
||||||
|
|
||||||
export const init = (): Config => {
|
export const init = (): Config => {
|
||||||
const raw: Config = makeObjectKeysLowercase(yaml.safeLoad(readFileSync(CONFIG_FILE).toString()))
|
CONFIG_FILE = findConfigFile()
|
||||||
|
const raw: Config = makeObjectKeysLowercase(
|
||||||
|
yaml.safeLoad(readFileSync(CONFIG_FILE).toString())
|
||||||
|
)
|
||||||
|
|
||||||
normalizeAndCheckBackends(raw)
|
normalizeAndCheckBackends(raw)
|
||||||
normalizeAndCheckBackups(raw)
|
normalizeAndCheckBackups(raw)
|
||||||
|
|
||||||
writeFileSync(CONFIG_FILE, yaml.safeDump(raw))
|
writeFileSync(CONFIG_FILE, yaml.safeDump(raw))
|
||||||
|
|
||||||
return raw
|
return raw
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in new issue