mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-09 16:07:40 +00:00
Windows and compability
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { Fragment } from 'inferno';
|
||||
import { useBackend } from '../backend';
|
||||
import { Box, Button, LabeledList, ProgressBar, Section } from '../components';
|
||||
import { Box, Button, LabeledList, ProgressBar, Section, Window } from '../components';
|
||||
|
||||
export const SkillPanel = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
@@ -15,107 +15,111 @@ export const SkillPanel = (props, context) => {
|
||||
fontWeight: 'bold',
|
||||
};
|
||||
return (
|
||||
<Section
|
||||
title={data.playername}
|
||||
buttons={(
|
||||
<Button
|
||||
icon={see_mods ? 'Enabled' : 'Disabled'}
|
||||
content={see_mods ? 'Modifiers Shown' : 'Modifiers Hidden'}
|
||||
onClick={() => act('toggle_mods')} />
|
||||
)}>
|
||||
<LabeledList>
|
||||
{skills.map(skill => (
|
||||
<LabeledList.Item key={skill.name} label={skill.name}>
|
||||
<span style={skillyellow}>
|
||||
{skill.desc}
|
||||
<br />
|
||||
`Modifiers: ${skill.modifiers}`
|
||||
</span>
|
||||
<br />
|
||||
{!!skill.level_based && (
|
||||
<Box>
|
||||
{see_mods ? (
|
||||
<span>
|
||||
Level: [
|
||||
<span style={skill.mod_style}>
|
||||
{skill.lvl_mod}
|
||||
</span>]
|
||||
</span>
|
||||
) : (
|
||||
<span>
|
||||
Level: [
|
||||
<span style={skill.base_style}>
|
||||
{skill.lvl_base}
|
||||
</span>]
|
||||
</span>
|
||||
)}
|
||||
<Window>
|
||||
<Window.Content scrollable>
|
||||
<Section
|
||||
title={data.playername}
|
||||
buttons={(
|
||||
<Button
|
||||
icon={see_mods ? 'Enabled' : 'Disabled'}
|
||||
content={see_mods ? 'Modifiers Shown' : 'Modifiers Hidden'}
|
||||
onClick={() => act('toggle_mods')} />
|
||||
)}>
|
||||
<LabeledList>
|
||||
{skills.map(skill => (
|
||||
<LabeledList.Item key={skill.name} label={skill.name}>
|
||||
<span style={skillyellow}>
|
||||
{skill.desc}
|
||||
<br />
|
||||
`Modifiers: ${skill.modifiers}`
|
||||
</span>
|
||||
<br />
|
||||
Total Experience:
|
||||
{see_mods ? (
|
||||
<span>[{skill.value_mod} XP]</span>
|
||||
) : (
|
||||
<span>[{skill.value_base} XP]</span>
|
||||
)}
|
||||
<br />
|
||||
XP To Next Level:
|
||||
{skill.max_lvl !== (see_mods
|
||||
? skill.lvl_mod_num
|
||||
: skill.lvl_base_num) ? (
|
||||
<Box inline>
|
||||
{see_mods ? (
|
||||
<span>{skill.xp_next_lvl_mod}</span>
|
||||
) : (
|
||||
<span>{skill.xp_next_lvl_base}</span>
|
||||
)}
|
||||
</Box>
|
||||
) : (
|
||||
<span style={skillgreen}>
|
||||
[MAXXED]
|
||||
</span>
|
||||
)}
|
||||
</Box>
|
||||
)}
|
||||
{see_mods ? (
|
||||
<span>{skill.mod_readout}</span>
|
||||
) : (
|
||||
<span>{skill.base_readout}</span>
|
||||
)}
|
||||
{see_mods ? (
|
||||
<ProgressBar
|
||||
value={skill.percent_mod}
|
||||
color="good" />
|
||||
) : (
|
||||
<ProgressBar
|
||||
value={skill.percent_base}
|
||||
color="good" />
|
||||
)}
|
||||
<br />
|
||||
{!!data.admin && (
|
||||
<Fragment>
|
||||
<Button
|
||||
content="Adjust Exp"
|
||||
onClick={() => act('adj_exp', {
|
||||
skill: skill.path,
|
||||
})} />
|
||||
<Button
|
||||
content="Set Exp"
|
||||
onClick={() => act('set_exp', {
|
||||
skill: skill.path,
|
||||
})} />
|
||||
{!!skill.level_based && (
|
||||
<Button
|
||||
content="Set Level"
|
||||
onClick={() => act('set_lvl', {
|
||||
skill: skill.path,
|
||||
})} />
|
||||
<Box>
|
||||
{see_mods ? (
|
||||
<span>
|
||||
Level: [
|
||||
<span style={skill.mod_style}>
|
||||
{skill.lvl_mod}
|
||||
</span>]
|
||||
</span>
|
||||
) : (
|
||||
<span>
|
||||
Level: [
|
||||
<span style={skill.base_style}>
|
||||
{skill.lvl_base}
|
||||
</span>]
|
||||
</span>
|
||||
)}
|
||||
<br />
|
||||
Total Experience:
|
||||
{see_mods ? (
|
||||
<span>[{skill.value_mod} XP]</span>
|
||||
) : (
|
||||
<span>[{skill.value_base} XP]</span>
|
||||
)}
|
||||
<br />
|
||||
XP To Next Level:
|
||||
{skill.max_lvl !== (see_mods
|
||||
? skill.lvl_mod_num
|
||||
: skill.lvl_base_num) ? (
|
||||
<Box inline>
|
||||
{see_mods ? (
|
||||
<span>{skill.xp_next_lvl_mod}</span>
|
||||
) : (
|
||||
<span>{skill.xp_next_lvl_base}</span>
|
||||
)}
|
||||
</Box>
|
||||
) : (
|
||||
<span style={skillgreen}>
|
||||
[MAXXED]
|
||||
</span>
|
||||
)}
|
||||
</Box>
|
||||
)}
|
||||
</Fragment>
|
||||
)}
|
||||
<br />
|
||||
<br />
|
||||
</LabeledList.Item>
|
||||
))}
|
||||
</LabeledList>
|
||||
</Section>
|
||||
{see_mods ? (
|
||||
<span>{skill.mod_readout}</span>
|
||||
) : (
|
||||
<span>{skill.base_readout}</span>
|
||||
)}
|
||||
{see_mods ? (
|
||||
<ProgressBar
|
||||
value={skill.percent_mod}
|
||||
color="good" />
|
||||
) : (
|
||||
<ProgressBar
|
||||
value={skill.percent_base}
|
||||
color="good" />
|
||||
)}
|
||||
<br />
|
||||
{!!data.admin && (
|
||||
<Fragment>
|
||||
<Button
|
||||
content="Adjust Exp"
|
||||
onClick={() => act('adj_exp', {
|
||||
skill: skill.path,
|
||||
})} />
|
||||
<Button
|
||||
content="Set Exp"
|
||||
onClick={() => act('set_exp', {
|
||||
skill: skill.path,
|
||||
})} />
|
||||
{!!skill.level_based && (
|
||||
<Button
|
||||
content="Set Level"
|
||||
onClick={() => act('set_lvl', {
|
||||
skill: skill.path,
|
||||
})} />
|
||||
)}
|
||||
</Fragment>
|
||||
)}
|
||||
<br />
|
||||
<br />
|
||||
</LabeledList.Item>
|
||||
))}
|
||||
</LabeledList>
|
||||
</Section>
|
||||
</Window.Content>
|
||||
</Window>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -2,7 +2,7 @@ import { Fragment } from 'inferno';
|
||||
import { useBackend } from '../backend';
|
||||
import { toFixed } from 'common/math';
|
||||
import { RADIO_CHANNELS } from '../constants';
|
||||
import { Button, LabeledList, NumberInput, NoticeBox, Section, Input } from '../components';
|
||||
import { Button, LabeledList, NumberInput, NoticeBox, Section, Input, Window } from '../components';
|
||||
|
||||
export const TeleInteract = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
@@ -24,215 +24,221 @@ export const TeleInteract = (props, context) => {
|
||||
isbus = false,
|
||||
} = machine;
|
||||
return (
|
||||
<Fragment>
|
||||
{!!notice && (
|
||||
<NoticeBox>
|
||||
{notice}
|
||||
</NoticeBox>
|
||||
)}
|
||||
<Section title="Network Access">
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="Power Status">
|
||||
<Button
|
||||
content={power ? 'On' : 'Off'}
|
||||
icon={power ? 'power-off' : 'times'}
|
||||
color={power ? 'good' : 'bad'}
|
||||
onClick={() => act('toggle')}
|
||||
/>
|
||||
</LabeledList.Item>
|
||||
{power ? (
|
||||
<Fragment>
|
||||
<LabeledList.Item label="Identification String">
|
||||
<Input
|
||||
value={id}
|
||||
width="150px"
|
||||
maxLength={255}
|
||||
onChange={(e, value) => act('machine', {
|
||||
'id': value,
|
||||
})} />
|
||||
<Window>
|
||||
<Window.Content scrollable>
|
||||
<Fragment>
|
||||
{!!notice && (
|
||||
<NoticeBox>
|
||||
{notice}
|
||||
</NoticeBox>
|
||||
)}
|
||||
<Section title="Network Access">
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="Power Status">
|
||||
<Button
|
||||
content={power ? 'On' : 'Off'}
|
||||
icon={power ? 'power-off' : 'times'}
|
||||
color={power ? 'good' : 'bad'}
|
||||
onClick={() => act('toggle')}
|
||||
/>
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Network">
|
||||
<Input
|
||||
value={network}
|
||||
width="150px"
|
||||
maxLength={15}
|
||||
onChange={(e, value) => act('machine', {
|
||||
'network': value,
|
||||
})} />
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Prefabrication"
|
||||
color={power ? 'good' : 'bad'}>
|
||||
{prefab ? 'TRUE' : 'FALSE'}
|
||||
</LabeledList.Item>
|
||||
{isrelay ? (
|
||||
{power ? (
|
||||
<Fragment>
|
||||
<LabeledList.Item label="Broadcasting">
|
||||
<Button
|
||||
content={machine.broadcast ? 'YES' : 'NO'}
|
||||
icon={machine.broadcast ? 'check' : 'times'}
|
||||
color={machine.broadcast ? 'good' : 'bad'}
|
||||
onClick={() => act('relay', {
|
||||
'broadcast': true,
|
||||
})}
|
||||
/>
|
||||
<LabeledList.Item label="Identification String">
|
||||
<Input
|
||||
value={id}
|
||||
width="150px"
|
||||
maxLength={255}
|
||||
onChange={(e, value) => act('machine', {
|
||||
'id': value,
|
||||
})} />
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Receiving">
|
||||
<Button
|
||||
content={machine.receiving ? 'YES' : 'NO'}
|
||||
icon={machine.receiving ? 'check' : 'times'}
|
||||
color={machine.receiving ? 'good' : 'bad'}
|
||||
onClick={() => act('relay', {
|
||||
'receiving': true,
|
||||
})}
|
||||
/>
|
||||
<LabeledList.Item label="Network">
|
||||
<Input
|
||||
value={network}
|
||||
width="150px"
|
||||
maxLength={15}
|
||||
onChange={(e, value) => act('machine', {
|
||||
'network': value,
|
||||
})} />
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Prefabrication"
|
||||
color={power ? 'good' : 'bad'}>
|
||||
{prefab ? 'TRUE' : 'FALSE'}
|
||||
</LabeledList.Item>
|
||||
{isrelay ? (
|
||||
<Fragment>
|
||||
<LabeledList.Item label="Broadcasting">
|
||||
<Button
|
||||
content={machine.broadcast ? 'YES' : 'NO'}
|
||||
icon={machine.broadcast ? 'check' : 'times'}
|
||||
color={machine.broadcast ? 'good' : 'bad'}
|
||||
onClick={() => act('relay', {
|
||||
'broadcast': true,
|
||||
})}
|
||||
/>
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Receiving">
|
||||
<Button
|
||||
content={machine.receiving ? 'YES' : 'NO'}
|
||||
icon={machine.receiving ? 'check' : 'times'}
|
||||
color={machine.receiving ? 'good' : 'bad'}
|
||||
onClick={() => act('relay', {
|
||||
'receiving': true,
|
||||
})}
|
||||
/>
|
||||
</LabeledList.Item>
|
||||
</Fragment>
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
{isbus ? (
|
||||
<LabeledList.Item label="Change Signal Frequency">
|
||||
<Button
|
||||
content={machine.chang_frequency
|
||||
? 'Enabled'
|
||||
: 'Disabled'}
|
||||
icon={machine.chang_frequency ? 'power-off' : 'times'}
|
||||
color={machine.chang_frequency ? 'good' : 'bad'}
|
||||
onClick={() => act('frequency', {
|
||||
'toggle': true,
|
||||
})}
|
||||
/>
|
||||
{machine.chang_frequency ? (
|
||||
<NumberInput
|
||||
animate
|
||||
unit="kHz"
|
||||
step={0.2}
|
||||
stepPixelSize={10}
|
||||
minValue={1201 / 10}
|
||||
maxValue={1599 / 10}
|
||||
value={machine.chang_freq_value / 10}
|
||||
format={value => toFixed(value, 1)}
|
||||
onChange={(e, value) => act('frequency', {
|
||||
'adjust': value,
|
||||
})} />
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
{hidden ? (
|
||||
<LabeledList.Item label="Shadow Link">
|
||||
{'ACTIVE'}
|
||||
</LabeledList.Item>
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
{multitool ? (
|
||||
<LabeledList.Item
|
||||
label="Multitool buffer"
|
||||
buttons={multitool_buf ? (
|
||||
<Fragment>
|
||||
<Button
|
||||
content="Link"
|
||||
onClick={() => act('multitool', {
|
||||
'Link': true,
|
||||
})}
|
||||
/>
|
||||
<Button
|
||||
content="Flush"
|
||||
onClick={() => act('multitool', {
|
||||
'Flush': true,
|
||||
})}
|
||||
/>
|
||||
</Fragment>
|
||||
) : (
|
||||
<Button
|
||||
content="Add Machine"
|
||||
onClick={() => act('multitool', {
|
||||
'Add': true,
|
||||
})}
|
||||
/>
|
||||
)}>
|
||||
{multitool_buf ? (
|
||||
`${multitool_buf.name} (${multitool_buf.id})`
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
</Fragment>
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
{isbus ? (
|
||||
<LabeledList.Item label="Change Signal Frequency">
|
||||
</LabeledList>
|
||||
{power ? (
|
||||
<Fragment>
|
||||
<Section
|
||||
title="Linked Network Entities"
|
||||
level={2}>
|
||||
<LabeledList>
|
||||
{links.map(entity => {
|
||||
return (
|
||||
<LabeledList.Item
|
||||
key={entity.name}
|
||||
label={entity.ref}
|
||||
buttons={(
|
||||
<Button
|
||||
content="Remove"
|
||||
onClick={() => act('unlink', {
|
||||
'value': entity.ref,
|
||||
})}
|
||||
/>
|
||||
)}>
|
||||
{`${entity.name} (${entity.id})`}
|
||||
</LabeledList.Item>
|
||||
);
|
||||
})}
|
||||
</LabeledList>
|
||||
</Section>
|
||||
<Section
|
||||
title="Filtering Frequencies"
|
||||
level={2}>
|
||||
<Button
|
||||
content={machine.chang_frequency ? 'Enabled' : 'Disabled'}
|
||||
icon={machine.chang_frequency ? 'power-off' : 'times'}
|
||||
color={machine.chang_frequency ? 'good' : 'bad'}
|
||||
onClick={() => act('frequency', {
|
||||
'toggle': true,
|
||||
content="Add Filter"
|
||||
onClick={() => act('freq', {
|
||||
'add': true,
|
||||
})}
|
||||
/>
|
||||
{machine.chang_frequency ? (
|
||||
<NumberInput
|
||||
animate
|
||||
unit="kHz"
|
||||
step={0.2}
|
||||
stepPixelSize={10}
|
||||
minValue={1201 / 10}
|
||||
maxValue={1599 / 10}
|
||||
value={machine.chang_freq_value / 10}
|
||||
format={value => toFixed(value, 1)}
|
||||
onChange={(e, value) => act('frequency', {
|
||||
'adjust': value,
|
||||
})} />
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
{hidden ? (
|
||||
<LabeledList.Item label="Shadow Link">
|
||||
{'ACTIVE'}
|
||||
</LabeledList.Item>
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
{multitool ? (
|
||||
<LabeledList.Item
|
||||
label="Multitool buffer"
|
||||
buttons={multitool_buf ? (
|
||||
<Fragment>
|
||||
<Button
|
||||
content="Link"
|
||||
onClick={() => act('multitool', {
|
||||
'Link': true,
|
||||
})}
|
||||
/>
|
||||
<Button
|
||||
content="Flush"
|
||||
onClick={() => act('multitool', {
|
||||
'Flush': true,
|
||||
})}
|
||||
/>
|
||||
</Fragment>
|
||||
) : (
|
||||
<Button
|
||||
content="Add Machine"
|
||||
onClick={() => act('multitool', {
|
||||
'Add': true,
|
||||
})}
|
||||
/>
|
||||
)}>
|
||||
{multitool_buf ? (
|
||||
`${multitool_buf.name} (${multitool_buf.id})`
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
</Fragment>
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
</LabeledList>
|
||||
{power ? (
|
||||
<Fragment>
|
||||
<Section
|
||||
title="Linked Network Entities"
|
||||
level={2}>
|
||||
<LabeledList>
|
||||
{links.map(entity => {
|
||||
return (
|
||||
<LabeledList.Item
|
||||
key={entity.name}
|
||||
label={entity.ref}
|
||||
buttons={(
|
||||
<br />
|
||||
<br />
|
||||
{(freq_listening && freq_listening.length) ? (
|
||||
freq_listening.map(thing => {
|
||||
const valid = RADIO_CHANNELS
|
||||
.find(channel => channel.freq === thing);
|
||||
return (
|
||||
<Button
|
||||
content="Remove"
|
||||
onClick={() => act('unlink', {
|
||||
'value': entity.ref,
|
||||
key={thing}
|
||||
content={valid ? (
|
||||
<span style={`color: ${valid.color}`}>
|
||||
{`${thing} (${valid.name})`}
|
||||
</span>
|
||||
) : (
|
||||
thing
|
||||
)}
|
||||
onClick={() => act('freq', {
|
||||
'remove': thing,
|
||||
})}
|
||||
/>
|
||||
)}>
|
||||
{`${entity.name} (${entity.id})`}
|
||||
</LabeledList.Item>
|
||||
);
|
||||
})}
|
||||
</LabeledList>
|
||||
</Section>
|
||||
<Section
|
||||
title="Filtering Frequencies"
|
||||
level={2}>
|
||||
<Button
|
||||
content="Add Filter"
|
||||
onClick={() => act('freq', {
|
||||
'add': true,
|
||||
})}
|
||||
/>
|
||||
<br />
|
||||
<br />
|
||||
{(freq_listening && freq_listening.length) ? (
|
||||
freq_listening.map(thing => {
|
||||
const valid = RADIO_CHANNELS
|
||||
.find(channel => channel.freq === thing);
|
||||
return (
|
||||
<Button
|
||||
key={thing}
|
||||
content={valid ? (
|
||||
<span style={`color: ${valid.color}`}>
|
||||
{`${thing} (${valid.name})`}
|
||||
</span>
|
||||
) : (
|
||||
thing
|
||||
)}
|
||||
onClick={() => act('freq', {
|
||||
'remove': thing,
|
||||
})}
|
||||
/>
|
||||
);
|
||||
})
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
</Section>
|
||||
</Fragment>
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
</Section>
|
||||
</Fragment>
|
||||
);
|
||||
})
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
</Section>
|
||||
</Fragment>
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
</Section>
|
||||
</Fragment>
|
||||
</Window.Content>
|
||||
</Window>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Fragment } from 'inferno';
|
||||
import { useBackend } from '../backend';
|
||||
import { Button, LabeledList, NoticeBox, Section, Tabs, Input } from '../components';
|
||||
import { Button, LabeledList, NoticeBox, Section, Tabs, Input, Window } from '../components';
|
||||
|
||||
export const TeleLogBrowser = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
@@ -13,162 +13,167 @@ export const TeleLogBrowser = (props, context) => {
|
||||
} = data;
|
||||
const operational = (selected && selected.status);
|
||||
return (
|
||||
<Fragment>
|
||||
{!!notice && (
|
||||
<NoticeBox>
|
||||
{notice}
|
||||
</NoticeBox>
|
||||
)}
|
||||
<Section title="Network Control">
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="Network">
|
||||
<Input
|
||||
value={network}
|
||||
width="150px"
|
||||
maxLength={15}
|
||||
onChange={(e, value) => act('network', {
|
||||
'value': value,
|
||||
})} />
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Memory"
|
||||
buttons={(
|
||||
<Fragment>
|
||||
<Button
|
||||
content="Flush Buffer"
|
||||
icon="minus-circle"
|
||||
disabled={!servers.length || !!selected}
|
||||
onClick={() => act('release')} />
|
||||
<Button
|
||||
content="Probe Network"
|
||||
icon="sync"
|
||||
disabled={selected}
|
||||
onClick={() => act('probe')} />
|
||||
</Fragment>
|
||||
)}>
|
||||
{servers ? (
|
||||
`${servers.length} currently probed and buffered`
|
||||
) : (
|
||||
'Buffer is empty!'
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Selected Server"
|
||||
buttons={(
|
||||
<Button
|
||||
content="Disconnect"
|
||||
disabled={!selected}
|
||||
onClick={() => act('mainmenu')}
|
||||
/>
|
||||
)}>
|
||||
{selected ? (
|
||||
`${selected.name} (${selected.id})`
|
||||
) : (
|
||||
"None (None)"
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Recorded Traffic">
|
||||
{selected ? (
|
||||
selected.traffic <= 1024 ? (
|
||||
`${selected.traffic} Gigabytes`
|
||||
) : (
|
||||
`${Math.round(selected.traffic/1024)} Terrabytes`
|
||||
)
|
||||
) : (
|
||||
'0 Gigabytes'
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Server Status"
|
||||
color={operational ? 'good' : 'bad'}>
|
||||
{operational ? (
|
||||
'Running'
|
||||
) : (
|
||||
'Server down!'
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
</Section>
|
||||
<Tabs>
|
||||
<Tabs.Tab
|
||||
key="servers"
|
||||
label="Servers">
|
||||
<Section>
|
||||
{(servers && servers.length) ? (
|
||||
<LabeledList>
|
||||
{servers.map(server => {
|
||||
return (
|
||||
<LabeledList.Item
|
||||
key={server.name}
|
||||
label={`${server.ref}`}
|
||||
buttons={(
|
||||
<Button
|
||||
content="Connect"
|
||||
selected={data.selected
|
||||
<Window>
|
||||
<Window.Content scrollable>
|
||||
<Fragment>
|
||||
{!!notice && (
|
||||
<NoticeBox>
|
||||
{notice}
|
||||
</NoticeBox>
|
||||
)}
|
||||
<Section title="Network Control">
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="Network">
|
||||
<Input
|
||||
value={network}
|
||||
width="150px"
|
||||
maxLength={15}
|
||||
onChange={(e, value) => act('network', {
|
||||
'value': value,
|
||||
})} />
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Memory"
|
||||
buttons={(
|
||||
<Fragment>
|
||||
<Button
|
||||
content="Flush Buffer"
|
||||
icon="minus-circle"
|
||||
disabled={!servers.length || !!selected}
|
||||
onClick={() => act('release')} />
|
||||
<Button
|
||||
content="Probe Network"
|
||||
icon="sync"
|
||||
disabled={selected}
|
||||
onClick={() => act('probe')} />
|
||||
</Fragment>
|
||||
)}>
|
||||
{servers ? (
|
||||
`${servers.length} currently probed and buffered`
|
||||
) : (
|
||||
'Buffer is empty!'
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Selected Server"
|
||||
buttons={(
|
||||
<Button
|
||||
content="Disconnect"
|
||||
disabled={!selected}
|
||||
onClick={() => act('mainmenu')}
|
||||
/>
|
||||
)}>
|
||||
{selected ? (
|
||||
`${selected.name} (${selected.id})`
|
||||
) : (
|
||||
"None (None)"
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Recorded Traffic">
|
||||
{selected ? (
|
||||
selected.traffic <= 1024 ? (
|
||||
`${selected.traffic} Gigabytes`
|
||||
) : (
|
||||
`${Math.round(selected.traffic/1024)} Terrabytes`
|
||||
)
|
||||
) : (
|
||||
'0 Gigabytes'
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Server Status"
|
||||
color={operational ? 'good' : 'bad'}>
|
||||
{operational ? (
|
||||
'Running'
|
||||
) : (
|
||||
'Server down!'
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
</Section>
|
||||
<Tabs>
|
||||
<Tabs.Tab
|
||||
key="servers"
|
||||
label="Servers">
|
||||
<Section>
|
||||
{(servers && servers.length) ? (
|
||||
<LabeledList>
|
||||
{servers.map(server => {
|
||||
return (
|
||||
<LabeledList.Item
|
||||
key={server.name}
|
||||
label={`${server.ref}`}
|
||||
buttons={(
|
||||
<Button
|
||||
content="Connect"
|
||||
selected={data.selected
|
||||
&& (server.ref === data.selected.ref)}
|
||||
onClick={() => act('viewmachine', {
|
||||
'value': server.id,
|
||||
})} />
|
||||
)}>
|
||||
{`${server.name} (${server.id})`}
|
||||
</LabeledList.Item>
|
||||
);
|
||||
})}
|
||||
</LabeledList>
|
||||
) : (
|
||||
'404 Servers not found. Have you tried scanning the network?'
|
||||
)}
|
||||
</Section>
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab
|
||||
key="messages"
|
||||
label="Messages"
|
||||
disabled={!operational}>
|
||||
<Section title="Logs">
|
||||
{(operational && selected_logs) ? (
|
||||
selected_logs.map(logs => {
|
||||
return (
|
||||
<Section
|
||||
level={4}
|
||||
key={logs.ref}>
|
||||
<LabeledList>
|
||||
<LabeledList.Item
|
||||
label="Filename"
|
||||
buttons={(
|
||||
<Button
|
||||
content="Delete"
|
||||
onClick={() => act('delete', {
|
||||
'value': logs.ref,
|
||||
})} />
|
||||
)}>
|
||||
{logs.name}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Data type">
|
||||
{logs.input_type}
|
||||
</LabeledList.Item>
|
||||
{logs.source && (
|
||||
<LabeledList.Item label="Source">
|
||||
{`[${logs.source.name}] (Job: [${logs.source.job}])`}
|
||||
onClick={() => act('viewmachine', {
|
||||
'value': server.id,
|
||||
})} />
|
||||
)}>
|
||||
{`${server.name} (${server.id})`}
|
||||
</LabeledList.Item>
|
||||
)}
|
||||
{logs.race && (
|
||||
<LabeledList.Item label="Class">
|
||||
{logs.race}
|
||||
</LabeledList.Item>
|
||||
)}
|
||||
<LabeledList.Item label="Contents">
|
||||
{logs.message}
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
</Section>
|
||||
);
|
||||
})
|
||||
) : (
|
||||
"No server selected!"
|
||||
)}
|
||||
</Section>
|
||||
</Tabs.Tab>
|
||||
</Tabs>
|
||||
</Fragment>
|
||||
);
|
||||
})}
|
||||
</LabeledList>
|
||||
) : (
|
||||
'404 Servers not found. Have you tried scanning the network?'
|
||||
)}
|
||||
</Section>
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab
|
||||
key="messages"
|
||||
label="Messages"
|
||||
disabled={!operational}>
|
||||
<Section title="Logs">
|
||||
{(operational && selected_logs) ? (
|
||||
selected_logs.map(logs => {
|
||||
return (
|
||||
<Section
|
||||
level={4}
|
||||
key={logs.ref}>
|
||||
<LabeledList>
|
||||
<LabeledList.Item
|
||||
label="Filename"
|
||||
buttons={(
|
||||
<Button
|
||||
content="Delete"
|
||||
onClick={() => act('delete', {
|
||||
'value': logs.ref,
|
||||
})} />
|
||||
)}>
|
||||
{logs.name}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Data type">
|
||||
{logs.input_type}
|
||||
</LabeledList.Item>
|
||||
{logs.source && (
|
||||
<LabeledList.Item label="Source">
|
||||
{`[${logs.source.name}]
|
||||
(Job: [${logs.source.job}])`}
|
||||
</LabeledList.Item>
|
||||
)}
|
||||
{logs.race && (
|
||||
<LabeledList.Item label="Class">
|
||||
{logs.race}
|
||||
</LabeledList.Item>
|
||||
)}
|
||||
<LabeledList.Item label="Contents">
|
||||
{logs.message}
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
</Section>
|
||||
);
|
||||
})
|
||||
) : (
|
||||
"No server selected!"
|
||||
)}
|
||||
</Section>
|
||||
</Tabs.Tab>
|
||||
</Tabs>
|
||||
</Fragment>
|
||||
</Window.Content>
|
||||
</Window>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Fragment } from 'inferno';
|
||||
import { useBackend } from '../backend';
|
||||
import { RADIO_CHANNELS } from '../constants';
|
||||
import { Box, Button, LabeledList, NoticeBox, Section, Tabs, Input } from '../components';
|
||||
import { Box, Button, LabeledList, NoticeBox, Section, Tabs, Input, Window } from '../components';
|
||||
|
||||
|
||||
export const Telemonitor = (props, context) => {
|
||||
@@ -16,206 +16,212 @@ export const Telemonitor = (props, context) => {
|
||||
const operational = (selected && selected.status);
|
||||
|
||||
return (
|
||||
<Fragment>
|
||||
{!!notice && (
|
||||
<NoticeBox>
|
||||
{notice}
|
||||
</NoticeBox>
|
||||
)}
|
||||
<Section title="Network Control">
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="Network">
|
||||
<Input
|
||||
value={network}
|
||||
width="150px"
|
||||
maxLength={15}
|
||||
onChange={(e, value) => act('network', {
|
||||
'value': value,
|
||||
})} />
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Memory"
|
||||
buttons={(
|
||||
<Fragment>
|
||||
<Button
|
||||
content="Flush Buffer"
|
||||
icon="minus-circle"
|
||||
disabled={!servers.length || !!selected}
|
||||
onClick={() => act('release')} />
|
||||
<Button
|
||||
content="Probe Network"
|
||||
icon="sync"
|
||||
disabled={selected}
|
||||
onClick={() => act('probe')} />
|
||||
</Fragment>
|
||||
)}>
|
||||
{!selected ? (
|
||||
servers ? (
|
||||
`${servers.length} currently probed and buffered`
|
||||
) : (
|
||||
'Buffer is empty!'
|
||||
)
|
||||
) : (
|
||||
selected_servers ? (
|
||||
`${selected_servers.length} currently probed and buffered`
|
||||
) : (
|
||||
'Connected devices is empty!'
|
||||
)
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Selected Entity"
|
||||
buttons={(
|
||||
<Button
|
||||
content="Disconnect"
|
||||
icon="minus-circle"
|
||||
disabled={!selected}
|
||||
onClick={() => act('mainmenu')}
|
||||
/>
|
||||
)}>
|
||||
{selected ? (
|
||||
`${selected.name} (${selected.id})`
|
||||
) : (
|
||||
"None (None)"
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
</Section>
|
||||
<Tabs>
|
||||
<Tabs.Tab label="Network Entities">
|
||||
<Section title="Detected Network Entities">
|
||||
{(servers && servers.length) ? (
|
||||
<LabeledList>
|
||||
{servers.map(server => {
|
||||
return (
|
||||
<LabeledList.Item
|
||||
key={server.name}
|
||||
label={server.ref}
|
||||
buttons={(
|
||||
<Button
|
||||
content="Connect"
|
||||
selected={selected
|
||||
&& (server.ref === selected.ref)}
|
||||
onClick={() => act('viewmachine', {
|
||||
'value': server.id,
|
||||
})} />
|
||||
)}>
|
||||
{`${server.name} (${server.id})`}
|
||||
</LabeledList.Item>
|
||||
);
|
||||
})}
|
||||
</LabeledList>
|
||||
) : (
|
||||
'404 Servers not found. Have you tried scanning the network?'
|
||||
)}
|
||||
</Section>
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab
|
||||
label="Entity Status"
|
||||
disabled={!selected}>
|
||||
<Section title="Network Entity Status">
|
||||
<Window>
|
||||
<Window.Content scrollable>
|
||||
<Fragment>
|
||||
{!!notice && (
|
||||
<NoticeBox>
|
||||
{notice}
|
||||
</NoticeBox>
|
||||
)}
|
||||
<Section title="Network Control">
|
||||
<LabeledList>
|
||||
<LabeledList.Item
|
||||
label="Status"
|
||||
color={operational ? 'good' : 'bad'}>
|
||||
{operational ? (
|
||||
'Running'
|
||||
) : (
|
||||
'Server down!'
|
||||
)}
|
||||
<LabeledList.Item label="Network">
|
||||
<Input
|
||||
value={network}
|
||||
width="150px"
|
||||
maxLength={15}
|
||||
onChange={(e, value) => act('network', {
|
||||
'value': value,
|
||||
})} />
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Network Traffic"
|
||||
color={operational && (selected.netspeed < selected.traffic) ? (
|
||||
'bad'
|
||||
) : (
|
||||
'good'
|
||||
label="Memory"
|
||||
buttons={(
|
||||
<Fragment>
|
||||
<Button
|
||||
content="Flush Buffer"
|
||||
icon="minus-circle"
|
||||
disabled={!servers.length || !!selected}
|
||||
onClick={() => act('release')} />
|
||||
<Button
|
||||
content="Probe Network"
|
||||
icon="sync"
|
||||
disabled={selected}
|
||||
onClick={() => act('probe')} />
|
||||
</Fragment>
|
||||
)}>
|
||||
{operational ? ( // Not to be confused to totaltraffic
|
||||
selected.traffic <= 1024 ? (
|
||||
`${Math.max(selected.traffic, 0)} Gigabytes`
|
||||
{!selected ? (
|
||||
servers ? (
|
||||
`${servers.length} currently probed and buffered`
|
||||
) : (
|
||||
`${Math.round(selected.traffic/1024)} Terrabytes`
|
||||
'Buffer is empty!'
|
||||
)
|
||||
) : (
|
||||
'0 Gigabytes'
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Network Speed">
|
||||
{operational ? (
|
||||
selected.netspeed <= 1024 ? (
|
||||
`${selected.netspeed} Gigabytes/second`
|
||||
selected_servers ? (
|
||||
`${selected_servers.length} currently probed and buffered`
|
||||
) : (
|
||||
`${Math.round(selected.netspeed/1024)} Terrabytes/second`
|
||||
'Connected devices is empty!'
|
||||
)
|
||||
) : (
|
||||
'0 Gigabytes/second'
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Multi-Z Link"
|
||||
color={(operational && selected.long_range_link) ? (
|
||||
'good'
|
||||
) : (
|
||||
'bad'
|
||||
label="Selected Entity"
|
||||
buttons={(
|
||||
<Button
|
||||
content="Disconnect"
|
||||
icon="minus-circle"
|
||||
disabled={!selected}
|
||||
onClick={() => act('mainmenu')}
|
||||
/>
|
||||
)}>
|
||||
{(operational && selected.long_range_link) ? (
|
||||
'true'
|
||||
{selected ? (
|
||||
`${selected.name} (${selected.id})`
|
||||
) : (
|
||||
'false'
|
||||
"None (None)"
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Frequency Listening">
|
||||
<Box>
|
||||
{operational && selected.freq_listening.map(thing => {
|
||||
const valid = RADIO_CHANNELS
|
||||
.find(channel => channel.freq === thing);
|
||||
return (
|
||||
(valid) ? (
|
||||
<span style={`color: ${valid.color}`}>
|
||||
{`[${thing}] (${valid.name}) `}
|
||||
</span>
|
||||
) : (
|
||||
`[${thing}] `
|
||||
)
|
||||
);
|
||||
})}
|
||||
</Box>
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
<Section
|
||||
title="Servers Linked"
|
||||
level={3}>
|
||||
{(operational && selected_servers) ? (
|
||||
<LabeledList>
|
||||
{selected_servers.map(server => {
|
||||
return (
|
||||
<LabeledList.Item
|
||||
key={server.name}
|
||||
label={server.ref}
|
||||
buttons={(
|
||||
<Button
|
||||
content="Connect"
|
||||
onClick={() => act('viewmachine', {
|
||||
'value': server.id,
|
||||
})} />
|
||||
)}>
|
||||
{`${server.name} (${server.id})`}
|
||||
</LabeledList.Item>
|
||||
);
|
||||
})}
|
||||
</LabeledList>
|
||||
) : (
|
||||
!operational ? (
|
||||
"Server currently down! Cannot fetch the buffer list!"
|
||||
) : (
|
||||
"Buffer is empty!"
|
||||
)
|
||||
)}
|
||||
</Section>
|
||||
</Section>
|
||||
</Tabs.Tab>
|
||||
</Tabs>
|
||||
</Fragment>
|
||||
<Tabs>
|
||||
<Tabs.Tab label="Network Entities">
|
||||
<Section title="Detected Network Entities">
|
||||
{(servers && servers.length) ? (
|
||||
<LabeledList>
|
||||
{servers.map(server => {
|
||||
return (
|
||||
<LabeledList.Item
|
||||
key={server.name}
|
||||
label={server.ref}
|
||||
buttons={(
|
||||
<Button
|
||||
content="Connect"
|
||||
selected={selected
|
||||
&& (server.ref === selected.ref)}
|
||||
onClick={() => act('viewmachine', {
|
||||
'value': server.id,
|
||||
})} />
|
||||
)}>
|
||||
{`${server.name} (${server.id})`}
|
||||
</LabeledList.Item>
|
||||
);
|
||||
})}
|
||||
</LabeledList>
|
||||
) : (
|
||||
'404 Servers not found. Have you tried scanning the network?'
|
||||
)}
|
||||
</Section>
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab
|
||||
label="Entity Status"
|
||||
disabled={!selected}>
|
||||
<Section title="Network Entity Status">
|
||||
<LabeledList>
|
||||
<LabeledList.Item
|
||||
label="Status"
|
||||
color={operational ? 'good' : 'bad'}>
|
||||
{operational ? (
|
||||
'Running'
|
||||
) : (
|
||||
'Server down!'
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Network Traffic"
|
||||
color={operational
|
||||
&& (selected.netspeed < selected.traffic) ? (
|
||||
'bad'
|
||||
) : (
|
||||
'good'
|
||||
)}>
|
||||
{operational ? ( // Not to be confused to totaltraffic
|
||||
selected.traffic <= 1024 ? (
|
||||
`${Math.max(selected.traffic, 0)} Gigabytes`
|
||||
) : (
|
||||
`${Math.round(selected.traffic/1024)} Terrabytes`
|
||||
)
|
||||
) : (
|
||||
'0 Gigabytes'
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Network Speed">
|
||||
{operational ? (
|
||||
selected.netspeed <= 1024 ? (
|
||||
`${selected.netspeed} Gigabytes/second`
|
||||
) : (
|
||||
`${Math.round(selected.netspeed/1024)}
|
||||
Terrabytes/second`
|
||||
)
|
||||
) : (
|
||||
'0 Gigabytes/second'
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Multi-Z Link"
|
||||
color={(operational && selected.long_range_link) ? (
|
||||
'good'
|
||||
) : (
|
||||
'bad'
|
||||
)}>
|
||||
{(operational && selected.long_range_link) ? (
|
||||
'true'
|
||||
) : (
|
||||
'false'
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Frequency Listening">
|
||||
<Box>
|
||||
{operational && selected.freq_listening.map(thing => {
|
||||
const valid = RADIO_CHANNELS
|
||||
.find(channel => channel.freq === thing);
|
||||
return (
|
||||
(valid) ? (
|
||||
<span style={`color: ${valid.color}`}>
|
||||
{`[${thing}] (${valid.name}) `}
|
||||
</span>
|
||||
) : (
|
||||
`[${thing}] `
|
||||
)
|
||||
);
|
||||
})}
|
||||
</Box>
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
<Section
|
||||
title="Servers Linked"
|
||||
level={3}>
|
||||
{(operational && selected_servers) ? (
|
||||
<LabeledList>
|
||||
{selected_servers.map(server => {
|
||||
return (
|
||||
<LabeledList.Item
|
||||
key={server.name}
|
||||
label={server.ref}
|
||||
buttons={(
|
||||
<Button
|
||||
content="Connect"
|
||||
onClick={() => act('viewmachine', {
|
||||
'value': server.id,
|
||||
})} />
|
||||
)}>
|
||||
{`${server.name} (${server.id})`}
|
||||
</LabeledList.Item>
|
||||
);
|
||||
})}
|
||||
</LabeledList>
|
||||
) : (
|
||||
!operational ? (
|
||||
"Server currently down! Cannot fetch the buffer list!"
|
||||
) : (
|
||||
"Buffer is empty!"
|
||||
)
|
||||
)}
|
||||
</Section>
|
||||
</Section>
|
||||
</Tabs.Tab>
|
||||
</Tabs>
|
||||
</Fragment>
|
||||
</Window.Content>
|
||||
</Window>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Fragment } from 'inferno';
|
||||
import { useBackend } from '../backend';
|
||||
import { act as _act } from '../byond';
|
||||
import { Button, LabeledList, NoticeBox, Section, Tabs, Input } from '../components';
|
||||
import { Button, LabeledList, NoticeBox, Section, Tabs, Input, Window } from '../components';
|
||||
|
||||
export const TelePDALog = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
@@ -64,357 +64,362 @@ export const TelePDALog = (props, context) => {
|
||||
}
|
||||
|
||||
return (
|
||||
<Fragment>
|
||||
{!!notice && (
|
||||
<NoticeBox>
|
||||
{notice}
|
||||
</NoticeBox>
|
||||
)}
|
||||
<Section title="Network Control">
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="Network">
|
||||
<Input
|
||||
value={network}
|
||||
width="150px"
|
||||
maxLength={15}
|
||||
onChange={(e, value) => act('network', {
|
||||
'value': value,
|
||||
})} />
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Memory"
|
||||
buttons={(
|
||||
<Fragment>
|
||||
<Button
|
||||
content="Flush Buffer"
|
||||
icon="minus-circle"
|
||||
disabled={!servers.length}
|
||||
onClick={() => act('release')} />
|
||||
<Button
|
||||
content="Probe Network"
|
||||
icon="sync"
|
||||
disabled={servers.length}
|
||||
onClick={() => act('probe')} />
|
||||
</Fragment>
|
||||
)}>
|
||||
{servers ? (
|
||||
`${servers.length} currently probed and buffered`
|
||||
) : (
|
||||
'Buffer is empty!'
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Authentication"
|
||||
color={authenticated ? 'good' : 'bad'}
|
||||
buttons={(
|
||||
<Fragment>
|
||||
<Button
|
||||
content="Change Password"
|
||||
disabled={!authenticated || !selected}
|
||||
onClick={() => act('change_auth')}
|
||||
/>
|
||||
{canhack && (
|
||||
<Button
|
||||
content="Brute Force"
|
||||
color="bad"
|
||||
disabled={authenticated || !selected}
|
||||
onClick={() => act('hack')}
|
||||
/>
|
||||
)}
|
||||
</Fragment>
|
||||
)}>
|
||||
{authenticated ? "KEY OK" : "KEY FAIL"}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="PDA Server"
|
||||
buttons={(
|
||||
<Fragment>
|
||||
<Button
|
||||
content={!authenticated ? 'Login' : 'Logout'}
|
||||
icon={authenticated ? 'unlock' : 'lock'}
|
||||
color={authenticated ? 'good' : 'bad'}
|
||||
disabled={!selected}
|
||||
onClick={() => act('auth')}
|
||||
/>
|
||||
<Button
|
||||
content="Disconnect"
|
||||
icon="minus-circle"
|
||||
disabled={!selected}
|
||||
onClick={() => act('mainmenu')}
|
||||
/>
|
||||
</Fragment>
|
||||
)}>
|
||||
{selected ? (
|
||||
`${selected.name} (${selected.id})`
|
||||
) : (
|
||||
"None (None)"
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="PDA Server Status"
|
||||
color={(selected && selected.status) ? 'good' : 'bad'}>
|
||||
{selected ? (
|
||||
selected.status ? (
|
||||
'Running'
|
||||
) : (
|
||||
'Server down! Logging and messaging functionality unavailable!'
|
||||
)
|
||||
):(
|
||||
'No server selected'
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
</Section>
|
||||
<Tabs>
|
||||
<Tabs.Tab
|
||||
key="servers"
|
||||
label="Servers">
|
||||
<Section>
|
||||
{(servers && servers.length) ? (
|
||||
<LabeledList>
|
||||
{servers.map(server => {
|
||||
return (
|
||||
<LabeledList.Item
|
||||
key={server.name}
|
||||
label={`${server.ref}`}
|
||||
buttons={(
|
||||
<Button
|
||||
content="Connect"
|
||||
selected={data.selected
|
||||
&& (server.ref === data.selected.ref)}
|
||||
onClick={() => act('viewmachine', {
|
||||
'value': server.id,
|
||||
})} />
|
||||
)}>
|
||||
{`${server.name} (${server.id})`}
|
||||
</LabeledList.Item>
|
||||
);
|
||||
})}
|
||||
</LabeledList>
|
||||
) : (
|
||||
'404 Servers not found. Have you tried scanning the network?'
|
||||
)}
|
||||
</Section>
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab
|
||||
key="message_logs"
|
||||
label="Message Logs"
|
||||
disabled={!valid}>
|
||||
<Section title="Logs">
|
||||
<Button
|
||||
content="Refresh"
|
||||
icon="sync"
|
||||
onClick={() => act('refresh')}
|
||||
/>
|
||||
<Button
|
||||
content="Delete All Logs"
|
||||
icon="trash"
|
||||
disabled={!(message_logs && message_logs.length)}
|
||||
onClick={() => act('clear_log', {
|
||||
'value': 'pda_logs',
|
||||
})}
|
||||
/>
|
||||
<Section
|
||||
title="Messages"
|
||||
level={2}>
|
||||
{(message_logs && message_logs.length) ? (
|
||||
message_logs.map(message => {
|
||||
return (
|
||||
<Section key={message.ref}>
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="Sender"
|
||||
buttons={(
|
||||
<Button
|
||||
content="Delete"
|
||||
onClick={() => act('del_log', {
|
||||
'ref': message.ref,
|
||||
})}
|
||||
/>
|
||||
)}>
|
||||
{message.sender}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Recipient">
|
||||
{message.recipient}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Message"
|
||||
buttons={(
|
||||
message.image && (
|
||||
<Button // Had to use _act for this.
|
||||
content="Image"
|
||||
onClick={() => _act(message.ref, 'photo')}
|
||||
/>
|
||||
)
|
||||
)}>
|
||||
{message.message}
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
</Section>
|
||||
);
|
||||
})
|
||||
) : (
|
||||
'Error: Logs empty'
|
||||
)}
|
||||
</Section>
|
||||
</Section>
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab
|
||||
key="recon_logs"
|
||||
label="Req. Console Logs"
|
||||
disabled={!valid}>
|
||||
<Section title="Logs">
|
||||
<Button
|
||||
content="Refresh"
|
||||
icon="sync"
|
||||
onClick={() => act('refresh')}
|
||||
/>
|
||||
<Button
|
||||
content="Delete All Logs"
|
||||
icon="trash"
|
||||
disabled={!(recon_logs && recon_logs.length)}
|
||||
onClick={() => act('clear_log', {
|
||||
'value': 'rc_msgs',
|
||||
})}
|
||||
/>
|
||||
<Section
|
||||
title="Requests"
|
||||
level={2}>
|
||||
{(recon_logs && recon_logs.length) ? (
|
||||
recon_logs.map(message => {
|
||||
return (
|
||||
<Section key={message.ref}>
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="Sending Dep."
|
||||
buttons={(
|
||||
<Button
|
||||
content="Delete"
|
||||
onClick={() => act('del_log', {
|
||||
'ref': message.ref,
|
||||
})}
|
||||
/>
|
||||
)}>
|
||||
{message.sender}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Receiving Dep.">
|
||||
{message.recipient}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Message">
|
||||
{message.message}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Stamp"
|
||||
color={message.stamp !== "Unstamped" ? (
|
||||
'label'
|
||||
) : (
|
||||
'bad'
|
||||
)}>
|
||||
{message.stamp !== 'Unstamped' ? (
|
||||
<b>{message.stamp}</b>
|
||||
) : (
|
||||
message.stamp
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="ID Authentication"
|
||||
color={message.auth !== "Unauthenticated" ? (
|
||||
'good'
|
||||
) : (
|
||||
'bad'
|
||||
)}>
|
||||
{message.auth}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Priority"
|
||||
color={(message.priority in prioritycolorMap) ? (
|
||||
prioritycolorMap[message.priority]
|
||||
) : (
|
||||
'good'
|
||||
)}>
|
||||
{message.priority === 'Extreme' ? (
|
||||
<b>!!{message.priority}!!</b>
|
||||
) : (
|
||||
message.priority
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
</Section>
|
||||
);
|
||||
})
|
||||
) : (
|
||||
'Error: No logs found'
|
||||
)}
|
||||
</Section>
|
||||
</Section>
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab
|
||||
key="custom_pda"
|
||||
label="Set Admin Message"
|
||||
disabled={!valid}>
|
||||
<Section title="Custom Message">
|
||||
<Button
|
||||
content="Reset"
|
||||
icon="sync"
|
||||
onClick={() => act('fake', {
|
||||
'reset': true,
|
||||
})}
|
||||
/>
|
||||
<Button
|
||||
content="Send"
|
||||
disabled={!fake_message.recepient || !fake_message.message}
|
||||
onClick={() => act('fake', {
|
||||
'send': true,
|
||||
})}
|
||||
/>
|
||||
<br /><br />
|
||||
<Window>
|
||||
<Window.Content scrollable>
|
||||
<Fragment>
|
||||
{!!notice && (
|
||||
<NoticeBox>
|
||||
{notice}
|
||||
</NoticeBox>
|
||||
)}
|
||||
<Section title="Network Control">
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="Sender">
|
||||
<LabeledList.Item label="Network">
|
||||
<Input
|
||||
value={fake_message.sender}
|
||||
width="250px"
|
||||
maxLength={42}
|
||||
onChange={(e, value) => act('fake', {
|
||||
'sender': value,
|
||||
})}
|
||||
/>
|
||||
value={network}
|
||||
width="150px"
|
||||
maxLength={15}
|
||||
onChange={(e, value) => act('network', {
|
||||
'value': value,
|
||||
})} />
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Sender's Job">
|
||||
<Input
|
||||
value={fake_message.job}
|
||||
width="250px"
|
||||
maxLength={100}
|
||||
onChange={(e, value) => act('fake', {
|
||||
'job': value,
|
||||
})}
|
||||
/>
|
||||
<LabeledList.Item
|
||||
label="Memory"
|
||||
buttons={(
|
||||
<Fragment>
|
||||
<Button
|
||||
content="Flush Buffer"
|
||||
icon="minus-circle"
|
||||
disabled={!servers.length}
|
||||
onClick={() => act('release')} />
|
||||
<Button
|
||||
content="Probe Network"
|
||||
icon="sync"
|
||||
disabled={servers.length}
|
||||
onClick={() => act('probe')} />
|
||||
</Fragment>
|
||||
)}>
|
||||
{servers ? (
|
||||
`${servers.length} currently probed and buffered`
|
||||
) : (
|
||||
'Buffer is empty!'
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Recipient">
|
||||
<Button
|
||||
content={fake_message.recepient ? (
|
||||
fake_message.recepient
|
||||
<LabeledList.Item
|
||||
label="Authentication"
|
||||
color={authenticated ? 'good' : 'bad'}
|
||||
buttons={(
|
||||
<Fragment>
|
||||
<Button
|
||||
content="Change Password"
|
||||
disabled={!authenticated || !selected}
|
||||
onClick={() => act('change_auth')}
|
||||
/>
|
||||
{canhack && (
|
||||
<Button
|
||||
content="Brute Force"
|
||||
color="bad"
|
||||
disabled={authenticated || !selected}
|
||||
onClick={() => act('hack')}
|
||||
/>
|
||||
)}
|
||||
</Fragment>
|
||||
)}>
|
||||
{authenticated ? "KEY OK" : "KEY FAIL"}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="PDA Server"
|
||||
buttons={(
|
||||
<Fragment>
|
||||
<Button
|
||||
content={!authenticated ? 'Login' : 'Logout'}
|
||||
icon={authenticated ? 'unlock' : 'lock'}
|
||||
color={authenticated ? 'good' : 'bad'}
|
||||
disabled={!selected}
|
||||
onClick={() => act('auth')}
|
||||
/>
|
||||
<Button
|
||||
content="Disconnect"
|
||||
icon="minus-circle"
|
||||
disabled={!selected}
|
||||
onClick={() => act('mainmenu')}
|
||||
/>
|
||||
</Fragment>
|
||||
)}>
|
||||
{selected ? (
|
||||
`${selected.name} (${selected.id})`
|
||||
) : (
|
||||
"None (None)"
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="PDA Server Status"
|
||||
color={(selected && selected.status) ? 'good' : 'bad'}>
|
||||
{selected ? (
|
||||
selected.status ? (
|
||||
'Running'
|
||||
) : (
|
||||
'Select'
|
||||
)}
|
||||
selected={fake_message.recepient}
|
||||
onClick={() => act('fake', {
|
||||
'recepient': true,
|
||||
})}
|
||||
/>
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Message">
|
||||
<Input
|
||||
value={fake_message.message}
|
||||
width="500px"
|
||||
height="150px"
|
||||
maxLength={2048}
|
||||
onChange={(e, value) => act('fake', {
|
||||
'message': value,
|
||||
})}
|
||||
/>
|
||||
'Server down! \
|
||||
Logging and messaging functionality unavailable!'
|
||||
)
|
||||
):(
|
||||
'No server selected'
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
</Section>
|
||||
</Tabs.Tab>
|
||||
</Tabs>
|
||||
</Fragment>
|
||||
<Tabs>
|
||||
<Tabs.Tab
|
||||
key="servers"
|
||||
label="Servers">
|
||||
<Section>
|
||||
{(servers && servers.length) ? (
|
||||
<LabeledList>
|
||||
{servers.map(server => {
|
||||
return (
|
||||
<LabeledList.Item
|
||||
key={server.name}
|
||||
label={`${server.ref}`}
|
||||
buttons={(
|
||||
<Button
|
||||
content="Connect"
|
||||
selected={data.selected
|
||||
&& (server.ref === data.selected.ref)}
|
||||
onClick={() => act('viewmachine', {
|
||||
'value': server.id,
|
||||
})} />
|
||||
)}>
|
||||
{`${server.name} (${server.id})`}
|
||||
</LabeledList.Item>
|
||||
);
|
||||
})}
|
||||
</LabeledList>
|
||||
) : (
|
||||
'404 Servers not found. Have you tried scanning the network?'
|
||||
)}
|
||||
</Section>
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab
|
||||
key="message_logs"
|
||||
label="Message Logs"
|
||||
disabled={!valid}>
|
||||
<Section title="Logs">
|
||||
<Button
|
||||
content="Refresh"
|
||||
icon="sync"
|
||||
onClick={() => act('refresh')}
|
||||
/>
|
||||
<Button
|
||||
content="Delete All Logs"
|
||||
icon="trash"
|
||||
disabled={!(message_logs && message_logs.length)}
|
||||
onClick={() => act('clear_log', {
|
||||
'value': 'pda_logs',
|
||||
})}
|
||||
/>
|
||||
<Section
|
||||
title="Messages"
|
||||
level={2}>
|
||||
{(message_logs && message_logs.length) ? (
|
||||
message_logs.map(message => {
|
||||
return (
|
||||
<Section key={message.ref}>
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="Sender"
|
||||
buttons={(
|
||||
<Button
|
||||
content="Delete"
|
||||
onClick={() => act('del_log', {
|
||||
'ref': message.ref,
|
||||
})}
|
||||
/>
|
||||
)}>
|
||||
{message.sender}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Recipient">
|
||||
{message.recipient}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Message"
|
||||
buttons={(
|
||||
message.image && (
|
||||
<Button // Had to use _act for this.
|
||||
content="Image"
|
||||
onClick={() => _act(message.ref, 'photo')}
|
||||
/>
|
||||
)
|
||||
)}>
|
||||
{message.message}
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
</Section>
|
||||
);
|
||||
})
|
||||
) : (
|
||||
'Error: Logs empty'
|
||||
)}
|
||||
</Section>
|
||||
</Section>
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab
|
||||
key="recon_logs"
|
||||
label="Req. Console Logs"
|
||||
disabled={!valid}>
|
||||
<Section title="Logs">
|
||||
<Button
|
||||
content="Refresh"
|
||||
icon="sync"
|
||||
onClick={() => act('refresh')}
|
||||
/>
|
||||
<Button
|
||||
content="Delete All Logs"
|
||||
icon="trash"
|
||||
disabled={!(recon_logs && recon_logs.length)}
|
||||
onClick={() => act('clear_log', {
|
||||
'value': 'rc_msgs',
|
||||
})}
|
||||
/>
|
||||
<Section
|
||||
title="Requests"
|
||||
level={2}>
|
||||
{(recon_logs && recon_logs.length) ? (
|
||||
recon_logs.map(message => {
|
||||
return (
|
||||
<Section key={message.ref}>
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="Sending Dep."
|
||||
buttons={(
|
||||
<Button
|
||||
content="Delete"
|
||||
onClick={() => act('del_log', {
|
||||
'ref': message.ref,
|
||||
})}
|
||||
/>
|
||||
)}>
|
||||
{message.sender}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Receiving Dep.">
|
||||
{message.recipient}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Message">
|
||||
{message.message}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Stamp"
|
||||
color={message.stamp !== "Unstamped" ? (
|
||||
'label'
|
||||
) : (
|
||||
'bad'
|
||||
)}>
|
||||
{message.stamp !== 'Unstamped' ? (
|
||||
<b>{message.stamp}</b>
|
||||
) : (
|
||||
message.stamp
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="ID Authentication"
|
||||
color={message.auth !== "Unauthenticated" ? (
|
||||
'good'
|
||||
) : (
|
||||
'bad'
|
||||
)}>
|
||||
{message.auth}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Priority"
|
||||
color={(message.priority in prioritycolorMap) ? (
|
||||
prioritycolorMap[message.priority]
|
||||
) : (
|
||||
'good'
|
||||
)}>
|
||||
{message.priority === 'Extreme' ? (
|
||||
<b>!!{message.priority}!!</b>
|
||||
) : (
|
||||
message.priority
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
</Section>
|
||||
);
|
||||
})
|
||||
) : (
|
||||
'Error: No logs found'
|
||||
)}
|
||||
</Section>
|
||||
</Section>
|
||||
</Tabs.Tab>
|
||||
<Tabs.Tab
|
||||
key="custom_pda"
|
||||
label="Set Admin Message"
|
||||
disabled={!valid}>
|
||||
<Section title="Custom Message">
|
||||
<Button
|
||||
content="Reset"
|
||||
icon="sync"
|
||||
onClick={() => act('fake', {
|
||||
'reset': true,
|
||||
})}
|
||||
/>
|
||||
<Button
|
||||
content="Send"
|
||||
disabled={!fake_message.recepient || !fake_message.message}
|
||||
onClick={() => act('fake', {
|
||||
'send': true,
|
||||
})}
|
||||
/>
|
||||
<br /><br />
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="Sender">
|
||||
<Input
|
||||
value={fake_message.sender}
|
||||
width="250px"
|
||||
maxLength={42}
|
||||
onChange={(e, value) => act('fake', {
|
||||
'sender': value,
|
||||
})}
|
||||
/>
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Sender's Job">
|
||||
<Input
|
||||
value={fake_message.job}
|
||||
width="250px"
|
||||
maxLength={100}
|
||||
onChange={(e, value) => act('fake', {
|
||||
'job': value,
|
||||
})}
|
||||
/>
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Recipient">
|
||||
<Button
|
||||
content={fake_message.recepient ? (
|
||||
fake_message.recepient
|
||||
) : (
|
||||
'Select'
|
||||
)}
|
||||
selected={fake_message.recepient}
|
||||
onClick={() => act('fake', {
|
||||
'recepient': true,
|
||||
})}
|
||||
/>
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Message">
|
||||
<Input
|
||||
value={fake_message.message}
|
||||
width="500px"
|
||||
height="150px"
|
||||
maxLength={2048}
|
||||
onChange={(e, value) => act('fake', {
|
||||
'message': value,
|
||||
})}
|
||||
/>
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
</Section>
|
||||
</Tabs.Tab>
|
||||
</Tabs>
|
||||
</Fragment>
|
||||
</Window.Content>
|
||||
</Window>
|
||||
);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user