mirror of
https://github.com/hrfee/jellyfin-accounts.git
synced 2024-12-23 01:20:12 +00:00
174 lines
6.6 KiB
JavaScript
174 lines
6.6 KiB
JavaScript
function addItem(invite) {
|
|
var links = document.getElementById('invites');
|
|
var listItem = document.createElement('li');
|
|
listItem.classList.add('list-group-item');
|
|
listItem.classList.add('align-middle');
|
|
var listCode = document.createElement('div');
|
|
listCode.classList.add('float-left');
|
|
var codeLink = document.createElement('a');
|
|
codeLink.appendChild(document.createTextNode(invite[0]));
|
|
listCode.appendChild(codeLink);
|
|
listItem.appendChild(listCode);
|
|
var listRight = document.createElement('div');
|
|
listRight.classList.add('float-right');
|
|
listRight.appendChild(document.createTextNode(invite[1]));
|
|
if (invite[2] == 0) {
|
|
var inviteCode = window.location.href + 'invite/' + invite[0];
|
|
codeLink.href = inviteCode;
|
|
listCode.appendChild(document.createTextNode(" "));
|
|
var codeCopy = document.createElement('i');
|
|
codeCopy.onclick = function(){toClipboard(inviteCode)};
|
|
codeCopy.classList.add('fa');
|
|
codeCopy.classList.add('fa-clipboard');
|
|
listCode.appendChild(codeCopy);
|
|
var listDelete = document.createElement('button');
|
|
listDelete.onclick = function(){deleteInvite(invite[0])};
|
|
listDelete.classList.add('btn');
|
|
listDelete.classList.add('btn-outline-danger');
|
|
listDelete.appendChild(document.createTextNode('Delete'));
|
|
listRight.appendChild(listDelete);
|
|
};
|
|
listItem.appendChild(listRight);
|
|
links.appendChild(listItem);
|
|
};
|
|
function generateInvites(empty = false) {
|
|
document.getElementById('invites').textContent = '';
|
|
if (empty === false) {
|
|
$.ajax('/getInvites', {
|
|
type : 'GET',
|
|
dataType : 'json',
|
|
contentType: 'json',
|
|
xhrFields : {
|
|
withCredentials: true
|
|
},
|
|
beforeSend : function (xhr) {
|
|
xhr.setRequestHeader("Authorization", "Basic " + btoa(window.token + ":"));
|
|
},
|
|
data: { get_param: 'value' },
|
|
complete: function(response) {
|
|
var data = JSON.parse(response['responseText']);
|
|
if (data['invites'].length == 0) {
|
|
addItem(["None", "", "1"]);
|
|
} else {
|
|
data['invites'].forEach(function(item) {
|
|
var i = ["", "", "0"];
|
|
i[0] = item['code'];
|
|
if (item['hours'] == 0) {
|
|
i[1] = item['minutes'] + 'm';
|
|
} else if (item['minutes'] == 0) {
|
|
i[1] = item['hours'] + 'h';
|
|
} else {
|
|
i[1] = item['hours'] + 'h ' + item['minutes'] + 'm';
|
|
}
|
|
i[1] = "Expires in " + i[1] + " ";
|
|
addItem(i)
|
|
});
|
|
}
|
|
}
|
|
});
|
|
} else if (empty === true) {
|
|
addItem(["None", "", "1"]);
|
|
};
|
|
};
|
|
function deleteInvite(code) {
|
|
var send = JSON.stringify({ "code": code });
|
|
$.ajax('/deleteInvite', {
|
|
data : send,
|
|
contentType : 'application/json',
|
|
type : 'POST',
|
|
xhrFields : {
|
|
withCredentials: true
|
|
},
|
|
beforeSend : function (xhr) {
|
|
xhr.setRequestHeader("Authorization", "Basic " + btoa(window.token + ":"));
|
|
},
|
|
success: function() { generateInvites(); },
|
|
});
|
|
};
|
|
function addOptions(le, sel) {
|
|
for (v = 0; v <= le; v++) {
|
|
var opt = document.createElement('option');
|
|
opt.appendChild(document.createTextNode(v))
|
|
opt.value = v
|
|
sel.appendChild(opt)
|
|
}
|
|
};
|
|
function toClipboard(str) {
|
|
const el = document.createElement('textarea');
|
|
el.value = str;
|
|
el.setAttribute('readonly', '');
|
|
el.style.position = 'absolute';
|
|
el.style.left = '-9999px';
|
|
document.body.appendChild(el);
|
|
const selected =
|
|
document.getSelection().rangeCount > 0
|
|
? document.getSelection().getRangeAt(0)
|
|
: false;
|
|
el.select();
|
|
document.execCommand('copy');
|
|
document.body.removeChild(el);
|
|
if (selected) {
|
|
document.getSelection().removeAllRanges();
|
|
document.getSelection().addRange(selected);
|
|
}
|
|
};
|
|
$("form#inviteForm").submit(function() {
|
|
var send = $("form#inviteForm").serializeJSON();
|
|
$.ajax('/generateInvite', {
|
|
data : send,
|
|
contentType : 'application/json',
|
|
type : 'POST',
|
|
xhrFields : {
|
|
withCredentials: true
|
|
},
|
|
beforeSend : function (xhr) {
|
|
xhr.setRequestHeader("Authorization", "Basic " + btoa(window.token + ":"));
|
|
},
|
|
success: function() { generateInvites(); },
|
|
|
|
});
|
|
return false;
|
|
});
|
|
$("form#loginForm").submit(function() {
|
|
window.token = "";
|
|
var details = $("form#loginForm").serializeObject();
|
|
$.ajax('/getToken', {
|
|
type : 'GET',
|
|
dataType : 'json',
|
|
contentType: 'json',
|
|
xhrFields : {
|
|
withCredentials: true
|
|
},
|
|
beforeSend : function (xhr) {
|
|
xhr.setRequestHeader("Authorization", "Basic " + btoa(details['username'] + ":" + details['password']));
|
|
},
|
|
data: { get_param: 'value' },
|
|
complete: function(data) {
|
|
if (data['status'] == 401) {
|
|
var formBody = document.getElementById('formBody');
|
|
var wrongPassword = document.createElement('div');
|
|
wrongPassword.classList.add('alert');
|
|
wrongPassword.classList.add('alert-danger');
|
|
wrongPassword.setAttribute('role', 'alert');
|
|
wrongPassword.appendChild(document.createTextNode('Incorrect username or password.'));
|
|
formBody.appendChild(wrongPassword);
|
|
} else {
|
|
window.token = JSON.parse(data['responseText'])['token'];
|
|
generateInvites();
|
|
var interval = setInterval(function() { generateInvites(); }, 60 * 1000);
|
|
var hour = document.getElementById('hours');
|
|
addOptions(24, hour);
|
|
hour.selected = "0";
|
|
var minutes = document.getElementById('minutes');
|
|
addOptions(59, minutes);
|
|
minutes.selected = "30";
|
|
$('#login').modal('hide');
|
|
}
|
|
}
|
|
});
|
|
return false;
|
|
});
|
|
generateInvites(empty = true);
|
|
$("#login").modal('show');
|
|
|