populate-vikunja/src/vikunja.js

80 lines
1.6 KiB
JavaScript

import axios from 'axios'
import path from 'path'
import fs from 'fs-extra'
import { spawn } from 'child_process'
export function startVikunja (bin, jwtSecret, workDir = false, deleteDb = false, serviceInterface = ':3456') {
if (!workDir) {
workDir = path.dirname(bin)
}
if (deleteDb) {
// clear the database
try {
fs.unlinkSync(path.join(workDir, 'vikunja.db'))
} catch (_) {
// ignore error
}
}
return new Promise(resolve => {
const vikunja = spawn(
bin,
[],
{
cwd: workDir,
env: {
VIKUNJA_SERVICE_JWTSECRET: jwtSecret,
VIKUNJA_SERVICE_INTERFACE: serviceInterface
}
}
)
vikunja.stdout.on('data', (data) => {
data = data.toString()
console.log(data)
if (data.indexOf(' cmd/func25') !== -1) {
console.log('Vikunja started, will proceed with data population...')
setTimeout(() => resolve(), 1000)
}
})
})
}
export async function initClient (baseURL, username, password, registerUser) {
if (registerUser) {
await axios.post(
baseURL + '/api/v1/register',
{
username,
password,
email: 'demo@example.com'
},
{
headers: {
'Content-Type': 'application/json'
}
}
)
}
// login
const bearer = (await axios.post(
baseURL + '/api/v1/login',
{
username,
password
},
{
headers: {
'Content-Type': 'application/json'
}
}
)).data.token
// prepare client
return axios.create({
baseURL: baseURL + '/api/v1/',
headers: { 'Authorization': 'Bearer ' + bearer }
})
}