@luminati-io/luminati-proxy
Version:
A configurable local proxy for luminati.io
125 lines (121 loc) • 4.97 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 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: 'pass_dyn (default)', value: 'pass_dyn'},
{key: 'block', value: 'block'}
];
const debug_opt = [
{key: 'Yes (default)', value: 'full'},
{key: 'No', value: 'none'},
];
export default class General extends Pure_component {
state = {defaults: {}};
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){
return this.state.defaults.proxy_connection_type=='https' ? [
{key: t('HTTPS (default)'), value: 'https'},
{key: 'HTTP', value: 'http'}
] : [
{key: t('HTTP (default)'), value: 'http'},
{key: 'HTTPS', value: 'https'}
];
}
componentDidMount(){
this.setdb_on('head.defaults',
defaults=>this.setState({defaults: defaults||{}}));
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);
};
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}
no_any={this.state.settings.zagent}/>
<T>{t=><Config type="select"
data={this.proxy_connection_type_opt(t)}
id="proxy_connection_type"/>}</T>
<Config type="yes_no" id="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}/>
<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>;
}
}