#!/usr/bin/env node

'use strict';

const fs = require('fs');

const MINIO_CONFIG = '/app/data/data/.minio.sys/config/config.json';

function usage() {
    console.log('Usage:\n');
    console.log('\tminio-credentials get');
    console.log('\tminio-credentials set <access key> <secret key>');
    console.log();
}

let config = JSON.parse(fs.readFileSync(MINIO_CONFIG, 'utf8'));
let adminCredentials = config['credentials']['_'];
let accessKey = adminCredentials.filter(kv => kv.key === 'access_key')[0];
let secretKey = adminCredentials.filter(kv => kv.key === 'secret_key')[0];

if (process.argv[2] === 'get') {
    console.log('Access Key:', accessKey.value);
    console.log('Secret Key:', secretKey.value);
} else if (process.argv[2] === 'set') {
    if (process.argv.length !== 5) return usage();

    // https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateAccessKey.html
    if (process.argv[4].length < 5) return console.log('secret key must be atleast 5 characters');
    if (!/^[\w+=,.@-]+$/.test(process.argv[3])) return console.log('access key has invalid characters');

    accessKey.value = process.argv[3];
    if (process.argv[4].length < 8) return console.log('secret key must be atleast 8 characters');

    secretKey.value = process.argv[4];

    fs.writeFileSync(MINIO_CONFIG, JSON.stringify(config), 'utf8');
    console.log('Credentials updated. Restart minio app for new credentials to take effect.\n');
} else {
    usage();
}