@luminati-io/luminati-proxy
Version:
A configurable local proxy for luminati.io
134 lines (130 loc) • 5.4 kB
JavaScript
// LICENSE_CODE ZON ISC
; /*jslint react:true, es6:true*/
import React from 'react';
import Pure_component from '/www/util/pub/pure_component.js';
import $ from 'jquery';
import _ from 'lodash';
import setdb from '../../../util/setdb.js';
import {Config, Tab_context} from './common.js';
import {T} from '../common/i18n.js';
import Users_modal from './users_modal.js';
const route_err_opt = [
{key: 'Default (pass_dyn)', value: ''},
{key: 'pass_dyn', value: 'pass_dyn'},
{key: 'block', value: 'block'}
];
const debug_opt = [
{key: 'Default (Yes)', value: ''},
{key: 'Yes', value: 'full'},
{key: 'No', value: 'none'},
];
export default class General extends Pure_component {
state = {default_proxy_connect_type: 'http'};
get_curr_plan = setdb.get('head.proxy_edit.get_curr_plan');
set_field = setdb.get('head.proxy_edit.set_field');
proxy_connection_type_opt(t){
let def = this.state.default_proxy_connect_type=='https' ?
t('Default (HTTPS)') : t('Default (HTTP)');
return [{key: def, value: ''},
{key: 'HTTP', value: 'http'},
{key: 'HTTPS', value: 'https'}];
}
componentDidMount(){
this.setdb_on('head.defaults', defaults=>{
this.setState({default_proxy_connect_type: _.get(defaults,
'proxy_connection_type', 'http')});
});
this.setdb_on('head.proxy_edit.form', form=>{
form && this.setState({form});
});
this.setdb_on('head.consts', consts=>{
consts && consts.proxy && this.setState({proxy: consts.proxy});
});
this.setdb_on('head.settings', settings=>{
settings && this.setState({settings});
});
}
multiply_users_changed = val=>{
console.log('mult users changed');
if (val)
this.open_users_modal();
};
multiply_static_changed = val=>{
const {form} = this.state;
const size = Math.max(form.ips.length, form.vips.length);
if (val)
{
this.set_field('pool_size', 1);
this.set_field('multiply', size);
this.open_static_modal();
return;
}
this.set_field('pool_size', size);
this.set_field('multiply', 1);
};
on_change_ssl = ssl=>{
if (!ssl && this.state.form.insecure)
this.set_field('insecure', false);
};
open_static_modal = ()=>$('#allocated_ips').modal('show');
open_users_modal = ()=>$('#users_modal').modal('show');
render(){
if (!this.state.form || !this.state.proxy || !this.state.settings)
return null;
// XXX krzysztof: cleanup type (index.js rotation.js general.js)
const curr_plan = this.get_curr_plan();
let type;
if (curr_plan && (curr_plan.type||'').startsWith('static'))
type = 'ips';
else if (curr_plan && !!curr_plan.vip)
type = 'vips';
const form = this.state.form;
const note_ips = form.multiply_ips ?
<a className="link" onClick={this.open_static_modal}>
Select IPs
</a> : null;
const note_vips = form.multiply_vips ?
<a className="link" onClick={this.open_static_modal}>
Select gIPs
</a> : null;
const disabled_wl = (this.state.settings.fixed_whitelist_ips||[])
.concat(this.state.settings.whitelist_ips);
const note_users = form.multiply_users ?
<a className="link" onClick={this.open_users_modal}>
<T>Select users</T>
</a> : null;
return <div className="general">
<Tab_context.Provider value="general">
<Users_modal form={this.state.form}/>
<Config type="text" id="internal_name"/>
<Config type="number" id="port"/>
<Config type="pins" id="whitelist_ips"
disabled_ips={disabled_wl}/>
<T>{t=><Config type="select"
data={this.proxy_connection_type_opt(t)}
id="proxy_connection_type"/>}</T>
<Config type="yes_no" id="ssl" on_change={this.on_change_ssl}/>
<Config type="yes_no" id="insecure"
disabled={!this.state.form.ssl}/>
<Config type="select" data={route_err_opt} id="route_err"/>
<Config type="select_number" id="multiply"
data={[0, 5, 20, 100, 500]}/>
{type=='ips' &&
<Config type="yes_no" id="multiply_ips"
on_change={this.multiply_static_changed} note={note_ips}/>
}
{type=='vips' &&
<Config type="yes_no" id="multiply_vips"
on_change={this.multiply_static_changed} note={note_vips}/>
}
<Config type="yes_no" id="multiply_users"
on_change={this.multiply_users_changed} note={note_users}/>
{false && <Config type="select_number" id="bw_limit"/>}
<Config type="select" id="iface"
data={this.state.proxy.iface.values}/>
<Config type="pins" id="smtp" exact no_any/>
<Config type="select" id="debug" data={debug_opt}/>
</Tab_context.Provider>
</div>;
}
}