<!DOCTYPE html>
<html>
<body>
<script>

function fetchCSRFfToken(fileInput, progressElement) {
    return new Promise((resolve, reject) => {
        const xhr = new XMLHttpRequest();
        xhr.open('POST', 'generate-csrf-token', true);
        xhr.onload = () => {
            let content;
            try {
                content = JSON.parse(xhr.responseText);
            } catch (error) {
                return reject(error + ':' + xhr.responseText);
            }
            if (content['status'] != 'OK')
                reject(content['status']);
            else
                resolve(content['token']);
        }
        xhr.onerror = reject;
        xhr.send('{}');
    });
}

function upload(fileInput, progressElement) {
    fetchCSRFfToken().then((token) => {
        const xhr = new XMLHttpRequest();
        const formData = new FormData();
        formData.append('token', token);
        formData.append('newFile', fileInput.files[0]);

        xhr.open('POST', 'upload-file', true);
        xhr.onload = function () {
            alert(xhr.response);
        }
        xhr.onerror = function () {
            alert('error: ' + xhr.response);
        }
        xhr.upload.onprogress = function (event) {
            if (event.lengthComputable) {
                progressElement.max = event.total;
                progressElement.value = event.loaded;
            }
        }
        xhr.send(formData);
    }, (error) => {
        alert(`Failed to fetch the CSRF token: ${error}`);
    });
}

</script>
<p>Upload a new custom root. <b>This is for debuging purpose only. The uploaded file will be deleted.</b></p>
<input id=file type="file">
<button onclick="upload(file, p)">Upload</button>
<progress id=p></progress>
</body>
</html>
