mirror of
https://github.com/RoganDawes/P4wnP1_aloa.git
synced 2025-03-19 14:21:42 +01:00
Webclient: Reworked most components, intergrated vuex getters
This commit is contained in:
parent
2b32f25188
commit
6d51820f76
4
dist/www/index.html
vendored
4
dist/www/index.html
vendored
@ -48,8 +48,8 @@
|
||||
</q-toolbar>
|
||||
<q-tabs>
|
||||
<q-route-tab default slot="title" to="usb" name="tab-usb" icon="usb" label="USB Settings"></q-route-tab>
|
||||
<q-route-tab slot="title" to="hid" name="tab-hid-script" icon="code" label="HID Script"></q-route-tab>
|
||||
<q-route-tab slot="title" to="hidjobs" name="tab-hid-jobs" icon="schedule" label="HID Jobs"></q-route-tab>
|
||||
<q-route-tab slot="title" to="hid" name="tab-hid-script" icon="code" label="HIDScript"></q-route-tab>
|
||||
<q-route-tab slot="title" to="hidjobs" name="tab-hid-jobs" icon="schedule" label="HID Events"></q-route-tab>
|
||||
<q-route-tab slot="title" to="logger" name="tab-logger" icon="message" label="Event Log"></q-route-tab>
|
||||
<q-route-tab slot="title" to="network" name="tab-network" icon="settings_ethernet" label="Network settings"></q-route-tab>
|
||||
<q-route-tab slot="title" to="wifi" name="tab-wifi" icon="wifi" label="WiFi settings"></q-route-tab>
|
||||
|
72
web_client/hvueCompHIDEvents.go
Normal file
72
web_client/hvueCompHIDEvents.go
Normal file
@ -0,0 +1,72 @@
|
||||
// +build js
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/HuckRidgeSW/hvue"
|
||||
"github.com/mame82/P4wnP1_go/common_web"
|
||||
"github.com/gopherjs/gopherjs/js"
|
||||
)
|
||||
|
||||
type CompHIDEventsData struct {
|
||||
*js.Object
|
||||
Pagination *jsDataTablePagination `js:"pagination"`
|
||||
}
|
||||
|
||||
func newCompHIDEventsData(vm *hvue.VM) interface{} {
|
||||
data := &CompHIDEventsData{ Object: O() }
|
||||
data.Pagination = newPagination(0, 1)
|
||||
return data
|
||||
}
|
||||
|
||||
func InitCompHIDEvents() {
|
||||
|
||||
hvue.NewComponent(
|
||||
"hid-job-event-overview",
|
||||
hvue.Template(compHIDJobEventOverviewTemplate),
|
||||
hvue.DataFunc(newCompHIDEventsData),
|
||||
hvue.Computed("events",
|
||||
func(vm *hvue.VM) interface{} {
|
||||
return vm.Get("$store").Get("state").Get("eventReceiver").Get("eventHidArray")
|
||||
}),
|
||||
hvue.Method("evIdToString", func(vm *hvue.VM, evID int64) (res string) {
|
||||
println("EvID", evID)
|
||||
return common_web.EventType_name[evID]
|
||||
}),
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
const (
|
||||
//{ "evtype": 0, "vmId": 2, "jobId": 3, "hasError": false, "result": "null", "error": "", "message": "Script started", "time": "2018-07-30 04:56:42.297533 +0000 UTC m=+7625.097825001" }
|
||||
compHIDJobEventOverviewTemplate = `
|
||||
<q-card>
|
||||
<!-- <div class="scroll" style="overflow: auto;max-height: 20vh;"> -->
|
||||
<div>
|
||||
<q-table
|
||||
:data="events"
|
||||
:columns="[{name:'type', field: 'evtype', label: 'Event Type', align: 'left'}, {name:'vmid', field: 'vmId', label: 'VM ID', align: 'left'}, {name:'jobid', field: 'jobId', label: 'Job ID', align: 'left'}, {name:'haserror', field: 'hasError', label: 'Has error', align: 'left'}, {name:'res', field: 'result', label: 'Result', align: 'left'}, {name:'errormsg', field: 'error', label: 'Error', align: 'left'}, {name:'msg', field: 'message', label: 'Message', align: 'left'}, {name:'timestamp', field: 'time', label: 'Time', align: 'left'}]"
|
||||
row-key="name"
|
||||
:pagination="pagination"
|
||||
hide-bottom
|
||||
>
|
||||
|
||||
<q-td slot="body-cell-type" slot-scope="props" :props="props">
|
||||
{{ evIdToString(props.value) }}
|
||||
</q-td>
|
||||
<q-td slot="body-cell-msg" slot-scope="props" :props="props">
|
||||
{{ props.value.slice(0,30) }}
|
||||
<q-btn v-if="props.value.length > 30" dense icon="more_horiz">
|
||||
|
||||
<q-popover>
|
||||
<div class="q-ma-md" style="max-width: 400px; max-height: 400px;">
|
||||
<pre>{{ props.value }}</pre>
|
||||
</div>
|
||||
</q-popover>
|
||||
</q-btn>
|
||||
</q-td>
|
||||
</q-table>
|
||||
</div>
|
||||
</q-card>
|
||||
`
|
||||
)
|
@ -5,7 +5,6 @@ package main
|
||||
import (
|
||||
"github.com/gopherjs/gopherjs/js"
|
||||
"github.com/HuckRidgeSW/hvue"
|
||||
"github.com/mame82/P4wnP1_go/common_web"
|
||||
)
|
||||
|
||||
type CompHIDJobsData struct {
|
||||
@ -28,25 +27,11 @@ func InitCompHIDJobs() {
|
||||
hvue.DataFunc(newCompHIDJobsData),
|
||||
hvue.Computed("jobs",
|
||||
func(vm *hvue.VM) interface{} {
|
||||
jobList := vm.Get("$store").Get("state").Get("hidJobList").Get("jobs")
|
||||
return js.Global.Get("Object").Call("values",jobList)
|
||||
//return vm.Get("$store").Get("state").Get("hidJobList").Get("jobs")
|
||||
return vm.Get("$store").Get("getters").Get("hidjobs")
|
||||
}),
|
||||
)
|
||||
|
||||
hvue.NewComponent(
|
||||
"hid-job-event-overview",
|
||||
hvue.Template(compHIDJobEventOverviewTemplate),
|
||||
hvue.DataFunc(newCompHIDJobsData),
|
||||
hvue.Computed("events",
|
||||
func(vm *hvue.VM) interface{} {
|
||||
return vm.Get("$store").Get("state").Get("eventReceiver").Get("eventHidArray")
|
||||
}),
|
||||
hvue.Method("evIdToString", func (vm *hvue.VM, evID int64) (res string) {
|
||||
println("EvID",evID)
|
||||
return common_web.EventType_name[evID]
|
||||
}),
|
||||
)
|
||||
|
||||
hvue.NewComponent(
|
||||
"hid-job-overview-item",
|
||||
hvue.Template(compHIDJobOverViewItemTemplate),
|
||||
@ -142,44 +127,21 @@ ScriptSource string `js:"textSource"`
|
||||
|
||||
//{ "evtype": 0, "vmId": 2, "jobId": 3, "hasError": false, "result": "null", "error": "", "message": "Script started", "time": "2018-07-30 04:56:42.297533 +0000 UTC m=+7625.097825001" }
|
||||
compHIDJobOverviewTemplate = `
|
||||
<q-card class="q-ma-sm">
|
||||
<q-card class="full-height">
|
||||
<q-card-title>
|
||||
HIDScript jobs
|
||||
</q-card-title>
|
||||
|
||||
<q-list>
|
||||
<q-list-header>HID Script jobs</q-list-header>
|
||||
<hid-job-overview-item v-for="job in jobs" :job="job" :key="job.id"></hid-job-overview-item>
|
||||
<q-list-header>Running</q-list-header>
|
||||
<hid-job-overview-item v-for="job in $store.getters.hidjobsRunning" :job="job" :key="job.id"></hid-job-overview-item>
|
||||
<q-list-header>Succeeded</q-list-header>
|
||||
<hid-job-overview-item v-for="job in $store.getters.hidjobsSucceeded" :job="job" :key="job.id"></hid-job-overview-item>
|
||||
<q-list-header>Failed</q-list-header>
|
||||
<hid-job-overview-item v-for="job in $store.getters.hidjobsFailed" :job="job" :key="job.id"></hid-job-overview-item>
|
||||
</q-list>
|
||||
</q-card>
|
||||
|
||||
`
|
||||
//{ "evtype": 0, "vmId": 2, "jobId": 3, "hasError": false, "result": "null", "error": "", "message": "Script started", "time": "2018-07-30 04:56:42.297533 +0000 UTC m=+7625.097825001" }
|
||||
compHIDJobEventOverviewTemplate = `
|
||||
<q-page>
|
||||
<div>
|
||||
<table border="1">
|
||||
<tr>
|
||||
<th>Event Type</th>
|
||||
<th>VM ID</th>
|
||||
<th>Job ID</th>
|
||||
<th>Has error</th>
|
||||
<th>Result</th>
|
||||
<th>Error</th>
|
||||
<th>Message</th>
|
||||
<th>Time</th>
|
||||
</tr>
|
||||
<tr v-for="e in events">
|
||||
<td>{{ evIdToString(e.evtype) }}</td>
|
||||
<td>{{ e.vmId }}</td>
|
||||
<td>{{ e.jobId }}</td>
|
||||
<td>{{ e.hasError }}</td>
|
||||
<td>{{ e.result }}</td>
|
||||
<td>{{ e.error }}</td>
|
||||
<td>{{ e.message }}</td>
|
||||
<td>{{ e.time }}</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</q-page>
|
||||
`
|
||||
)
|
||||
|
||||
|
@ -100,24 +100,22 @@ func InitComponentsHIDScript() {
|
||||
const (
|
||||
|
||||
compHIDScriptTemplate = `
|
||||
<q-page>
|
||||
<div class="row content-stretch">
|
||||
<div class="col-10 self-stretch">
|
||||
<hid-script-code-editor></hid-script-code-editor>
|
||||
<q-page padding>
|
||||
<div class="row gutter-sm">
|
||||
<div class="col-12 col-md-7 col-lg-8 col-xl-9">
|
||||
<hid-script-code-editor></hid-script-code-editor>
|
||||
</div>
|
||||
<div class="col-12 col-md-5 col-lg-4 col-xl-3">
|
||||
<hid-job-overview></hid-job-overview>
|
||||
</div>
|
||||
<div class="col-12" style="overflow: auto; max-height: 40vh;">
|
||||
<hid-job-event-overview></hid-job-event-overview>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-2">
|
||||
<hid-job-overview></hid-job-overview>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row content-stretch">
|
||||
<hid-job-event-overview></hid-job-event-overview>
|
||||
</div>
|
||||
|
||||
|
||||
</q-page>
|
||||
`
|
||||
compHIDScriptCodeEditorTemplate = `
|
||||
<q-card class="q-ma-sm">
|
||||
<q-card class="full-height">
|
||||
<q-card-title>
|
||||
HIDScript editor
|
||||
</q-card-title>
|
||||
|
@ -63,195 +63,205 @@ func newCompUSBSettingsData(vm *hvue.VM) interface{} {
|
||||
|
||||
const (
|
||||
compUSBSettingsTemplate = `
|
||||
<q-page>
|
||||
<q-card inline class="q-ma-sm">
|
||||
<q-card-title>
|
||||
USB Gadget Settings
|
||||
</q-card-title>
|
||||
<q-card-actions>
|
||||
<q-btn :loading="deploying" color="primary" @click="ApplyGadgetSettings" label="deploy"></q-btn>
|
||||
<q-btn color="secondary" @click="UpdateFromDeployedGadgetSettings" label="reset"></q-btn>
|
||||
<q-page padding>
|
||||
<div class="row gutter-sm">
|
||||
<div class="col-12 col-sm-6 col-md-5 col-xl-4">
|
||||
<q-card class="full-height">
|
||||
<q-card-title>
|
||||
Generic USB Gadget Settings
|
||||
</q-card-title>
|
||||
<q-card-actions>
|
||||
<q-btn :loading="deploying" color="primary" @click="ApplyGadgetSettings" label="deploy"></q-btn>
|
||||
<q-btn color="secondary" @click="UpdateFromDeployedGadgetSettings" label="reset"></q-btn>
|
||||
|
||||
</q-card-actions>
|
||||
</q-card-actions>
|
||||
|
||||
<q-alert v-show="deploying" type="warning">If you're connected via Ethernet over USB, you will loose connection during deployment (deadline exceeded error)"</q-alert>
|
||||
<q-alert v-show="deploying" type="warning">If you're connected via Ethernet over USB, you will loose connection during deployment (deadline exceeded error)"</q-alert>
|
||||
|
||||
<q-list link>
|
||||
<q-item-separator />
|
||||
<q-list link>
|
||||
<q-item-separator />
|
||||
|
||||
<q-list-header>Generic</q-list-header>
|
||||
<q-item tag="label">
|
||||
<q-item-side>
|
||||
<q-toggle v-model="currentGadgetSettings.Enabled"></q-toggle>
|
||||
</q-item-side>
|
||||
<q-item-main>
|
||||
<q-item-tile label>Enabled</q-item-tile>
|
||||
<q-item-tile sublabel>Enable/Disable USB gadget (if enabled, at least one function has to be turned on)</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label">
|
||||
<q-item-main>
|
||||
<q-item-tile label>Vendor ID</q-item-tile>
|
||||
<q-item-tile sublabel>Example: 0x1d6b</q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-input v-model="currentGadgetSettings.Vid" inverted></q-input>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label">
|
||||
<q-item-main>
|
||||
<q-item-tile label>Product ID</q-item-tile>
|
||||
<q-item-tile sublabel>Example: 0x1337</q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-input v-model="currentGadgetSettings.Pid" inverted></q-input>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label">
|
||||
<q-item-main>
|
||||
<q-item-tile label>Manufacturer Name</q-item-tile>
|
||||
<q-item-tile sublabel></q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-input v-model="currentGadgetSettings.Manufacturer" inverted></q-input>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label">
|
||||
<q-item-main>
|
||||
<q-item-tile label>Product Name</q-item-tile>
|
||||
<q-item-tile sublabel></q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-input v-model="currentGadgetSettings.Product" inverted></q-input>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label">
|
||||
<q-item-main>
|
||||
<q-item-tile label>Serial Number</q-item-tile>
|
||||
<q-item-tile sublabel></q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-input v-model="currentGadgetSettings.Serial" inverted></q-input>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label">
|
||||
<q-item-side>
|
||||
<q-toggle v-model="currentGadgetSettings.Enabled"></q-toggle>
|
||||
</q-item-side>
|
||||
<q-item-main>
|
||||
<q-item-tile label>Enabled</q-item-tile>
|
||||
<q-item-tile sublabel>Enable/Disable USB gadget (if enabled, at least one function has to be turned on)</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label">
|
||||
<q-item-main>
|
||||
<q-item-tile label>Vendor ID</q-item-tile>
|
||||
<q-item-tile sublabel>Example: 0x1d6b</q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-input v-model="currentGadgetSettings.Vid" inverted></q-input>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label">
|
||||
<q-item-main>
|
||||
<q-item-tile label>Product ID</q-item-tile>
|
||||
<q-item-tile sublabel>Example: 0x1337</q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-input v-model="currentGadgetSettings.Pid" inverted></q-input>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label">
|
||||
<q-item-main>
|
||||
<q-item-tile label>Manufacturer Name</q-item-tile>
|
||||
<q-item-tile sublabel></q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-input v-model="currentGadgetSettings.Manufacturer" inverted></q-input>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label">
|
||||
<q-item-main>
|
||||
<q-item-tile label>Product Name</q-item-tile>
|
||||
<q-item-tile sublabel></q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-input v-model="currentGadgetSettings.Product" inverted></q-input>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label">
|
||||
<q-item-main>
|
||||
<q-item-tile label>Serial Number</q-item-tile>
|
||||
<q-item-tile sublabel></q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-input v-model="currentGadgetSettings.Serial" inverted></q-input>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
</q-list>
|
||||
</q-card>
|
||||
</div>
|
||||
<div class="col-12 col-sm-6 col-md-5 col-xl-4">
|
||||
<q-card class="full-height">
|
||||
<q-card-title>
|
||||
USB Gadget Functions
|
||||
</q-card-title>
|
||||
<q-list link>
|
||||
|
||||
<q-item-separator />
|
||||
<q-item-separator />
|
||||
|
||||
<q-list-header>Functions</q-list-header>
|
||||
<q-item tag="label">
|
||||
<q-item-side>
|
||||
<q-toggle v-model="currentGadgetSettings.Use_CDC_ECM"></q-toggle>
|
||||
</q-item-side>
|
||||
<q-item-main>
|
||||
<q-item-tile label>CDC ECM</q-item-tile>
|
||||
<q-item-tile sublabel>Ethernet over USB for Linux, Unix and OSX</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label">
|
||||
<q-item-side>
|
||||
<q-toggle v-model="currentGadgetSettings.Use_CDC_ECM"></q-toggle>
|
||||
</q-item-side>
|
||||
<q-item-main>
|
||||
<q-item-tile label>CDC ECM</q-item-tile>
|
||||
<q-item-tile sublabel>Ethernet over USB for Linux, Unix and OSX</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
|
||||
|
||||
<q-collapsible icon="settings_ethernet" label="MAC addresses for CDC ECM" v-show="currentGadgetSettings.Use_CDC_ECM" indent>
|
||||
<q-item tag="label" indent>
|
||||
<q-item-main>
|
||||
<q-item-tile label>Host Address</q-item-tile>
|
||||
<q-item-tile sublabel>MAC of USB adapter on remote host (format: AA:BB:CC:DD:EE:FF)</q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-input v-model="currentGadgetSettings.CdcEcmSettings.HostAddr" inverted></q-input>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label" indent>
|
||||
<q-item-main>
|
||||
<q-item-tile label>Device Address</q-item-tile>
|
||||
<q-item-tile sublabel>MAC address on P4wnP1's end (format: AA:BB:CC:DD:EE:FF)</q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-input v-model="currentGadgetSettings.CdcEcmSettings.DevAddr" inverted></q-input>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
</q-collapsible>
|
||||
<q-collapsible icon="settings_ethernet" label="MAC addresses for CDC ECM" v-show="currentGadgetSettings.Use_CDC_ECM" indent>
|
||||
<q-item tag="label" indent>
|
||||
<q-item-main>
|
||||
<q-item-tile label>Host Address</q-item-tile>
|
||||
<q-item-tile sublabel>MAC of USB adapter on remote host (format: AA:BB:CC:DD:EE:FF)</q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-input v-model="currentGadgetSettings.CdcEcmSettings.HostAddr" inverted></q-input>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label" indent>
|
||||
<q-item-main>
|
||||
<q-item-tile label>Device Address</q-item-tile>
|
||||
<q-item-tile sublabel>MAC address on P4wnP1's end (format: AA:BB:CC:DD:EE:FF)</q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-input v-model="currentGadgetSettings.CdcEcmSettings.DevAddr" inverted></q-input>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
</q-collapsible>
|
||||
|
||||
<q-item tag="label">
|
||||
<q-item-side>
|
||||
<q-toggle v-model="currentGadgetSettings.Use_RNDIS"></q-toggle>
|
||||
</q-item-side>
|
||||
<q-item-main>
|
||||
<q-item-tile label>RNDIS</q-item-tile>
|
||||
<q-item-tile sublabel>Ethernet over USB for Windows (and some Linux kernels)</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label">
|
||||
<q-item-side>
|
||||
<q-toggle v-model="currentGadgetSettings.Use_RNDIS"></q-toggle>
|
||||
</q-item-side>
|
||||
<q-item-main>
|
||||
<q-item-tile label>RNDIS</q-item-tile>
|
||||
<q-item-tile sublabel>Ethernet over USB for Windows (and some Linux kernels)</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
|
||||
<q-collapsible icon="settings_ethernet" label="MAC addresses for RNDIS" v-show="currentGadgetSettings.Use_RNDIS" indent>
|
||||
<q-item tag="label" ident>
|
||||
<q-item-main>
|
||||
<q-item-tile label>Host Address</q-item-tile>
|
||||
<q-item-tile sublabel>MAC of USB adapter on remote host - could get overwritten by host (format: AA:BB:CC:DD:EE:FF)</q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-input v-model="currentGadgetSettings.RndisSettings.HostAddr" inverted></q-input>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label" ident>
|
||||
<q-item-main>
|
||||
<q-item-tile label>Device Address</q-item-tile>
|
||||
<q-item-tile sublabel>MAC address on P4wnP1's end (format: AA:BB:CC:DD:EE:FF)</q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-input v-model="currentGadgetSettings.RndisSettings.DevAddr" inverted></q-input>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
</q-collapsible>
|
||||
<q-collapsible icon="settings_ethernet" label="MAC addresses for RNDIS" v-show="currentGadgetSettings.Use_RNDIS" indent>
|
||||
<q-item tag="label" ident>
|
||||
<q-item-main>
|
||||
<q-item-tile label>Host Address</q-item-tile>
|
||||
<q-item-tile sublabel>MAC of USB adapter on remote host - could get overwritten by host (format: AA:BB:CC:DD:EE:FF)</q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-input v-model="currentGadgetSettings.RndisSettings.HostAddr" inverted></q-input>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label" ident>
|
||||
<q-item-main>
|
||||
<q-item-tile label>Device Address</q-item-tile>
|
||||
<q-item-tile sublabel>MAC address on P4wnP1's end (format: AA:BB:CC:DD:EE:FF)</q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-input v-model="currentGadgetSettings.RndisSettings.DevAddr" inverted></q-input>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
</q-collapsible>
|
||||
|
||||
|
||||
<q-item tag="label">
|
||||
<q-item-side>
|
||||
<q-toggle v-model="currentGadgetSettings.Use_HID_KEYBOARD"></q-toggle>
|
||||
</q-item-side>
|
||||
<q-item-main>
|
||||
<q-item-tile label>Keyboard</q-item-tile>
|
||||
<q-item-tile sublabel>HID Keyboard functionality (needed for HID Script)</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label">
|
||||
<q-item-side>
|
||||
<q-toggle v-model="currentGadgetSettings.Use_HID_MOUSE"></q-toggle>
|
||||
</q-item-side>
|
||||
<q-item-main>
|
||||
<q-item-tile label>Mouse</q-item-tile>
|
||||
<q-item-tile sublabel>HID Mouse functionality (needed for HID Script)</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label">
|
||||
<q-item-side>
|
||||
<q-toggle v-model="currentGadgetSettings.Use_HID_RAW"></q-toggle>
|
||||
</q-item-side>
|
||||
<q-item-main>
|
||||
<q-item-tile label>Custom HID device</q-item-tile>
|
||||
<q-item-tile sublabel>Raw HID device function, used for covert channel</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label">
|
||||
<q-item-side>
|
||||
<q-toggle v-model="currentGadgetSettings.Use_Serial"></q-toggle>
|
||||
</q-item-side>
|
||||
<q-item-main>
|
||||
<q-item-tile label>Serial Interface</q-item-tile>
|
||||
<q-item-tile sublabel>Provides a serial port over USB</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label">
|
||||
<q-item-side>
|
||||
<q-toggle v-model="currentGadgetSettings.Use_UMS"></q-toggle>
|
||||
</q-item-side>
|
||||
<q-item-main>
|
||||
<q-item-tile label>Mass Storage</q-item-tile>
|
||||
<q-item-tile sublabel>Emulates USB flash drive or CD-ROM</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
</q-list>
|
||||
</q-card>
|
||||
|
||||
|
||||
<q-item tag="label">
|
||||
<q-item-side>
|
||||
<q-toggle v-model="currentGadgetSettings.Use_HID_KEYBOARD"></q-toggle>
|
||||
</q-item-side>
|
||||
<q-item-main>
|
||||
<q-item-tile label>Keyboard</q-item-tile>
|
||||
<q-item-tile sublabel>HID Keyboard functionality (needed for HID Script)</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label">
|
||||
<q-item-side>
|
||||
<q-toggle v-model="currentGadgetSettings.Use_HID_MOUSE"></q-toggle>
|
||||
</q-item-side>
|
||||
<q-item-main>
|
||||
<q-item-tile label>Mouse</q-item-tile>
|
||||
<q-item-tile sublabel>HID Mouse functionality (needed for HID Script)</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label">
|
||||
<q-item-side>
|
||||
<q-toggle v-model="currentGadgetSettings.Use_HID_RAW"></q-toggle>
|
||||
</q-item-side>
|
||||
<q-item-main>
|
||||
<q-item-tile label>Custom HID device</q-item-tile>
|
||||
<q-item-tile sublabel>Raw HID device function, used for covert channel</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label">
|
||||
<q-item-side>
|
||||
<q-toggle v-model="currentGadgetSettings.Use_Serial"></q-toggle>
|
||||
</q-item-side>
|
||||
<q-item-main>
|
||||
<q-item-tile label>Serial Interface</q-item-tile>
|
||||
<q-item-tile sublabel>Provides a serial port over USB</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
<q-item tag="label">
|
||||
<q-item-side>
|
||||
<q-toggle v-model="currentGadgetSettings.Use_UMS"></q-toggle>
|
||||
</q-item-side>
|
||||
<q-item-main>
|
||||
<q-item-tile label>Mass Storage</q-item-tile>
|
||||
<q-item-tile sublabel>Emulates USB flash drive or CD-ROM</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
</q-list>
|
||||
</q-card>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</q-page>
|
||||
|
||||
`
|
||||
)
|
||||
|
@ -88,8 +88,10 @@ func InitComponentsWiFi() {
|
||||
}
|
||||
|
||||
const templateWiFi = `
|
||||
<q-page>
|
||||
<q-card inline class="q-ma-sm">
|
||||
<q-page padding>
|
||||
<div class="row gutter-sm">
|
||||
<div class="col-lg-4">
|
||||
<q-card class="full-height">
|
||||
<q-card-title>
|
||||
WiFi settings
|
||||
</q-card-title>
|
||||
@ -139,9 +141,18 @@ const templateWiFi = `
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
|
||||
<template v-if="settings.mode != 0">
|
||||
</q-list>
|
||||
</q-card>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4" v-if="settings.mode != 0">
|
||||
<q-card class="full-height">
|
||||
<q-card-title>
|
||||
WiFi client settings
|
||||
</q-card-title>
|
||||
|
||||
<q-list link>
|
||||
<q-item-separator />
|
||||
<q-list-header>WiFi client settings (station mode)</q-list-header>
|
||||
<q-item tag="label">
|
||||
<q-item-main>
|
||||
<q-item-tile label>SSID</q-item-tile>
|
||||
@ -160,20 +171,30 @@ const templateWiFi = `
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
</template>
|
||||
|
||||
<template v-if="settings.mode == 2">
|
||||
<q-item-separator />
|
||||
<q-item>
|
||||
<q-item-main>
|
||||
<q-alert type="warning">
|
||||
If the SSID provided for station mode couldn't be connected, an attempt is started to failo-over to Access Point mode with settings below
|
||||
If the SSID provided for client mode couldn't be connected, an attempt is started to fail over to Access Point mode with the respective settings.
|
||||
</q-alert>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
</template>
|
||||
</q-list>
|
||||
</q-card>
|
||||
</div>
|
||||
|
||||
<template v-if="settings.mode != 1">
|
||||
<div class="col-lg-4" v-if="settings.mode != 1">
|
||||
<q-card class="full-height">
|
||||
<q-card-title>
|
||||
WiFi Access Point settings
|
||||
</q-card-title>
|
||||
|
||||
<q-list link>
|
||||
|
||||
|
||||
<template>
|
||||
<q-item-separator />
|
||||
<q-list-header>Access Point settings</q-list-header>
|
||||
<q-item tag="label">
|
||||
@ -225,6 +246,8 @@ const templateWiFi = `
|
||||
</template>
|
||||
</q-list>
|
||||
</q-card>
|
||||
</div>
|
||||
</div>
|
||||
</q-page>
|
||||
|
||||
`
|
@ -219,39 +219,45 @@ func InitComponentsNetwork() {
|
||||
}
|
||||
|
||||
const templateNetwork = `
|
||||
<q-page>
|
||||
<q-card class="q-ma-sm" :inline="$q.platform.is.desktop">
|
||||
<q-card-title>
|
||||
Network interface settings
|
||||
</q-card-title>
|
||||
<q-page padding>
|
||||
<div class="row gutter-sm">
|
||||
<div class="col-xl-3">
|
||||
<q-card class="full-height">
|
||||
<q-card-title>
|
||||
Network interface settings
|
||||
</q-card-title>
|
||||
|
||||
<q-card-actions>
|
||||
<q-btn color="primary" @click="deploy(current)" label="deploy"></q-btn>
|
||||
</q-card-actions>
|
||||
<q-card-actions>
|
||||
<q-btn color="primary" @click="deploy(current)" label="deploy"></q-btn>
|
||||
</q-card-actions>
|
||||
|
||||
<q-list link>
|
||||
<q-item-separator />
|
||||
<q-item tag="label">
|
||||
<q-item-main>
|
||||
<q-item-tile label>Interface</q-item-tile>
|
||||
<q-item-tile sublabel>Select which interface to configure</q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-select v-model="current" :options="selectOptionsInterface" color="secondary" inverted></q-select>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
</q-list>
|
||||
<q-list link>
|
||||
<q-item-separator />
|
||||
<q-item tag="label">
|
||||
<q-item-main>
|
||||
<q-item-tile label>Interface</q-item-tile>
|
||||
<q-item-tile sublabel>Select which interface to configure</q-item-tile>
|
||||
<q-item-tile>
|
||||
<q-select v-model="current" :options="selectOptionsInterface" color="secondary" inverted></q-select>
|
||||
</q-item-tile>
|
||||
</q-item-main>
|
||||
</q-item>
|
||||
</q-list>
|
||||
|
||||
<network-interface-settings v-if="current" :interface="current"></network-interface-settings>
|
||||
<network-interface-settings v-if="current" :interface="current"></network-interface-settings>
|
||||
</q-card>
|
||||
</div>
|
||||
|
||||
</q-card>
|
||||
<dhcp-config :interface="current" v-if="currentWithDhcp"></dhcp-config>
|
||||
<div class="col-xl-9">
|
||||
<dhcp-config :interface="current" v-if="currentWithDhcp"></dhcp-config>
|
||||
</div>
|
||||
</div>
|
||||
</q-page>
|
||||
|
||||
`
|
||||
|
||||
const templateDHCPConfig = `
|
||||
<q-card class="q-ma-sm" :inline="$q.platform.is.desktop">
|
||||
<q-card>
|
||||
<q-card-title>
|
||||
DHCP Server settings for {{ interface.name }}
|
||||
</q-card-title>
|
||||
|
@ -67,6 +67,7 @@ func main() {
|
||||
|
||||
|
||||
InitCompHIDJobs()
|
||||
InitCompHIDEvents()
|
||||
InitCompModal()
|
||||
InitCompEthernetAddresses2()
|
||||
InitCompToggleSwitch()
|
||||
|
@ -63,9 +63,6 @@ type GlobalState struct {
|
||||
FailedConnectionAttempts int `js:"failedConnectionAttempts"`
|
||||
InterfaceSettings *jsEthernetSettingsList `js:"InterfaceSettings"`
|
||||
WiFiSettings *jsWiFiSettings `js:"wifiSettings"`
|
||||
|
||||
Counter int `js:"count"`
|
||||
Text string `js:"text"`
|
||||
}
|
||||
|
||||
func createGlobalStateStruct() GlobalState {
|
||||
@ -93,8 +90,6 @@ func createGlobalStateStruct() GlobalState {
|
||||
}
|
||||
state.WiFiSettings = wifiSettings
|
||||
|
||||
state.Counter = 1337
|
||||
state.Text = "Hi there says MaMe82"
|
||||
return state
|
||||
}
|
||||
|
||||
@ -218,33 +213,10 @@ func initMVuex() *mvuex.Store {
|
||||
globalState = &state //make accessible through global var
|
||||
store := mvuex.NewStore(
|
||||
mvuex.State(state),
|
||||
mvuex.Action("actiontest", func(store *mvuex.Store, context *mvuex.ActionContext, state *GlobalState) {
|
||||
go func() {
|
||||
for i := 0; i < 10; i++ {
|
||||
println(state.Counter)
|
||||
time.Sleep(1 * time.Second)
|
||||
context.Commit("increment", 5)
|
||||
}
|
||||
|
||||
}()
|
||||
|
||||
}),
|
||||
mvuex.Mutation("setModalEnabled", func(store *mvuex.Store, state *GlobalState, enabled bool) {
|
||||
state.IsModalEnabled = enabled
|
||||
return
|
||||
}),
|
||||
mvuex.Mutation("increment", func(store *mvuex.Store, state *GlobalState, add int) {
|
||||
state.Counter += add
|
||||
return
|
||||
}),
|
||||
mvuex.Mutation("decrement", func(store *mvuex.Store, state *GlobalState) {
|
||||
state.Counter--
|
||||
return
|
||||
}),
|
||||
mvuex.Mutation("setText", func(store *mvuex.Store, state *GlobalState, newText string) {
|
||||
state.Text = newText
|
||||
return
|
||||
}),
|
||||
mvuex.Mutation(VUEX_MUTATION_SET_CURRENT_HID_SCRIPT_SOURCE_TO, func(store *mvuex.Store, state *GlobalState, newText string) {
|
||||
state.CurrentHIDScriptSource = newText
|
||||
return
|
||||
@ -274,27 +246,38 @@ func initMVuex() *mvuex.Store {
|
||||
mvuex.Action(VUEX_ACTION_UPDATE_WIFI_SETTINGS_FROM_DEPLOYED, actionUpdateWifiSettingsFromDeployed),
|
||||
mvuex.Action(VUEX_ACTION_DEPLOY_WIFI_SETTINGS, actionDeployWifiSettings),
|
||||
|
||||
mvuex.Getter("testgetterProperty", func(state *GlobalState) interface{} {
|
||||
//Note: GlobalState is a custom struct, used for the vuex store state
|
||||
println("getter returning a property, for given state", state)
|
||||
return state
|
||||
mvuex.Getter("hidjobs", func(state *GlobalState) interface{} {
|
||||
return state.HidJobList.Jobs
|
||||
}),
|
||||
|
||||
mvuex.Getter("testgetterPropertyMulti", func(state *GlobalState) (string, int) {
|
||||
println("getter returning a property with multiple results converted to an array, for given state", state)
|
||||
return "two", 2
|
||||
mvuex.Getter("hidjobsRunning", func(state *GlobalState) interface{} {
|
||||
vJobs := state.HidJobList.Jobs //vue object, no real array --> values have to be extracted to filter
|
||||
jobs := js.Global.Get("Object").Call("values", vJobs) //converted to native JS array (has filter method available
|
||||
filtered := jobs.Call("filter", func(job *jsHidJobState) bool {
|
||||
return !(job.HasSucceeded || job.HasFailed)
|
||||
})
|
||||
return filtered
|
||||
}),
|
||||
|
||||
mvuex.Getter("testgetterMethodWithArg", func(state interface{}) interface{} {
|
||||
println("getter returning a function which takes an argument, input state isn't casted to known struct", state)
|
||||
return func(i int) int { return i * 2 } // function returning given int multiplied by two
|
||||
mvuex.Getter("hidjobsFailed", func(state *GlobalState) interface{} {
|
||||
vJobs := state.HidJobList.Jobs //vue object, no real array --> values have to be extracted to filter
|
||||
jobs := js.Global.Get("Object").Call("values", vJobs) //converted to native JS array (has filter method available
|
||||
filtered := jobs.Call("filter", func(job *jsHidJobState) bool {
|
||||
return job.HasFailed
|
||||
})
|
||||
return filtered
|
||||
}),
|
||||
mvuex.Getter("testgetterConsumeGetters", func(state *GlobalState, getters *js.Object) interface{} {
|
||||
println("getter consuming state and getters as input", state)
|
||||
println("getter3 getters", getters)
|
||||
return getters
|
||||
|
||||
mvuex.Getter("hidjobsSucceeded", func(state *GlobalState) interface{} {
|
||||
vJobs := state.HidJobList.Jobs //vue object, no real array --> values have to be extracted to filter
|
||||
jobs := js.Global.Get("Object").Call("values", vJobs) //converted to native JS array (has filter method available
|
||||
filtered := jobs.Call("filter", func(job *jsHidJobState) bool {
|
||||
return job.HasSucceeded
|
||||
})
|
||||
return filtered
|
||||
}),
|
||||
|
||||
|
||||
)
|
||||
|
||||
// fetch deployed gadget settings
|
||||
|
Loading…
x
Reference in New Issue
Block a user