98 lines
3.2 KiB
JavaScript
98 lines
3.2 KiB
JavaScript
import {App} from './app.js';
|
|
import {Proxies} from './options-proxies.js';
|
|
import {Spinner} from './spinner.js';
|
|
import {Toggle} from './toggle.js';
|
|
import {Nav} from './nav.js';
|
|
|
|
// ---------- Import FoxyProxy Account (Side Effect) -------
|
|
class ImportAccount {
|
|
|
|
static {
|
|
this.username = document.querySelector('.import-account #username');
|
|
this.password = document.querySelector('.import-account #password');
|
|
Toggle.password(this.password.nextElementSibling);
|
|
document.querySelector('.import-account button[data-i18n="import"]').addEventListener('click', () => this.process());
|
|
}
|
|
|
|
static async process() {
|
|
// --- check username/password
|
|
const username = this.username.value.trim();
|
|
const password = this.password.value.trim();
|
|
if (!username || !password) {
|
|
alert(browser.i18n.getMessage('userPassError'));
|
|
return;
|
|
}
|
|
|
|
Spinner.show();
|
|
|
|
const options = [...document.querySelectorAll('.import-account .account-options select')].map(i => i.value);
|
|
// Array(3) [ "https", "hostname", "alt" ]
|
|
const url = options.includes('alt') ?
|
|
'https://bilestoad.com/webservices/get-accounts.php' :
|
|
'https://getfoxyproxy.org/webservices/get-accounts.php';
|
|
const ip = options.includes('ip');
|
|
const socks = options.includes('socks5');
|
|
const https = options.includes('https');
|
|
|
|
const proxyDiv = document.querySelector('div.proxy-div');
|
|
const docFrag = document.createDocumentFragment();
|
|
|
|
// --- fetch data
|
|
const data = await this.getAccount(url, username, password);
|
|
if (data) {
|
|
data.forEach(i => {
|
|
// proxy template
|
|
const pxy = {
|
|
active: true,
|
|
title: i.hostname.split('.')[0],
|
|
type: socks ? 'socks5' : https ? 'https' : 'http',
|
|
hostname: ip ? i.ip : i.hostname,
|
|
port: socks ? i.socks5_port : https ? i.ssl_port : i.port[0],
|
|
username: i.username,
|
|
password: i.password,
|
|
// convert UK to ISO 3166-1 GB
|
|
cc: i.country_code === 'UK' ? 'GB' : i.country_code,
|
|
city: i.city,
|
|
// random color will be set
|
|
color: '',
|
|
pac: '',
|
|
pacString: '',
|
|
proxyDNS: true,
|
|
include: [],
|
|
exclude: [],
|
|
tabProxy: [],
|
|
};
|
|
|
|
docFrag.append(Proxies.addProxy(pxy));
|
|
});
|
|
|
|
proxyDiv.append(docFrag);
|
|
Nav.get('proxies');
|
|
}
|
|
|
|
Spinner.hide();
|
|
}
|
|
|
|
static async getAccount(url, username, password) {
|
|
// --- fetch data
|
|
return fetch(url, {
|
|
method: 'POST',
|
|
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
|
|
body: `username=${encodeURIComponent(username)}&password=${encodeURIComponent(password)}`
|
|
})
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
if (!Array.isArray(data) || !data[0]?.hostname) {
|
|
App.notify(browser.i18n.getMessage('error'));
|
|
return;
|
|
}
|
|
|
|
// import active accounts only
|
|
data = data.filter(i => i.active === 'true');
|
|
// sort by country
|
|
data.sort((a, b) => a.country.localeCompare(b.country));
|
|
return data;
|
|
})
|
|
.catch(error => App.notify(browser.i18n.getMessage('error') + '\n\n' + error.message));
|
|
}
|
|
} |