1 ! Copyright (C) 2020 John Benediktsson
2 ! See http://factorcode.org/license.txt for BSD license
3 USING: accessors assocs base64 calendar calendar.format
4 checksums.hmac checksums.sha combinators formatting http
5 http.client json.reader json.writer kernel math.parser
9 SYMBOL: visionect-base-url
10 visionect-base-url [ "http://localhost:8081" ] initialize
12 SYMBOL: visionect-api-key
14 SYMBOL: visionect-api-secret
18 : visionect-authorization ( verb date path -- auth )
19 "%s\n\n\n%s\n%s" sprintf visionect-api-secret get sha-256
20 hmac-bytes >base64 visionect-api-key get ":" rot 3append ;
22 : set-visionect-headers ( request -- request )
23 now timestamp>http-string "Date" set-header
24 dup [ method>> ] [ "Date" header ] [ url>> path>> ] tri
25 visionect-authorization "Authorization" set-header ;
27 : visionect-request ( request -- data )
28 set-visionect-headers http-request nip ;
30 : visionect-url ( path -- url )
31 visionect-base-url get prepend ;
33 : visionect-get ( path -- data )
34 visionect-url <get-request> visionect-request ;
36 : visionect-put ( post-data path -- data )
37 visionect-url <put-request> visionect-request ;
39 : visionect-delete ( path -- data )
40 visionect-url <delete-request> visionect-request ;
42 : visionect-post ( post-data path -- data )
43 visionect-url <post-request> visionect-request ;
49 : get-device ( uuid -- device )
50 "/api/device/" prepend visionect-get "" like json> ;
52 : update-device ( device -- )
53 dup "Uuid" of "/api/device/" prepend visionect-put drop ;
55 : remove-device ( uuid -- )
56 "/api/device/" prepend visionect-delete drop ;
58 : all-devices ( -- devices )
59 "/api/device/" visionect-get "" like json> ;
61 : update-devices ( devices -- )
62 json> "/api/device/" visionect-put drop ;
64 : tclv-list ( uuid -- tclv )
65 "/api/devicetclv/" prepend visionect-get "" like json> ;
67 : get-tclv ( uuid type -- config )
68 [ "/api/cmd/Param/" prepend ] dip
69 "{\"Data\": [{\"Type\": %d, \"Control\": 0, \"Value\": \"\"}]}"
70 sprintf swap visionect-post "" like json> ;
72 : set-tclv ( uuid type value -- config )
73 [ "/api/cmd/Param/" prepend ] 2dip
74 "{\"Data\": [{\"Type\": %d, \"Control\": 1, \"Value\": \"%s\"}]}"
75 sprintf swap visionect-post "" like json> ;
77 : reboot-device ( uuid -- )
78 f swap "/api/device/" "/reboot" surround visionect-post drop ;
80 : reboot-devices ( uuids -- )
81 >json "/api/device/reboot" visionect-post drop ;
85 : get-session ( uuid -- session )
86 "/api/session/" prepend visionect-get "" like json> ;
88 : update-session ( session -- )
89 dup "Uuid" of "/api/session/" prepend visionect-put drop ;
91 : remove-session ( uuid -- )
92 "/api/session/" prepend visionect-delete drop ;
94 : all-sessions ( -- sessions )
95 "/api/session/" visionect-get "" like json> ;
97 : create-session ( session -- )
98 "/api/session/" visionect-post drop ;
100 : update-sessions ( sessions -- )
101 >json "/api/session/" visionect-put drop ;
103 : restart-session ( uuid -- )
104 "/api/session/" "/restart" surround visionect-get drop ;
106 : restart-sessions ( uuids -- )
107 >json "/api/session/restart" visionect-post drop ;
111 : get-user ( username -- user )
112 "/api/user/" prepend visionect-get "" like json> ;
114 : update-user ( user -- )
115 dup "Username" of "/api/user/" prepend visionect-put drop ;
117 : remove-user ( username -- )
118 "/api/user/" prepend visionect-delete drop ;
120 : all-users ( -- users )
121 "/api/user/" visionect-get "" like json> ;
123 : create-user ( user -- )
124 >json "/api/user/" visionect-post drop ;
126 : update-users ( users -- )
127 >json "/api/user/" visionect-put drop ;
131 : get-config ( -- config )
132 "/api/config/" visionect-get "" like json> ;
134 : update-config ( config -- )
135 >json "/api/config/" visionect-put drop ;
139 : live-view ( uuid cached? -- png )
140 [ "/api/live/device/" ] 2dip
141 "/cached.png" "/image.png" ? 3append
146 : device-status ( uuid -- status )
147 "/api/devicestatus/" prepend visionect-get "" like json> ;
149 : device-status-range ( uuid from to group? -- status )
150 [ [ timestamp>unix-time ] bi@ ] [ "true" "false" ? ] bi*
151 "%s?%s,%s,%s" sprintf device-status ;
155 : http-backend ( png uuid -- )
156 "/backend/" prepend visionect-put drop ;