Compare commits

..

1886 Commits

Author SHA1 Message Date
Adolfo Gómez García
1417a66b21 Small fixes on OpenNebula complains 2021-07-02 12:45:16 +02:00
Adolfo Gómez García
9ba4234313 Removed NX 2021-07-02 11:06:23 +02:00
Adolfo Gómez García
e85e4c4e54 Merge remote-tracking branch 'origin/v3.0' 2021-07-02 11:02:11 +02:00
Adolfo Gómez García
693d14cd81 small typo fixes 2021-07-02 11:01:31 +02:00
Adolfo Gómez García
4be9e9ea69 Added more info to UDSClient and small typo fixed 2021-07-01 22:04:24 +02:00
Adolfo Gómez García
e38cd73f30 Added user agent 2021-07-01 21:46:00 +02:00
Adolfo Gómez García
43b785eb73 Added more info on ticket error 2021-07-01 21:42:25 +02:00
Adolfo Gómez García
9c4a4ed35c Fixed RDP for MacOS 2021-07-01 21:38:21 +02:00
Adolfo Gómez García
02737c0e8d Fixed guacamole auth url 2021-06-29 16:57:01 +02:00
Adolfo Gómez García
8bbd897cd0 Added ticket check 2021-06-29 16:26:10 +02:00
Adolfo Gómez García
c98933b6ed Fixed guacamole urls && small pam fix 2021-06-29 14:48:04 +02:00
Adolfo Gómez García
6e0292e76e Fixed guacamole new url && added 0000... as admin alias for auths 2021-06-29 13:02:09 +02:00
Adolfo Gómez García
8e6fced2ac Added second-log to login in case invalid username/password is detected 2021-06-29 11:33:58 +02:00
Adolfo Gómez García
c5a02686c4 added "auth_id" as alias for "authId" on login
Changed "uds_auth" to "uds_token"
2021-06-28 19:02:44 +02:00
Adolfo Gómez García
bddb9355c8 Adding tunnelers tokens for increased security 2021-06-28 15:36:52 +02:00
Adolfo Gómez García
25736f61b8 Removed requests "tests" and updated tunnel to use an authId 2021-06-28 13:12:49 +02:00
Adolfo Gómez García
2ee4a7bcaa Several fixes:
* Added tunnel & guacaomle "fake" authid for next security
* Fixed proxy detection & use
2021-06-28 13:05:48 +02:00
Adolfo Gómez García
0da916b57c Updated middleware 2021-06-28 11:02:47 +02:00
Adolfo Gómez García
03012dbaa7 Upgraded to Angular v12. This will be the last release supporting IE11 2021-06-27 22:06:16 +02:00
Adolfo Gómez García
4ae95e1930 Upgraded to Angular 12. Dropped support for admin for IE11 2021-06-27 21:57:15 +02:00
Adolfo Gómez García
906901753e Added "purge" to delete vm from UDS on proxmox 2021-06-25 13:51:24 +02:00
Adolfo Gómez García
109783a430 Fixed texts for client 2021-06-25 13:26:56 +02:00
Adolfo Gómez García
655a6447ba Improved Proxmox query efficiency for machines in a pookl 2021-06-25 13:21:09 +02:00
Adolfo Gómez García
52ac406853 Test migration removal 2021-06-24 12:35:47 +02:00
Adolfo Gómez García
55f9820f37 Fixed migration problem with user & group, when changing from unique_together to constrains on Meta model 2021-06-24 12:27:43 +02:00
Adolfo Gómez García
856d645652 merged 0041 and 0042 migrations 2021-06-24 12:02:41 +02:00
Adolfo Gómez García
fd789581ed Kept by now user and group unique_toguether 2021-06-24 12:02:23 +02:00
Adolfo Gómez García
a67ba2972b Updated translations 2021-06-24 11:25:49 +02:00
Adolfo Gómez García
acd1dd4702 No needed anymore here. It's already on client 2021-06-24 08:21:30 +02:00
Adolfo Gómez García
b914980793 Removing unique_together and index_together for newer Index and UniqueConstrains 2021-06-23 20:58:00 +02:00
Adolfo Gómez García
eab51248cd Fixed service launcher 2021-06-23 20:04:48 +02:00
Adolfo Gómez García
2834120b35 Fixing up status checking 2021-06-23 17:53:13 +02:00
Adolfo Gómez García
83a407d350 Added, for 3.5, check certificate as "no" for backwards compatibility (will be yes by default on 4.0 release) 2021-06-23 16:21:02 +02:00
Adolfo Gómez García
4f45caa2e9 :Merge branch 'master' of github.com:dkmstr/openuds 2021-06-23 16:17:31 +02:00
Adolfo Gómez García
011145e911 Upgraded tunnel.py to last real one 2021-06-23 16:17:23 +02:00
Adolfo Gómez
046f5836f7 Fixed logging 2021-06-23 15:59:15 +02:00
Adolfo Gómez García
4424f2a497 Fixing up client 2021-06-23 15:58:37 +02:00
Adolfo Gómez García
97841d655b more info on subprocesses 2021-06-23 15:14:12 +02:00
Adolfo Gómez García
f20a5a33b0 Fixed debian package dependency && update client tools to add some more debug info 2021-06-23 15:01:34 +02:00
Adolfo Gómez García
d1fb59ab77 Some minor cosmetic changes for UDSClient 2021-06-22 17:12:31 +02:00
Adolfo Gómez García
174d836f45 Merge remote-tracking branch 'origin/v3.0' 2021-06-22 12:11:11 +02:00
Adolfo Gómez García
1b12aee767 Fixed html open windows for 3.0 2021-06-22 12:10:30 +02:00
Adolfo Gómez García
a070f6878b Removed all 2.7 client due to "portables" clients being available 2021-06-22 11:35:50 +02:00
Adolfo Gómez García
d51b22096e Added check debug logging with a file 2021-06-21 18:00:57 +02:00
Adolfo Gómez García
9e0fbca339 Adding early stage unlinks... 2021-06-21 17:56:16 +02:00
Adolfo Gómez García
3e67ef2f6b Adding early stage unlinks...[F 2021-06-21 17:50:12 +02:00
Adolfo Gómez García
e7fe802b1d fixed bug on wait for tasks 2021-06-21 17:39:35 +02:00
Adolfo Gómez García
6f90a7ce83 fixed bug on wait for tasks 2021-06-21 17:15:51 +02:00
Adolfo Gómez García
25fec929a9 adding some debug to client 2021-06-21 17:11:32 +02:00
Adolfo Gómez García
1abe95c492 adding some debug to client 2021-06-21 17:04:57 +02:00
Adolfo Gómez García
d438fcf298 Updating client to allow wait for subprocesses also 2021-06-21 16:54:34 +02:00
Adolfo Gómez García
539e96d264 Added service initialization exceptio catch-and-retry 2021-06-21 15:28:24 +02:00
Adolfo Gómez García
d30a3a5e4c added tunnel rest url as no redirect url 2021-06-21 15:27:32 +02:00
Adolfo Gómez García
a302541df5 Fixed macos transports to search xfreerdp in path instead of using /usr/local/bin and added homebrew paths to default system ones 2021-06-21 11:21:46 +02:00
Adolfo Gómez García
9cdab65845 Fixed path fixing :) 2021-06-21 11:05:38 +02:00
Adolfo Gómez García
b9c55437ad fixed messages for MAC os 2021-06-21 10:58:37 +02:00
Adolfo Gómez García
0b0c72e65b Added /opt/homebrew/bin as path in mac os x for newer brew installs 2021-06-21 10:53:09 +02:00
Adolfo Gómez García
aef8c637ec added python-3-certifi as dependency for packages (now we do not use QtNetwork anymore for problems in M1) 2021-06-19 17:05:12 +02:00
Adolfo Gómez García
4ed3cbc787 Working on M1 with rosseta, so removed check (that does not recognizes m1 when running app with rosseta) 2021-06-19 17:01:39 +02:00
Adolfo Gómez García
60f69be354 More checks 2021-06-19 15:57:53 +02:00
Adolfo Gómez García
8e815c3316 some more fixes 2021-06-19 15:38:19 +02:00
Adolfo Gómez García
9180d04aaf Fix for show errors 2021-06-19 15:26:05 +02:00
Adolfo Gómez García
6e60a66ae9 Simplifying for M1 2021-06-19 15:16:49 +02:00
Adolfo Gómez García
58cfa779d1 Refactoring UDS Client to allow more possibilities 2021-06-19 14:45:51 +02:00
Adolfo Gómez García
eed4bc5fb7 Updating new UDSClient 2021-06-19 13:29:43 +02:00
Adolfo Gómez García
3ed3f03d25 Changed UDSClient to remove QApp Network access and used urllib instead 2021-06-19 12:41:51 +02:00
Adolfo Gómez García
21f811d995 Added cleanup of intermediary building folders 2021-06-18 10:50:08 +02:00
Adolfo Gómez García
985746139b Fixed Makefile && install script for different platforms 2021-06-17 18:32:22 +02:00
Adolfo Gómez García
9e4a9cc2fd * Added deadline "disabling" on osmanagers, so if we dont want to close sessions for expired users, we can do it 2021-06-17 14:21:40 +02:00
Adolfo Gómez García
c1d5e4b130 src/ 2021-06-17 13:19:47 +02:00
Adolfo Gómez García
21143ab7f2 Merge branch 'master' of github.com:dkmstr/openuds 2021-06-17 12:09:06 +02:00
Adolfo Gómez García
b62dfad922 Added i686 to appimage portable 2021-06-17 12:08:55 +02:00
Adolfo Gómez García
0b3bcbc63d Fixed UDSClientDir to /tmp (BTW, appimage-builder does not work on btrfs with compressed files due to squashfs) 2021-06-17 11:14:05 +02:00
Adolfo Gómez
b4a1e6a903 Merge branch 'master' of https://github.com/dkmstr/openuds 2021-06-16 18:31:13 +02:00
Adolfo Gómez
df9cb4eb6a Updated sysprep checking from info to debug 2021-06-16 18:31:06 +02:00
Adolfo Gómez García
7f4e7e3309 Merge branch 'master' of github.com:dkmstr/openuds 2021-06-16 18:28:17 +02:00
Adolfo Gómez García
741787f95b Fixed building of portables uds clients with freerdp + x2go client 2021-06-16 18:28:10 +02:00
Adolfo Gómez
7b0ad08685 Merge branch 'master' of https://github.com/dkmstr/openuds 2021-06-16 14:34:57 +02:00
Adolfo Gómez
25b663e069 Adding 'windows installations' checks before running uds service 2021-06-16 14:34:52 +02:00
Adolfo Gómez García
762e4154fd added -env 2021-06-16 12:11:09 +02:00
Adolfo Gómez García
1bb258d9dc Fixed WOL for multi manual assigment 2021-06-15 16:22:47 +02:00
Adolfo Gómez García
d5f29bd20f Added ignore certificate for getting server stats on localhost 2021-06-15 13:32:22 +02:00
Adolfo Gómez García
69fe9e0d38 * User preferences is deprecated (to be removed)
* NX is disabled in code (to be removed on 4.0)
* Increeased URL size for "URL" transport to 256 (was 64 only)
2021-06-15 11:49:16 +02:00
Adolfo Gómez García
41c94913f8 added full clients appimage 2021-06-11 12:02:26 +02:00
Adolfo Gómez García
0dce270a9e Created portable udsclient using appimage. Now also for raspberry pi 2021-06-10 17:25:23 +02:00
Adolfo Gómez García
594d431af7 Created portable udsclient using appimage 2021-06-10 17:02:11 +02:00
Adolfo Gómez García
71242eba10 moving appimage creator to linux folder 2021-06-10 16:17:21 +02:00
Adolfo Gómez García
2dded06dc5 Added app image creation recipe for UDSClient + freerdp 2021-06-10 12:15:45 +02:00
Adolfo Gómez García
38490e184e Updated criptography part to be compatible with older releases of crpytography package 2021-06-09 17:47:49 +02:00
Adolfo Gómez García
9e462478fc Removed six dependency for client-py3 and related 2021-06-09 12:39:06 +02:00
Adolfo Gómez García
44d8b2b754 Several upgrades for newer distributions:
* Removed pycrypto dependencies for UDSClient
* added "-platform xcb" for uds executables for Actor & client3
2021-06-09 12:12:31 +02:00
Adolfo Gómez García
5884cde35c a couple of comments 2021-06-08 20:58:55 +02:00
Adolfo Gómez García
3b18597d8e Removed PyCrypto code and translated to cryptography code 2021-06-08 19:08:41 +02:00
Adolfo Gómez García
f6ddc7eef1 Added ID to machine info on service creation 2021-06-08 18:44:52 +02:00
Adolfo Gómez García
ed61fbf7b8 No, if a child dies, UDS Tunnel will regenerate a new process and try to clean the old one 2021-06-08 11:48:53 +02:00
Adolfo Gómez García
fb088ecc02 Updated UDSClient
* Reformated code
* Fixed UDS Rest API Route to /uds/rest/... instead of /rest/... (will not be compatible with 2.x anymore)
2021-06-07 21:10:57 +02:00
Adolfo Gómez García
5396d04555 Merge remote-tracking branch 'origin/v3.0' 2021-06-07 21:02:30 +02:00
Adolfo Gómez García
610085e353 Added UDS-Version as header on response to REST api 2021-06-07 21:01:39 +02:00
Adolfo Gómez García
16d6e515c6 Added "version" method to REST api so we can check UDS Server version easily 2021-06-07 20:57:19 +02:00
Adolfo Gómez García
68b3b50acf Merge branch 'master' of github.com:dkmstr/openuds 2021-06-04 13:25:45 +02:00
Adolfo Gómez García
9d6560a56e fixed version 2021-06-04 12:07:07 +02:00
Adolfo Gómez García
25363269a6 Merge remote-tracking branch 'origin/v3.0' 2021-06-04 11:50:51 +02:00
Adolfo Gómez García
9731e57f01 Fixed metapool 2021-06-04 11:44:32 +02:00
Adolfo Gómez García
8aca8ead3d Merge remote-tracking branch 'origin/v3.0' 2021-06-03 21:02:36 +02:00
Adolfo Gómez García
7a030dd302 Updated & fixed url on same window 2021-06-03 12:50:22 +02:00
Adolfo Gómez García
f184fa778d Refactorized ldap and added "ignores" to non recognized correct values 2021-06-03 11:43:56 +02:00
Adolfo Gómez García
21f6df36b0 Refactor for all middlewares (now are all on same place..) 2021-06-01 13:17:53 +02:00
Adolfo Gómez García
394ceb9e66 Added radius authenticator for UDS 2021-06-01 12:41:58 +02:00
Adolfo Gómez García
5f8abdfa41 Merge remote-tracking branch 'origin/v3.0' 2021-05-31 11:33:13 +02:00
Adolfo Gómez García
b8af381042 Fixed autocomplete 2021-05-31 11:32:58 +02:00
Adolfo Gómez García
e21267b0fd Fixed autocomplete (at last!!) 2021-05-31 11:29:56 +02:00
Adolfo Gómez García
ee7e72cbd3 Fixed main 2021-05-31 11:13:44 +02:00
Adolfo Gómez García
cb92be3c66 Simplifying several "is True" 2021-05-27 13:04:18 +02:00
Adolfo Gómez García
8fc5c759d8 Merge remote-tracking branch 'origin/v3.0' 2021-05-27 10:58:18 +02:00
Adolfo Gómez García
7edf3094ed bitarray library previously returned True or False, now return 0 and 1, and we where checking against "is True" 2021-05-27 10:52:36 +02:00
Adolfo Gómez García
02c3ffbe75 bitarray library previously returned True or False, now return 0 and 1, and we where checking against "is True" 2021-05-27 10:50:17 +02:00
Adolfo Gómez García
041942b746 Updated locales 2021-05-27 10:49:32 +02:00
Adolfo Gómez García
6c936a7dfa Fixed report definition, so filename can be changed (not an class variable anymore) and added sample xlsx report onlist of users (only sample, commmented out) 2021-05-25 19:03:55 +02:00
Adolfo Gómez García
0cc40198b2 Merge remote-tracking branch 'origin/v3.0' 2021-05-25 10:41:25 +02:00
Adolfo Gómez García
21ab85818e Fixed realname on user creation 2021-05-25 10:40:13 +02:00
Adolfo Gómez García
9789a2f868 Updated admin for pool charts 2021-05-21 14:42:11 +02:00
Adolfo Gómez García
e8733e74d1 Added graphs to servicePool 2021-05-21 14:17:49 +02:00
Adolfo Gómez García
c6d281580b Added soft shutdown first for ProxMox 2021-05-21 12:18:55 +02:00
Adolfo Gómez García
1050ada43b Improved internaldb password security (sha3_256) and added extra security to uds cookie 2021-05-21 11:38:41 +02:00
Adolfo Gómez García
f39bc9c5ba Added stats collector a global value for all stats 2021-05-19 12:22:24 +02:00
Adolfo Gómez García
c987915c41 Added stats collector a global value for all stats 2021-05-19 12:20:35 +02:00
Adolfo Gómez García
12b8354a8e Merge remote-tracking branch 'origin/v3.0' 2021-05-19 12:20:11 +02:00
Adolfo Gómez García
a7d8058d09 Fixed authenticator ip && removed "accept Proxy" (uds now handles this automatically...) 2021-05-19 12:19:24 +02:00
Adolfo Gómez García
e7d1df5ba3 added "global" stats counter to optimize graphs on dashboard 2021-05-19 11:45:40 +02:00
Adolfo Gómez García
e87727b48f fixed counters types not being added for new counter type 2021-05-17 12:59:23 +02:00
Adolfo Gómez García
13ec1877de added number of services in cache for stats 2021-05-17 12:41:35 +02:00
Adolfo Gómez García
1b4060a727 Fixed pylance complains about runtime created variables 2021-05-17 12:13:06 +02:00
Adolfo Gómez García
d8e713ad51 Imported dns.reversename (not imported before) for IP Authenticator reverse resolution 2021-05-17 11:59:54 +02:00
Adolfo Gómez García
cdca39779b Fixed Complains about curio "runtime" types 2021-05-17 11:59:24 +02:00
Adolfo Gómez García
1345593c3a Fixed typo on ticket_store 2021-05-12 17:36:14 +02:00
Adolfo Gómez García
265d4f5103 added admin part for charts 2021-05-12 17:03:28 +02:00
Adolfo Gómez García
b85a702437 Added new index to stats_c and readded the graphs from uds 2.2 2021-05-12 14:40:58 +02:00
Adolfo Gómez García
e2d7fb0790 Reformated SimpleLDAP && fixed mypy complains about runtime variables
Added max session length for user and administrator, without the needing of editing the settings.py
2021-05-11 12:48:36 +02:00
Adolfo Gómez García
a573d2d55b added (at last), the check of invalid IP/hostname values on RDS servers or Phisical Machines 2021-05-10 10:47:00 +02:00
Adolfo Gómez García
de50fef63c Merge remote-tracking branch 'origin/v3.0' 2021-05-07 12:36:20 +02:00
Adolfo Gómez García
a017807d2a updated admin 2021-05-07 12:35:12 +02:00
Adolfo Gómez García
0133ddc2b5 Merge remote-tracking branch 'origin/v3.0' 2021-05-06 07:55:00 +02:00
Adolfo Gómez García
f8c9dd25df A new try to disable autocomplete on admin 2021-05-06 07:54:28 +02:00
Adolfo Gómez García
cddfd735b2 Merge remote-tracking branch 'origin/v3.0' 2021-05-04 13:07:10 +02:00
Adolfo Gómez García
3f6d12c89f Adding osDetector to UDSClient 2021-05-04 13:05:53 +02:00
Adolfo Gómez García
98293bba75 Merge remote-tracking branch 'origin/v3.0' 2021-05-04 13:05:31 +02:00
Adolfo Gómez García
469940074c Fixed VC Fixed pool "empty" token 2021-05-04 12:59:02 +02:00
Adolfo Gómez García
e920628395 Fixed connection client working 2021-05-04 12:32:56 +02:00
Adolfo Gómez García
07738e3dc2 Added support for detecting if UDS Client is launched correctly 2021-04-30 11:13:52 +02:00
Adolfo Gómez García
2b5543905a added "accesedByClient" property so we can check, from web, if local plugin is installed.... 2021-04-29 13:01:07 +02:00
Adolfo Gómez García
87c2ea8add added status checker to web API 2021-04-29 12:09:03 +02:00
Adolfo Gómez García
2a2a2b2ad0 small type checking fix & expresion fix 2021-04-28 10:47:35 +02:00
Adolfo Gómez García
47ef12ef6a Removed Crypto library remmanents. Old 2.2 RSA keys are no longer supported on 3.5 2021-04-28 10:42:45 +02:00
Adolfo Gómez García
451b8f6fb9 Fixes for mypy complains 2021-04-27 11:46:10 +02:00
Adolfo Gómez García
bd2b0cd171 Fixing mypy complains 2021-04-27 11:32:04 +02:00
Adolfo Gómez García
9a7afe7839 fixed MetaPool orderer 2021-04-27 11:31:43 +02:00
Adolfo Gómez García
18a8c81af6 Merge remote-tracking branch 'origin/v3.0' 2021-04-26 11:56:20 +02:00
Adolfo Gómez García
84ca0b2e41 Added metapool support for UDS Tickets 2021-04-26 11:44:31 +02:00
Adolfo Gómez García
09c65b2598 added proxy support for OpenStack & OpenStack legacy 2021-04-23 11:30:45 +02:00
Adolfo Gómez García
6e438bf4cb Added squashed migration from 26 to 38 2021-04-22 17:56:50 +02:00
Adolfo Gómez García
7502fe3bcc Removed squashed migrations 2021-04-22 17:43:29 +02:00
Adolfo Gómez García
e9a719a2eb Added metapools capacity of show grouped pools transports 2021-04-22 14:44:48 +02:00
Adolfo Gómez García
ce73d4e29f Updated admin fix from 3.0 2021-04-22 11:58:52 +02:00
Adolfo Gómez García
ffeaf9e22c Merge remote-tracking branch 'origin/v3.0' 2021-04-22 11:56:16 +02:00
Adolfo Gómez García
5355c7e420 Fixed admin deletion of calendar access for meta pools 2021-04-22 11:55:23 +02:00
Adolfo Gómez García
1e184a3a34 small fix on graphs (cosmetic) 2021-04-21 23:56:52 +02:00
Adolfo Gómez García
74d4349266 fixed signature of osManager publication method 2021-04-20 14:39:57 +02:00
Adolfo Gómez García
26c9f0edc8 Fixed scheduler next execution (typo make it wait DAYS instead of SECONDS!!! 2021-04-20 14:27:53 +02:00
Adolfo Gómez García
797a5df4a9 Fixed admin imgchoice 2021-04-20 13:30:13 +02:00
Adolfo Gómez García
8fbdda7b56 Merge remote-tracking branch 'origin/v3.0' 2021-04-19 12:59:44 +02:00
Adolfo Gómez García
d3c14520d4 Fixed small backslash typo on storage names 2021-04-19 12:59:18 +02:00
Adolfo Gómez García
9f04bdab05 Added custom parameters for freerdp mac clients.
distinct from linux custom parameters.
2021-04-16 11:21:21 +02:00
Adolfo Gómez García
5597af7d85 merged vnc from 3.0 2021-04-13 12:50:03 +02:00
Adolfo Gómez García
697c3e1c52 Merge remote-tracking branch 'origin/v3.0' 2021-04-13 12:47:27 +02:00
Adolfo Gómez García
fa32d485c9 Added VNC launch support from uds assigned services 2021-04-13 12:46:43 +02:00
Adolfo Gómez García
ae7f867482 fixed default value from html5rdp to any instead of rdp and fixed onw parameter 2021-04-13 11:45:43 +02:00
Adolfo Gómez García
f595219405 added fix for vscode complaining about alias && merged 2021-04-08 17:47:03 +02:00
Adolfo Gómez García
0fd24dadff Fixed sample settings for Django 3.2 new DEFAULT_AUTIFIELD and added local fonts also on admin interface 2021-04-08 17:41:03 +02:00
Adolfo Gómez García
d66e59bd50 small spelling typo fix 2021-04-08 10:23:54 +02:00
Adolfo Gómez García
cc12b7d5f6 Added "backport of new tunnel" to old python 2.7 client 2021-04-07 16:48:24 +02:00
Adolfo Gómez García
d67a9d6ddc fixed reference to Dani Torregrosa (sorry for the mispelling :) ) 2021-04-07 12:32:25 +02:00
Adolfo Gómez García
5ff3c58149 added Dani sugested changes for MSRDP of Microsoft on MacOsX 2021-04-07 10:36:57 +02:00
Adolfo Gómez García
9340e3c3c1 added "backup host" to xen server in case of connection failure to main server 2021-04-06 12:12:57 +02:00
Adolfo Gómez García
4357ef3be8 Merge remote-tracking branch 'origin/v3.0' 2021-04-05 13:21:46 +02:00
Adolfo Gómez García
afd36886d6 Added "switch to master" on login as default 2021-04-05 13:21:26 +02:00
Adolfo Gómez García
a3905c0c6c added time to enter credentials before closing new connections though tunnel 2021-04-05 11:24:30 +02:00
Adolfo Gómez García
03fc488f33 Fixed provider of Physical machines MANDATORY flag for advanced config 2021-03-29 12:52:58 +02:00
Adolfo Gómez García
2aee4e9417 Added log if could not resolve ip on PhisicalMachines multi 2021-03-25 12:37:43 +01:00
Adolfo Gómez García
b8494f51ac More fixes for WOL on Phisical Machines 2021-03-24 17:33:39 +01:00
Adolfo Gómez García
93a12c180e More fixes for WOL on Phisical Machines 2021-03-24 17:18:34 +01:00
Adolfo Gómez García
26aa9f6db7 Enhaced "wolURL" check 2021-03-24 12:13:26 +01:00
Adolfo Gómez García
3f881b3e17 Added support for name resolutions on service_multi && fixed max page limit from 50 to 100 2021-03-24 11:54:03 +01:00
Adolfo Gómez García
0a0b4cb740 Merge remote-tracking branch 'origin/v3.0' 2021-03-23 16:42:38 +01:00
Adolfo Gómez García
eb3638d62a fixed azuread login on html5rdp 2021-03-23 16:41:56 +01:00
Adolfo Gómez García
5df8f640d8 Added config for WOL on UDS 2021-03-23 16:12:51 +01:00
Adolfo Gómez García
8c68da806a Added config for WOL on UDS 2021-03-23 15:38:02 +01:00
Adolfo Gómez García
b9ba304493 Added "ignore port check" if WOLAPP is configured 2021-03-23 12:25:04 +01:00
Adolfo Gómez García
f7b8e644f9 Fixed sample REST1 for python3 && added reset suport for assigned user service using REST API 2021-03-22 11:42:11 +01:00
Adolfo Gómez García
034021522d Fixed .tar.gz installer info 2021-03-15 11:25:27 +01:00
Adolfo Gómez García
52d3ffeac3 added config to actor block attacks 2021-03-12 15:10:39 +01:00
Adolfo Gómez García
868ff2817a Merge remote-tracking branch 'origin/v3.0' 2021-03-12 15:07:50 +01:00
Adolfo Gómez García
ba716be0f3 Added actor block on failure security config 2021-03-12 15:07:03 +01:00
Adolfo Gómez García
51916e0949 Merge remote-tracking branch 'origin/v3.0' 2021-03-12 11:42:02 +01:00
Adolfo Gómez García
1505fd346b * Fixed configuration commands with parameters with "equal" sign
* Fixed access using ticket
2021-03-12 11:41:53 +01:00
Adolfo Gómez García
e517281c6a Merge remote-tracking branch 'origin/v3.0' 2021-03-11 14:27:57 +01:00
Adolfo Gómez García
49ee75d986 Fixed big mistake on storage 2021-03-11 14:27:45 +01:00
Adolfo Gómez García
c90f9c40fd Merge remote-tracking branch 'origin/v3.0' 2021-03-11 14:15:01 +01:00
Adolfo Gómez García
2acc72a1f7 Fixed big mistake on storage 2021-03-11 14:12:33 +01:00
Adolfo Gómez García
c6213ff37c Merge remote-tracking branch 'origin/v3.0' 2021-03-10 18:13:42 +01:00
Adolfo Gómez García
81d8544f5f Added "AzureAD" RDP login support 2021-03-10 18:13:08 +01:00
Adolfo Gómez García
35b0d709f6 small fix in case service_multi loads old values 2021-03-10 11:10:37 +01:00
Adolfo Gómez
3908c875d3 Merge pull request #65 from glyptodon/easy-compat
Ensure guacamole-auth-uds is compatible with third-party branding extensions.
2021-03-05 23:42:55 +01:00
Michael Jumper
c28c6c7b98 Complete removal of code partially removed by commit 073ce3d. 2021-03-05 12:13:21 -08:00
Michael Jumper
fe3fd6c35b Remove UDS icon (conflicts with any third-party branding). 2021-03-05 12:11:53 -08:00
Adolfo Gómez García
d11a010562 Cleanup temp environment before assigning it to an user 2021-03-05 11:01:23 +01:00
Adolfo Gómez García
a035633b58 Merge remote-tracking branch 'origin/v3.0' 2021-03-04 17:05:19 +01:00
Adolfo Gómez García
ef24656e29 added local fonts instead from google to allow intranets to work fine 2021-03-04 17:04:03 +01:00
Adolfo Gómez García
281adedd3b autocontained google fonts 2021-03-04 17:01:29 +01:00
Adolfo Gómez García
688acb0631 Added extra security control to guacamole tickets 2021-03-04 12:13:38 +01:00
Adolfo Gómez García
0bc1f72dc8 Merge remote-tracking branch 'origin/v3.0' 2021-03-03 12:31:45 +01:00
Adolfo Gómez García
8a8df3de35 Fixed policy for removal of old ips on multiple_ip and restored "/disabled" behavior 2021-03-03 12:31:35 +01:00
Adolfo Gómez García
5d52061041 Merge remote-tracking branch 'origin/v3.0' 2021-03-03 12:27:39 +01:00
Adolfo Gómez García
0e20ccc19c Fixed policy for removal of old ips on multiple_ip and restored "/disabled" behavior 2021-03-03 12:22:10 +01:00
Adolfo Gómez García
190079fddc Merge remote-tracking branch 'origin/v3.0' 2021-03-01 13:12:59 +01:00
Adolfo Gómez García
52f8dc7fde Now machines does not locks forever.... (fix) 2021-03-01 13:12:14 +01:00
Adolfo Gómez García
9f44e7fd25 Merge remote-tracking branch 'origin/v3.0' 2021-03-01 13:08:47 +01:00
Adolfo Gómez García
8af6cc008b Now machines does not locks forever.... 2021-03-01 13:08:31 +01:00
Adolfo Gómez García
ff685119ae Merge remote-tracking branch 'origin/v3.0' 2021-03-01 13:07:33 +01:00
Adolfo Gómez García
388cb2644b fixing up service_multi 2021-03-01 13:07:31 +01:00
Adolfo Gómez García
5f30e083b1 Now machines does not locks forever.... 2021-03-01 13:06:41 +01:00
Adolfo Gómez García
bda4057173 Merge remote-tracking branch 'origin/v3.0' 2021-03-01 13:01:06 +01:00
Adolfo Gómez García
017aa46403 Now machines does not locks forever.... 2021-03-01 13:00:30 +01:00
Adolfo Gómez García
7aec9a116e added "post-login-as-sysadmin" possibility of run windows script 2021-03-01 12:13:28 +01:00
Adolfo Gómez García
f57fea4699 Merge remote-tracking branch 'origin/v3.0' 2021-03-01 11:47:02 +01:00
Adolfo Gómez García
a2a8f157e0 Updated translations 2021-03-01 11:45:59 +01:00
Adolfo Gómez García
d52bc68015 Merge remote-tracking branch 'origin/v3.0' 2021-03-01 11:42:14 +01:00
Adolfo Gómez García
eb8f300c0e fixed page not found redirections 2021-03-01 11:41:47 +01:00
Adolfo Gómez García
8ab1342775 merged chango of timeouts on 3.0 2021-03-01 11:14:02 +01:00
Adolfo Gómez García
f602d641a0 Merge remote-tracking branch 'origin/v3.0' 2021-03-01 10:42:34 +01:00
Adolfo Gómez García
9cd084a222 Fixed phisical machines skitTime 2021-03-01 10:41:35 +01:00
Adolfo Gómez García
3e07cf53e4 added remove control characters of an unicode string 2021-02-25 13:45:37 +01:00
Adolfo Gómez García
2968bc7d41 Merge remote-tracking branch 'origin/v3.0' 2021-02-25 10:39:53 +01:00
Adolfo Gómez García
6a209c0836 Added new resolutions for RDP display 2021-02-25 10:39:12 +01:00
Adolfo Gómez García
6b131681cd Added new resolutions for screens to RDP client 2021-02-25 10:38:35 +01:00
Adolfo Gómez García
9568a9b180 Merge remote-tracking branch 'origin/v3.0' 2021-02-24 15:18:04 +01:00
Adolfo Gómez García
d7a8a441ad Fixed locale 2021-02-24 15:17:47 +01:00
Adolfo Gómez García
91fcbe7336 Fixed "image" parameter for wake remote machine 2021-02-23 14:19:47 +01:00
Adolfo Gómez García
2fd5b40809 Fixed Phisical machines issues & updated macos screen calc algorithn 2021-02-22 14:25:27 +01:00
Adolfo Gómez García
4e161b15f4 Merge remote-tracking branch 'origin/v3.0' 2021-02-17 16:02:29 +01:00
Adolfo Gómez García
7985c0f9d0 Updated translations 2021-02-17 16:02:13 +01:00
Adolfo Gómez García
328d35a289 Merged 3.0 HTML5 RDP changes 2021-02-17 15:40:43 +01:00
Adolfo Gómez García
af52727862 Merge remote-tracking branch 'origin/v3.0' 2021-02-17 15:35:36 +01:00
Adolfo Gómez García
d474f02baf added support for "legacy" window override on html5 for UDS 2021-02-17 15:33:56 +01:00
Adolfo Gómez García
672897f828 fixed test redirect && fixed frequency 2021-02-16 13:17:10 +01:00
Adolfo Gómez García
073ce3df12 removed old unused code 2021-02-16 10:20:28 +01:00
Adolfo Gómez García
09125bb1fa Merge remote-tracking branch 'origin/v3.0' 2021-02-15 12:14:39 +01:00
Adolfo Gómez García
041ff932e4 added log to services.log on case of phisical machine connection test failure 2021-02-15 12:11:01 +01:00
Adolfo Gómez García
f3e7e21149 Added log in case of file access problems 2021-02-15 11:38:59 +01:00
Adolfo Gómez García
348258daf2 Merge remote-tracking branch 'origin/v3.0' 2021-02-14 22:11:27 +01:00
Adolfo Gómez García
d1f83e4ae4 fixed detection of iPad & iPhone 2021-02-14 22:02:24 +01:00
Adolfo Gómez García
49a6e01477 Merge remote-tracking branch 'origin/v3.0' 2021-02-11 09:43:15 +01:00
Adolfo Gómez
9f2354191c Merge pull request #64 from glyptodon/simplify-config
Replace complex "udsfile" logic with simplified "uds-base-url" property.
2021-02-11 09:34:50 +01:00
Adolfo Gómez
6804982b0b Merge pull request #63 from glyptodon/revalidate-data
Re-validate UDS data for each connection attempt.
2021-02-11 09:33:39 +01:00
Michael Jumper
857f8602b8 Replace complex "udsfile" logic with simplified "uds-base-url" property. 2021-02-10 16:58:03 -08:00
Michael Jumper
584dee9fcd Re-validate UDS data for each connection attempt. 2021-02-10 16:45:01 -08:00
Adolfo Gómez García
e7bf7b0258 added "hidden" mac address treatment to phisical machines 2021-02-10 14:43:36 +01:00
Adolfo Gómez García
a3ced4af30 fixed get tag from auth name 2021-02-09 13:42:57 +01:00
Adolfo Gómez García
46d056de5d Merge remote-tracking branch 'origin/v3.0' 2021-02-09 12:39:13 +01:00
Adolfo Gómez García
b6cae240a7 small comment fix 2021-02-09 12:27:37 +01:00
Adolfo Gómez García
92e13c48de Added support for linux environmenv var expansion on parameters for freerdp 2021-02-08 12:53:42 +01:00
Adolfo Gómez García
d93e5dc566 Merge remote-tracking branch 'origin/v3.0' 2021-02-05 14:32:10 +01:00
Adolfo Gómez García
99a96bf343 added environment variable expansion to rdp parameters 2021-02-05 14:31:43 +01:00
Adolfo Gómez García
0b8a9444d1 upgraded user gui 2021-02-05 10:59:23 +01:00
Adolfo Gómez García
cea271a2ce Added typing to scheduler 2021-02-01 12:53:34 +01:00
Adolfo Gómez García
d2d190e8a4 Retry scheduler cleanup in case of locked db 2021-01-29 11:54:48 +01:00
Adolfo Gómez García
5b8ff497fa Improved sql for scheduler main loop 2021-01-29 11:53:38 +01:00
Adolfo Gómez García
ae6d36b86a manually imported changes to v3.0 on spool names variables 2021-01-28 14:06:03 +01:00
Adolfo Gómez García
600f50f203 Merge remote-tracking branch 'origin/v3.0' 2021-01-28 14:00:31 +01:00
Adolfo Gómez García
04d0acb17e Fixed count & added new vars to service pools name 2021-01-28 13:56:57 +01:00
Adolfo Gómez García
caf1d5d825 Adding support for custom connection userServices data for RDP 2021-01-28 13:09:43 +01:00
Adolfo Gómez García
99d3393a33 Merge remote-tracking branch 'origin/v3.0' 2021-01-26 16:07:49 +01:00
Adolfo Gómez García
80bd2c2f9c Fixed headers for rest.py 2021-01-26 16:01:56 +01:00
Adolfo Gómez García
1d06bd02c0 fixing tunnel on privileges dropping 2021-01-25 15:19:49 +01:00
Adolfo Gómez García
41991590ca added support for running as root and drop to an user later 2021-01-25 14:58:50 +01:00
Adolfo Gómez García
4313368f78 small fixes for tunnel 2021-01-25 12:47:00 +01:00
Adolfo Gómez García
50660d92e5 fixed tunnel to allow sending to broker connection stats on termination 2021-01-25 11:12:10 +01:00
Adolfo Gómez García
c796f5aaac fixed sample tunnel configuration 2021-01-25 08:42:50 +01:00
Adolfo Gómez García
9e88ff5daa * Added "no compression" to ssl options for tunnel
* Updated headers & reformated rest.py
2021-01-23 21:50:40 +01:00
Adolfo Gómez García
cb5a6f2430 Fixed osDetector name 2021-01-22 09:01:52 +01:00
Adolfo Gómez
0f87c022f3 Headers & comments fix 2021-01-22 09:00:59 +01:00
Adolfo Gómez García
69f1c88c3d Fixed headers 2021-01-22 07:28:17 +01:00
Adolfo Gómez García
6fc6fa0fe1 Remove pycrypto and only using cryptopraphy 2021-01-22 07:17:18 +01:00
Adolfo Gómez García
f634d4ef1a Added .env files for vscode editing 2021-01-22 07:16:53 +01:00
Adolfo Gómez García
f933181369 Merge remote-tracking branch 'origin/v3.0' 2021-01-21 11:00:45 +01:00
Adolfo Gómez García
99e6ec8090 add sample custom download to configjs.py 2021-01-21 11:00:13 +01:00
Adolfo Gómez
f0b6726e19 Merge branch 'master' of https://github.com/dkmstr/openuds 2021-01-20 12:42:38 +01:00
Adolfo Gómez
8424c14052 added certifi certificates to CA list for Qt on UDS Client 2021-01-20 12:42:30 +01:00
Adolfo Gómez García
97f709bf52 fixed opengnsys connector callbacks. 2021-01-20 09:00:25 +01:00
Adolfo Gómez García
c26c8d9df9 Removed OLD template (code cleanup) 2021-01-20 08:48:21 +01:00
Adolfo Gómez García
9f81d0a066 Upgraded angular version of interfaces to v11 2021-01-19 09:13:07 +01:00
Adolfo Gómez García
bb626889fb Working on next OpenGnsys service provider release 2021-01-19 08:47:05 +01:00
Adolfo Gómez García
d8fb0deef2 Working on next OpenGnsys service provider release 2021-01-19 08:46:00 +01:00
Adolfo Gómez García
743773e256 Working on new tunnel, translating client mods to new tunnel server 2021-01-18 11:24:34 +01:00
Adolfo Gómez García
4adc058e1a Updating client logic to new gen tunnel server 2021-01-18 07:51:47 +01:00
Adolfo Gómez García
f364b283e6 added tunnel check 2021-01-18 06:45:50 +01:00
Adolfo Gómez García
7e4975be99 cleanup new tunnel 2021-01-18 06:04:59 +01:00
Adolfo Gómez García
a2df121e45 fixed a couple readmes 2021-01-18 05:51:34 +01:00
Adolfo Gómez García
f402dadb0a Advanced A LOT on new tunnel server & client. First test passed 2021-01-15 11:31:39 +01:00
Adolfo Gómez García
865601b3c8 Merge remote-tracking branch 'origin/v3.0' 2021-01-14 17:43:07 +01:00
Adolfo Gómez García
20f2e4fd27 small header changes 2021-01-14 17:40:44 +01:00
Adolfo Gómez García
0da51dda92 fixed log of tunnel 2021-01-14 10:05:58 +01:00
Adolfo Gómez García
7c9c510ca0 minor updates to texts 2021-01-14 08:23:34 +01:00
Adolfo Gómez García
7ae9df21a5 added new tunnel server client 2021-01-14 08:17:49 +01:00
Adolfo Gómez García
2fd1dc5fc9 Advancing on forwarder 2021-01-14 08:11:02 +01:00
Adolfo Gómez García
a4986d3b4d Advancing on forwarder 2021-01-14 08:10:46 +01:00
Adolfo Gómez García
40abfb6014 Advancing on forwarder 2021-01-14 08:10:28 +01:00
Adolfo Gómez García
d6a8639b18 new tunnel server ready for testing phase 2021-01-14 06:01:06 +01:00
Adolfo Gómez García
971e5984d9 Advancing on new tunneler 2021-01-13 10:04:26 +01:00
Adolfo Gómez García
e486d6708d added local uds_tunnel work to openuds 2021-01-13 04:42:59 +01:00
Adolfo Gómez
f0bd3782d7 Merge branch 'master' of https://github.com/dkmstr/openuds 2021-01-11 03:04:38 +01:00
Adolfo Gómez García
7e9dde66ac Merge remote-tracking branch 'origin/v3.0' 2021-01-11 03:02:38 +01:00
Adolfo Gómez García
68d7ded5bc Upgraded windows script to be compatible with python2.7 & python3 (for future 3.5 client compatibility) 2021-01-11 03:01:11 +01:00
Adolfo Gómez
fa05d9425e Fixed for python 3 on Windows 2021-01-11 02:50:30 +01:00
Adolfo Gómez
75221a4842 fixed python3 version for windows 2021-01-11 01:33:32 +01:00
Adolfo Gómez García
4cc11d783a Merge remote-tracking branch 'origin/v3.0' 2020-12-18 11:10:35 +01:00
Adolfo Gómez García
105a6af885 fixed windows access scripts 2020-12-18 11:08:05 +01:00
Adolfo Gómez García
e5a38a65ed updated actor toke user on re-registration 2020-12-17 14:04:19 +01:00
Adolfo Gómez García
dcdea31061 fixing minor possible issues with staff members && reformating code, adapting to type checking, etc... 2020-12-17 13:56:15 +01:00
Adolfo Gómez García
6b3d222a12 Merge remote-tracking branch 'origin/v3.0' 2020-12-15 16:42:02 +01:00
Adolfo Gómez García
8719896f62 Merge remote-tracking branch 'origin/v3.0' 2020-12-15 16:41:54 +01:00
Adolfo Gómez García
bb71dd1cd3 updated translations 2020-12-15 13:54:32 +01:00
Adolfo Gómez García
a95c69a77e Fix to gui 2020-12-09 12:19:55 +01:00
Adolfo Gómez García
57d8b01757 Fixed rdp_file url generation for mac audio 2020-12-04 13:37:07 +01:00
Adolfo Gómez García
66fb59a13b fixed tests for service on 3.5 actor 2020-12-01 11:36:01 +01:00
Adolfo Gómez García
78372e593a refactorization 2020-11-27 15:56:17 +01:00
Adolfo Gómez García
1d7c57eb2f Merge remote-tracking branch 'origin/v3.0' 2020-11-27 14:33:11 +01:00
Adolfo Gómez García
b1c4385090 Added multiple ip service maxDeployed calc 2020-11-27 14:32:49 +01:00
Adolfo Gómez García
501565c088 Reformated & minor updates for workers 2020-11-27 11:12:06 +01:00
Adolfo Gómez García
f2d55d6141 Merge remote-tracking branch 'origin/v3.0' 2020-11-26 18:43:03 +01:00
Adolfo Gómez
620e8fee94 Merge branch 'v3.0' of https://github.com/dkmstr/openuds into v3.0 2020-11-26 18:42:07 +01:00
Adolfo Gómez
933ba772d9 fixed proxy mistyping 2020-11-26 18:41:58 +01:00
Adolfo Gómez García
e9a4da5acc Merge remote-tracking branch 'origin/v3.0' 2020-11-26 11:52:21 +01:00
Adolfo Gómez García
45461844b1 Fixed SAML issues on logout redirections 2020-11-26 11:25:22 +01:00
Adolfo Gómez García
522a5ebfb7 Merge remote-tracking branch 'origin/v3.0' 2020-11-25 18:40:11 +01:00
Adolfo Gómez García
a70e7a269b Updated proxmox so reset invokes reset instead of stop vm 2020-11-25 18:37:40 +01:00
Adolfo Gómez García
6868e471c5 Merge remote-tracking branch 'origin/v3.0' 2020-11-20 14:40:18 +01:00
Adolfo Gómez García
4866b8947c restored = instead of ### for mac cord url 2020-11-20 10:08:00 +01:00
Adolfo Gómez García
9e4922ba79 adde future recording of guacamole 2020-11-19 12:14:52 +01:00
Adolfo Gómez García
7a377b0065 adapting UDS to new tunnel 2020-11-18 12:21:58 +01:00
Adolfo Gómez García
b830b0ee0a Merge remote-tracking branch 'origin/v3.0' 2020-11-17 17:09:15 +01:00
Adolfo Gómez García
dcf5ea8574 fixed tunnel for nx 3.5 2020-11-17 17:08:48 +01:00
Adolfo Gómez
2251618c69 Merge pull request #58 from glyptodon/migrate-extension
Convert "guacamole-tunnel" web application into an equivalent Apache Guacamole extension.
2020-11-17 00:28:12 +01:00
Michael Jumper
a6876de0b1 Convert "guacamole-tunnel" web application into an equivalent Apache Guacamole extension. 2020-11-16 14:18:41 -08:00
Adolfo Gómez García
58a70e368e * Small RDP fix (typo)
* Added secure ticket type
* Reformated sevice view
2020-11-16 19:45:54 +01:00
Adolfo Gómez García
50f3b79ee3 Merge remote-tracking branch 'origin/v3.0' 2020-11-16 14:45:24 +01:00
Adolfo Gómez García
38a625452b fixed x2goscript to tunnel (using direct by mistake) 2020-11-16 14:44:24 +01:00
Adolfo Gómez García
4183069cec Fixed help for mac ox on freerdp 2020-11-16 13:27:20 +01:00
Adolfo Gómez García
905b1e7589 refactoring code 2020-11-16 13:10:02 +01:00
Adolfo Gómez García
024bb5e748 Updated default wait-time && fixed mac access 2020-11-16 13:09:33 +01:00
Adolfo Gómez García
e4345dfefa fixed tunnel scripts for macosx 2020-11-15 22:48:17 +01:00
Adolfo Gómez García
6c54f8e75a Fixed cache bug intruduced on encoders module removal
Improbed type checking for REST (ongoing)
Optimized queries (using prefetch) for service pools listing
2020-11-13 11:23:22 +01:00
Adolfo Gómez García
45ca92b77e Removed encoders modules 2020-11-13 09:35:18 +01:00
Adolfo Gómez García
06b0f1396f reformated storage source 2020-11-13 08:43:55 +01:00
Adolfo Gómez García
c698300096 Merge remote-tracking branch 'origin/v3.0' 2020-11-13 08:30:45 +01:00
Adolfo Gómez García
482cc4b2ae Removing "encoders" uds module 2020-11-13 08:30:27 +01:00
Adolfo Gómez García
ed15178549 fixed typo on storage locator. (The bug is in a code that is not used, but maybe in a future...) 2020-11-13 08:29:19 +01:00
Adolfo Gómez García
2f67eacfb6 * Removing "encoders" module (nonsense and sometimes confusing. Helped on python 2.7, but now... :)
* Revised reports to improve type checking
2020-11-12 13:55:09 +01:00
Adolfo Gómez García
b8e7dc07c3 Refactoring models (without DB modification) to better type checking 2020-11-12 12:13:35 +01:00
Adolfo Gómez García
52f524eb61 * Fixed comms to not "annoy" with warnings
* Added generateUuid to allow pass in an object
* renamed "is_meta" to more convenient "is_owned_by_meta
* Fixed 2.x actor rest api small bug (not used that part right now anyway, but for future)
2020-11-12 11:48:42 +01:00
Adolfo Gómez García
637519a162 Upgrading models for pylance typechecking 2020-11-12 08:35:45 +01:00
Adolfo Gómez García
65b47686db updating type checking 2020-11-11 14:36:31 +01:00
Adolfo Gómez García
1ab534c3aa * Adding more type checking (pylance type checking works fin with theese new "checks")
* Removed redundant fields not used
2020-11-11 13:32:02 +01:00
Adolfo Gómez García
8cd5437429 removing unused ManyToManyField (it has already a relation class) 2020-11-11 11:24:13 +01:00
Adolfo Gómez García
a475d45b7b * Added better type checking on Handler
* Fixed exception of ticket store exception
* Added initial nitification for unamanged
2020-11-11 09:03:02 +01:00
Adolfo Gómez García
4f3792ced5 added typing to calendar actions pairs 2020-11-11 09:01:43 +01:00
Adolfo Gómez García
3e061275b4 Added some more typing checks 2020-11-11 09:00:34 +01:00
Adolfo Gómez García
22415b98cd Commented out fix for passwords. Do not apply to 3.x mechanics 2020-11-11 08:48:36 +01:00
Adolfo Gómez García
d5f84a4209 upgrade locales 2020-11-10 16:29:20 +01:00
Adolfo Gómez
302b9a85d5 Merge pull request #57 from danitorregrosa/escape-conflicting-chars-rdp-credential-redirection
fix for proper escaping of conflicting chars in rdp credential redire…
2020-11-10 14:20:59 +01:00
danitorregrosa
08038b5b90 fix for proper escaping of conflicting chars in rdp credential redirection 2020-11-10 14:05:56 +01:00
Adolfo Gómez García
6d9a6baa2a Merge remote-tracking branch 'origin/v3.0' 2020-11-10 09:20:16 +01:00
Adolfo Gómez García
f3e2338cfb updated translations 2020-11-10 09:19:43 +01:00
Adolfo Gómez
fb69866f89 Merge remote-tracking branch 'origin/v3.0' 2020-11-09 09:19:31 +01:00
Adolfo Gómez
cd4708296e Merge branch 'v3.0' of https://github.com/dkmstr/openuds into v3.0 2020-11-09 09:09:14 +01:00
Adolfo Gómez
c3915fd8fe Added no proxy for local requests on udsactor 2020-11-09 09:09:05 +01:00
Adolfo Gómez García
74ad50d7d8 working on allowing services to detect user login on unmanaged services 2020-11-08 19:17:29 +01:00
Adolfo Gómez García
00dc4c5a7b Changed default encrypt to AES 2020-11-07 08:20:08 +01:00
Adolfo Gómez García
a495f36c43 .gitignore update 2020-11-07 08:19:32 +01:00
Adolfo Gómez García
f69a9dbc82 Merge remote-tracking branch 'origin/v3.0' 2020-11-06 01:08:09 +01:00
Adolfo Gómez García
253896e995 fixed incorrectly removing service with token on edition of service and duplication of token 2020-11-05 09:28:32 +01:00
Adolfo Gómez García
65879f4bd3 fixed ignorables for mac client 2020-11-03 07:29:18 +01:00
Adolfo Gómez García
a094e1ebee fixed log name being bytes instead of string 2020-11-03 05:41:32 +01:00
admin
c35dc90264 added ignorable 2020-11-03 04:59:51 +01:00
Adolfo Gómez García
1be48b99d4 making some tests with nuitka 2020-11-02 08:45:20 +01:00
Adolfo Gómez García
cab09aea9c Fixing up mac os RDP transport support 2020-10-31 07:21:01 +01:00
Adolfo Gómez García
da23222f0f Working on supporting better clients on Mac 2020-10-30 09:44:55 +01:00
Adolfo Gómez García
5d604bb629 Merge remote-tracking branch 'origin/v3.0' 2020-10-29 09:36:45 +01:00
Adolfo Gómez García
9d19aebdf6 Fixed macosx CoRD pkg location 2020-10-29 09:17:11 +01:00
Adolfo Gómez García
13de581b80 Improbed session clear on user logout 2020-10-29 07:49:43 +01:00
Adolfo Gómez García
76f4df5aa1 Added admin access API restriction by IP 2020-10-29 06:23:09 +01:00
Adolfo Gómez García
8634ce50c6 Fixed so, if an invalid IP is configured on trusted source, it gets logged and ignored 2020-10-29 06:22:52 +01:00
Adolfo Gómez García
758f409372 Renamed module "openStack" to more convenient "openstack", and a couple of minor fixes related to it 2020-10-28 06:55:15 +01:00
Adolfo Gómez García
edd6714cd0 removed version dependency from requirements for cryptography 2020-10-28 01:37:42 +01:00
Adolfo Gómez
a7f9880816 Merge pull request #56 from dkmstr/dependabot/pip/server/cryptography-3.2
Bump cryptography from 2.9.2 to 3.2 in /server
2020-10-28 00:49:29 +01:00
dependabot[bot]
d9bbbb35eb Bump cryptography from 2.9.2 to 3.2 in /server
Bumps [cryptography](https://github.com/pyca/cryptography) from 2.9.2 to 3.2.
- [Release notes](https://github.com/pyca/cryptography/releases)
- [Changelog](https://github.com/pyca/cryptography/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/2.9.2...3.2)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-27 22:53:01 +00:00
Adolfo Gómez García
5bf8e74018 Merge remote-tracking branch 'origin/v3.0' 2020-10-27 11:10:01 +01:00
Adolfo Gómez García
32c496e88a Increased AD path size to 256 for os manager 2020-10-27 11:02:27 +01:00
Adolfo Gómez García
f5b59889fc Merge remote-tracking branch 'origin/v3.0' 2020-10-27 07:57:48 +01:00
Adolfo Gómez García
538779e3c1 fixed usage on a day report 2020-10-27 07:55:32 +01:00
Adolfo Gómez García
6ced042153 upgraded debian build for actor and client 2020-10-23 08:34:10 +02:00
Adolfo Gómez García
e9f74d9ccc upgraded debian build for actor and client 2020-10-23 08:31:24 +02:00
Adolfo Gómez García
9815e21524 upgraded debian build 2020-10-23 08:28:02 +02:00
Adolfo Gómez García
666ae4e1d3 Added experimental support for L2 cache to Proxmox 2020-10-23 02:47:51 +02:00
Adolfo Gómez García
3e8a3efb75 Added L2 cache support for proxmox 2020-10-23 02:14:11 +02:00
Adolfo Gómez García
4094818ccc Merge remote-tracking branch 'origin/v3.0' 2020-10-22 11:14:04 +02:00
Adolfo Gómez García
6f5f17326e Fixed pools usage summary on emtpy pools 2020-10-22 11:13:41 +02:00
Adolfo Gómez García
43acedf7f6 small storage fix 2020-10-21 08:24:24 +02:00
Adolfo Gómez García
37f06617b8 Added dict-like storage management 2020-10-21 08:03:18 +02:00
Adolfo Gómez García
dd39bb4e64 Merge remote-tracking branch 'origin/v3.0' 2020-10-20 11:55:40 +02:00
Adolfo Gómez García
6dc6f5954b fixed typo on connection recovery 2020-10-20 11:29:46 +02:00
Adolfo Gómez García
bafd3bc6b3 Added support for configurable admin pagesizes 2020-10-20 11:11:52 +02:00
Adolfo Gómez García
48e0577e9f Merge remote-tracking branch 'origin/v3.0' 2020-10-20 11:10:20 +02:00
Adolfo Gómez García
61750f2f94 Improved services usage retrieval 2020-10-20 11:10:02 +02:00
Adolfo Gómez García
cb05113d88 Adding support for configurable page size of lists on admin 2020-10-20 09:19:10 +02:00
Adolfo Gómez García
afc4fd39ef Merge remote-tracking branch 'origin/v3.0' 2020-10-16 13:52:52 +02:00
Adolfo Gómez García
9c991fd8ef included sample code to allow use of css by tag (Authenticator tag) 2020-10-16 13:52:09 +02:00
Adolfo Gómez García
33502140cf Merge remote-tracking branch 'origin/v3.0' 2020-10-16 13:29:18 +02:00
Adolfo Gómez García
d840066468 Added config variable to allow some more modifications 2020-10-16 13:28:20 +02:00
Adolfo Gómez García
63280bf9cb Merge remote-tracking branch 'origin/v3.0' 2020-10-16 11:46:45 +02:00
Adolfo Gómez García
e8698316c6 Fixed calendar actions 2020-10-16 11:46:18 +02:00
Adolfo Gómez García
1d90f04245 Upgraded angualar version for user & admin 2020-10-15 04:40:32 +02:00
Adolfo Gómez García
a486e68e39 Removed old unused project files 2020-10-15 04:09:34 +02:00
Adolfo Gómez García
76e5aede37 Modified VERSION for future version release. Current stable is 3.0 2020-10-15 03:48:44 +02:00
Adolfo Gómez García
bbae1dca44 Fixed tags FULL removal 2020-10-14 17:55:20 +02:00
Adolfo Gómez García
1afe118481 Removed url redirection from html5. Now guacamole always closes window after end 2020-10-13 20:36:31 +02:00
Adolfo Gómez García
35c4e90be8 small fix for html5vnc 2020-10-13 20:32:57 +02:00
Adolfo Gómez García
b792c630c6 Fixed global removal concurrency check to speed up process 2020-10-09 13:43:54 +02:00
Adolfo Gómez García
958165c64f Fixed Opengnsys default max removing services 2020-10-09 13:41:57 +02:00
Adolfo Gómez García
2811521937 Removed old eclipse builders 2020-10-08 15:26:45 +02:00
Adolfo Gómez
792db7ba6c Update TODO.txt
Outdated TODO. Leaving empty for now.
2020-10-08 15:25:13 +02:00
Adolfo Gómez García
5740ec7e3e fixed (c) of pam_uds 2020-10-08 15:22:38 +02:00
Adolfo Gómez García
3cbb0675a6 Removed outdated docs 2020-10-08 15:20:05 +02:00
Adolfo Gómez García
bfd5f12f82 Fixed scheduled action executor with removing & restrained pools 2020-10-07 12:39:02 +02:00
Adolfo Gómez García
b5b2d20c27 Fixed metapool usage && visualization 2020-10-05 16:50:38 +02:00
Adolfo Gómez García
cf2c984065 Fixed metapool usage && visualization 2020-10-05 16:03:49 +02:00
Adolfo Gómez García
e38c05286f Fixed loading autoattributes from python 2 2020-10-01 15:35:36 +02:00
Adolfo Gómez García
5355cc5a51 Fixed Hanged Removal of non os managed services 2020-09-30 14:05:27 +02:00
Adolfo Gómez García
1789aee1e7 Added "connection.close" to release used connections early" (fixed) 2020-09-29 16:16:47 +02:00
Adolfo Gómez García
e184961eba Added "connection.close" to release used connections early" (fixed) 2020-09-29 16:13:43 +02:00
Adolfo Gómez García
10b8f3418f Added "connection.close" to release used connections early" 2020-09-29 15:48:39 +02:00
Adolfo Gómez García
60b1fabcaf added number of service pools to transports list 2020-09-29 13:47:12 +02:00
Adolfo Gómez García
b492e7674c added "total" macro to display services 2020-09-25 14:13:53 +02:00
Adolfo Gómez García
3d0a9f758f Fixed dependencies for Fedora 32 & OpenSuse 2020-09-24 16:33:00 +02:00
Adolfo Gómez García
a2aef2fba0 Fixed service launcher & metapool launcher to correctly recognize http urls 2020-09-23 14:07:05 +02:00
Adolfo Gómez García
9d6fd8a1ab Updated translations 2020-09-22 16:24:33 +02:00
Adolfo Gómez García
547607452a Added variable launch time for plugin launcher 2020-09-22 16:22:56 +02:00
Adolfo Gómez García
25d24f8102 fixed user/userservice removal 2020-09-15 10:49:21 +02:00
Adolfo Gómez García
9e77934136 Fixed info on model utils
Added "allow_agent=False" to forwarded connection of UDS client
2020-09-10 13:53:05 +02:00
Adolfo Gómez García
78129c9569 Allow use of tag if DISALLOW_GLOBAL_LOGIN 2020-09-08 13:01:32 +02:00
Adolfo Gómez García
2c27061534 Fixed altClass group retrieval for regexldap 2020-09-08 12:21:18 +02:00
Adolfo Gómez García
d46c806ae3 Fixed ldap _altuser attributes adding 2020-09-07 12:49:48 +02:00
Adolfo Gómez García
b35ffbbf58 Fixed translation 2020-09-03 15:48:28 +02:00
Adolfo Gómez García
407dff41ea Fixed user interface typo 2020-09-03 15:45:59 +02:00
Adolfo Gómez García
2627f96499 Fixed calendar action "Remove all user services" 2020-09-03 11:35:54 +02:00
Adolfo Gómez García
a0ba19010c updated requirements 2020-09-01 15:11:28 +02:00
Adolfo Gómez García
7650f3239a Fixed configuration save logging when migration are onwards 2020-09-01 15:10:29 +02:00
Adolfo Gómez García
35f932e88d Fixed restrained on admin 2020-08-31 18:00:45 +02:00
Adolfo Gómez García
fc188b5b9c Changed the mechanics for launching an external url 2020-08-28 17:09:56 +02:00
Adolfo Gómez García
bbc211ac8c updated admin interfaces 2020-08-28 14:32:08 +02:00
Adolfo Gómez García
fbd3d36461 Fixed test of simpleldap 2020-08-27 18:50:26 +02:00
Adolfo Gómez García
a527ff326d * Updated dependency for rpms (pycrypto) for UDS
* Included "urllib.parse" as import (not all platforms includes it on "urllib" import)
* Fixed stupid "b" on tools
2020-08-27 14:13:27 +02:00
Adolfo Gómez García
6a9b764e1e fixed temp filename 2020-08-27 13:26:46 +02:00
Adolfo Gómez García
06b7b58dd2 Fixed port error on spice tunnel 2020-08-26 16:31:26 +02:00
Adolfo Gómez García
9560ee0699 Fixed X2go authorize script for vapp 2020-08-25 15:13:05 +02:00
Adolfo Gómez García
cf88eb4c4b added support for 2.2 for backwards for script send 2020-08-25 14:45:33 +02:00
Adolfo Gómez García
f9154b57a7 Final fixes for multi domain && tagged auth 2020-08-25 13:57:48 +02:00
Adolfo Gómez García
6e6384fb00 Fixed authentication multihost 2020-08-25 13:46:20 +02:00
Adolfo Gómez García
f0caabf814 Fixed authentication multihost 2020-08-25 13:42:27 +02:00
Adolfo Gómez García
110f1c23f1 Updated translations 2020-08-25 10:52:46 +02:00
Adolfo Gómez García
0d63dabe9f Fixed admin interface 2020-08-25 10:32:40 +02:00
Adolfo Gómez García
e1b4825726 Fixed meta service pool. Negative priorities not accepted 2020-08-25 10:30:01 +02:00
Adolfo Gómez García
5e4114c719 Fixed clipboard (partially) for guacamole 2020-08-20 14:45:21 +02:00
Adolfo Gómez García
5c5ddd147c Fixed port on simple ldap 2020-08-20 11:53:18 +02:00
Adolfo Gómez García
d46eebc581 small regex ldap fix 2020-08-19 15:15:25 +02:00
Adolfo Gómez García
4216d1553a Fixed Regex LDAP accepting altClass as secondary search 2020-08-19 14:44:33 +02:00
Adolfo Gómez García
1e42bf6cbb Fixed base random pass length
Removed "tunnelCheck" from legacy nx transport (not used anyway)
2020-08-19 13:44:55 +02:00
Adolfo Gómez García
416b5e738f Fixed random password complexity 2020-08-18 00:47:56 +02:00
Adolfo Gómez García
2529039f49 Fixed getIdle for all platforms 2020-08-11 15:28:47 +02:00
Adolfo Gómez García
0ba8e83588 Removed memory for now from proxmox. Not really used 2020-08-11 12:33:40 +02:00
Adolfo Gómez García
e58b3e52e9 fixed download actors display on small screens 2020-08-11 11:23:18 +02:00
Adolfo Gómez García
3e72f634d4 Fixed "true" 2020-08-11 10:59:38 +02:00
Adolfo Gómez García
b61fd61e0e added "rmp --addsig" to build script. Note that you musth have configured an rmp key, or ignore the error output (and dont get signed the .rpm) 2020-08-10 08:44:50 +02:00
Adolfo Gómez García
39cf5b1ff7 fixed config save on multiple save 2020-08-08 20:23:30 +02:00
Adolfo Gómez García
adfed4f89d added custom value to set filter on top or bottom 2020-08-08 20:15:59 +02:00
Adolfo Gómez García
27f867f71a adder renamer for opensuse-leap 2020-08-08 00:21:27 +02:00
Adolfo Gómez García
73445c516b Added VNC HTML5 experimental transport (disabled by default) 2020-08-07 09:20:39 +02:00
Adolfo Gómez García
247bb2e549 fixed javascript login 2020-08-07 06:46:28 +02:00
Adolfo Gómez García
4a8fdfe09d fixed sample config 2020-08-07 05:48:07 +02:00
Adolfo Gómez García
5a3a9e2e42 fixed sample config 2020-08-06 17:32:36 +02:00
Adolfo Gómez García
ff4ff7899c * Upgraded user interface
* Fixed visual name max length (to 32)
2020-08-06 12:47:19 +02:00
Adolfo Gómez García
a34e8c2c9d Updated admin interface 2020-08-06 08:27:39 +02:00
Adolfo Gómez García
9a9afae79a Added {use} macro to Short name, so the % of pool use could be shown on pool name 2020-08-05 15:08:07 +02:00
Adolfo Gómez García
a3c31bcfb7 Updated admin 2020-08-05 15:07:35 +02:00
Adolfo Gómez García
060b4fce98 now "joinDomain" executes "rename" and ignores most part 2020-08-05 10:40:30 +02:00
Adolfo Gómez García
fc090497cc fixed sample config file 2020-08-04 07:55:43 +02:00
Adolfo Gómez García
44456213f7 Added new report "Authenticators stats" 2020-08-03 13:05:13 +02:00
Adolfo Gómez García
5d76b3269b fixed calendar actions add/remove group/transport 2020-08-03 13:04:18 +02:00
Adolfo Gómez García
786242d1cd Small improvement to events 2020-08-02 17:16:02 +02:00
Adolfo Gómez García
fc856ad7fb Small improvement to counter 2020-08-02 17:09:06 +02:00
Adolfo Gómez García
aecd933c98 more fixes to stats counters 2020-07-31 13:39:36 +02:00
Adolfo Gómez García
5602cca2b5 Fixed getCounters to be a bit more flexible 2020-07-31 06:30:44 +02:00
Adolfo Gómez García
50fc172fd7 improved getCounter kwargs parameters read 2020-07-30 06:21:03 +02:00
Adolfo Gómez García
0664968352 Updated dashboard 2020-07-30 05:13:51 +02:00
Adolfo Gómez García
0333dbd51a Fixed non visible config values 2020-07-30 05:13:11 +02:00
Adolfo Gómez García
6e19d59bdf Small fixes (typing, name & string related) 2020-07-30 04:12:42 +02:00
Adolfo Gómez García
fe7bbe8799 added small comment in case someone wants to use UDS as main site and redirect / to somewhere else 2020-07-29 20:11:03 +02:00
Adolfo Gómez García
c53dbd6714 removed print, not commited real stats saver :) 2020-07-29 15:13:02 +02:00
Adolfo Gómez García
3e8757e908 added auth stats to stats collector & stats manager 2020-07-29 13:53:00 +02:00
Adolfo Gómez García
e1d66db7ea Merge branch 'master' of github.com:dkmstr/openuds 2020-07-28 09:43:41 +02:00
Adolfo Gómez García
c38a68f4f6 Moved __import__ to recommended "importlib.import_module"
Fixed guacamole 500 error on some cases
2020-07-28 09:43:33 +02:00
Adolfo Gómez
db373979c2 fixed unknown literal caps 2020-07-27 09:03:05 +02:00
Adolfo Gómez
606e65eea4 Added session type to login request 2020-07-27 08:53:05 +02:00
Adolfo Gómez
4e3dce37f7 Removed SENS from uds actor 3.0. Not needed 2020-07-23 09:14:19 +02:00
Adolfo Gómez García
668c26dd8f Fixed token being cleaned on managed machines on logout 2020-07-22 23:33:23 +02:00
Adolfo Gómez García
735a093b0b Fixed service_multi, so, in case a phisical machines got "stuck on db" forever, could be removed by editing the service (remove, save, readd and done) 2020-07-22 07:10:30 +02:00
Adolfo Gómez García
8a49e7c437 Fixed type of error returned by StorageAccess 2020-07-22 06:38:35 +02:00
Adolfo Gómez García
03e3517baf Added access to storage using dict-like item 2020-07-22 06:26:53 +02:00
Adolfo Gómez García
db5ac8b12e Upgraded user interface to angular 10 2020-07-21 18:13:44 +02:00
Adolfo Gómez García
78dbd966b1 Upgraded admin interface 2020-07-21 17:57:07 +02:00
Adolfo Gómez García
cff8977c63 Fixed latam for html5 2020-07-21 17:45:46 +02:00
Adolfo Gómez García
a648f5686e Updated to client for python 3 2020-07-20 13:15:00 +02:00
Adolfo Gómez García
2fbdef1739 fixed invalid cert error on python 3 2020-07-20 11:50:20 +02:00
Adolfo Gómez García
7d4243d72a Fixed spice bugs. Thanks to a-sh1 2020-07-15 14:06:55 +02:00
Adolfo Gómez García
c520a63800 Fixed HTML5 rdp netbios domain name
Fixed publication cleaning on persistent machines (Cache is now removed correctly)
2020-07-14 14:54:40 +02:00
Adolfo Gómez García
12ce031217 fixed f4 proxy request with domain and domain name on html5 if used NETBIOS name 2020-07-14 14:03:03 +02:00
Adolfo Gómez García
3ead78adb9 Updated guacamole dependency to 1.1 2020-07-12 07:03:10 +02:00
Adolfo Gómez García
b238bba7a4 Added new "future" url paths for some dispatchers 2020-07-12 01:42:25 +02:00
Adolfo Gómez García
416a11c0ed Removed _ from hostnames (no valid) 2020-07-08 19:39:37 +02:00
Adolfo Gómez García
c286beac9f Removed _ from hostnames (no valid) 2020-07-08 19:27:09 +02:00
Adolfo Gómez García
a31411fbf0 Fixed a couple of things on UDS 2020-07-08 18:48:46 +02:00
Adolfo Gómez García
675e335aa4 Added UDS Actor version to uds actor request user agent 2020-07-03 14:34:28 +02:00
Adolfo Gómez García
31ee1d2858 Fixed background "cleaners" 2020-07-02 15:39:14 +02:00
Adolfo Gómez García
19edf417ba *More fix & improvements on cleaner workers 2020-07-01 16:45:03 +02:00
Adolfo Gómez García
510b0cb32a * Fixed and improved AssignedAndUnused check time (from 1 minutes to 5, more than enough)
* Improved query to filter assignedAndUnused
* Added "destroy_after" check for stuck worker
* Improved query for stuck check
2020-07-01 16:11:47 +02:00
Adolfo Gómez García
f9ada8349f Fixed Auth limiting by hostname/label && fixed actor changeip method (is ipchange) 2020-07-01 12:00:51 +02:00
Adolfo Gómez García
5e177059fe Added parameter to add or not digits on random string 2020-06-29 13:48:40 +02:00
Adolfo Gómez García
df86e8742c Updated translations 2020-06-25 13:55:49 +02:00
Adolfo Gómez García
526229b9cf Fixed admin tooltip 2020-06-25 13:54:41 +02:00
Adolfo Gómez García
8d39728ede Fixed service information 2020-06-25 13:53:49 +02:00
Adolfo Gómez García
5bb2cfdf8a Fixed error detection on new service allocation 2020-06-24 12:51:58 +02:00
Adolfo Gómez García
640de2e7b7 Upgraded angular && small report fix 2020-06-24 05:53:13 +02:00
Adolfo Gómez García
2f615358e3 updated frontend 2020-06-24 05:20:52 +02:00
Adolfo Gómez García
7c5cbe6604 new translations 2020-06-24 05:16:44 +02:00
Adolfo Gómez García
7c4ebd90aa Fixing up clients 2020-06-24 05:07:38 +02:00
Adolfo Gómez García
2d2030f8d5 Added downloadables & legacy downloadables 2020-06-24 03:41:48 +02:00
Adolfo Gómez García
243c89eb6d Fixed package builder for actor on python3 2020-06-24 03:16:37 +02:00
Adolfo Gómez García
6de8ccb018 Created packages for udsclient for modern rh/suse based installar (python3) 2020-06-24 03:01:04 +02:00
Adolfo Gómez García
f52b224a38 template fixed for uds client for python3 2020-06-24 01:47:49 +02:00
Adolfo Gómez García
909e706bbd Fixed UDSActor for rpm based % python3 2020-06-24 01:37:13 +02:00
Adolfo Gómez García
0fcbf8dc6a Updated translations 2020-06-24 00:56:13 +02:00
Adolfo Gómez García
bda2232629 Added Custom External URL Launcher 2020-06-24 00:48:06 +02:00
Adolfo Gómez García
308a9c68ab Updated locales 2020-06-23 14:10:19 +02:00
Adolfo Gómez García
e7a403d60e updated user moodle launcher 2020-06-23 14:06:47 +02:00
Adolfo Gómez García
14ddcfe797 fixed moodle URL 2020-06-23 13:25:54 +02:00
Adolfo Gómez García
afcb96d9b7 small fix 2020-06-22 16:12:40 +02:00
Adolfo Gómez García
96945e7834 Added "autocomplete off" to forms 2020-06-22 16:00:59 +02:00
Adolfo Gómez García
fdd241194d Updated .gitignore 2020-06-22 14:43:02 +02:00
Adolfo Gómez García
0dc78fc376 * Working on FEDORA/RH/OpenSuse & rpm based uds actor for python3 packager 2020-06-22 14:36:15 +02:00
Adolfo Gómez García
4b3c3cc183 Added custom html info on login page 2020-06-19 15:09:19 +02:00
Adolfo Gómez García
69c4efe793 fixed comments 2020-06-17 12:49:04 +02:00
Adolfo Gómez García
3c85ba692e Independized "Multimedia sync" flag from sound 2020-06-17 10:38:41 +02:00
Adolfo Gómez García
7ce2ac8bd7 Fixed /multimedia (changed for /video) when tranport flag "Multimedia sync" 2020-06-17 10:33:24 +02:00
Adolfo Gómez García
062b02a409 removed unusefull "loginurl" config parameter 2020-06-16 14:47:27 +02:00
Adolfo Gómez García
e3cb1ffaf1 enlarged options for rdp linux clients text fields 2020-06-16 13:39:32 +02:00
Adolfo Gómez García
7312c1ee6b Fixed Settings sample 2020-06-15 15:10:21 +02:00
Adolfo Gómez García
d296761ada Fixed federated auth callback 2020-06-15 14:55:52 +02:00
Adolfo Gómez García
da8d885107 Fixed locales 2020-06-12 17:15:09 +02:00
Adolfo Gómez García
9d64f7a539 Fixed model so "name", "..." are also provided to Modules 2020-06-12 14:04:34 +02:00
Adolfo Gómez García
f01d4302cf Fixed comms for non suporting coms user services 2020-06-12 13:53:51 +02:00
Adolfo Gómez García
d9a948df38 Fixed types for proxmox (network) 2020-06-11 18:04:12 +02:00
Adolfo Gómez García
5df07875f9 Fixed admin text 2020-06-11 17:38:36 +02:00
Adolfo Gómez García
c23f95e903 Fixed several proxmox issues 2020-06-11 17:34:36 +02:00
Adolfo Gómez García
6f8b67f3b8 updated translations 2020-06-10 16:42:00 +02:00
Adolfo Gómez García
7a6476569d fixed admin 2020-06-10 15:01:05 +02:00
Adolfo Gómez García
1638243d84 Fixed html5 && actor v3 2020-06-10 02:14:18 +02:00
Adolfo Gómez García
74c5643bcf New messages update 2020-06-08 18:07:40 +02:00
Adolfo Gómez García
7bc87c39a7 fixed state date optimization 2020-06-08 17:44:42 +02:00
Adolfo Gómez García
bf4a6e24d2 Fixed service multi 2020-06-08 16:47:08 +02:00
Adolfo Gómez García
0aa65e71b4 fixed debian dependency (python-six instead of python3-six) for udsclient 2020-06-08 16:02:41 +02:00
Adolfo Gómez García
4985747c97 Fixed skipTimeOnFailure store && integer division on python 3 for client 2020-06-08 14:35:07 +02:00
Adolfo Gómez García
8d9b8d9234 Added support for openstack showing subnets 2020-06-05 14:51:31 +02:00
Adolfo Gómez García
7b623bd986 Several fixes for mitration from 2.2.1 2020-06-03 13:49:19 +02:00
Adolfo Gómez García
72efd559c4 Translations 2020-06-02 15:41:03 +02:00
Adolfo Gómez García
24f77d37d4 Fixed minor javascript visualizations 2020-06-02 15:38:36 +02:00
Adolfo Gómez García
a982d64190 Removed L2 cache from openstack (not really usefull right now) 2020-06-02 01:06:00 +02:00
Adolfo Gómez García
56eefa10a9 updated locales 2020-05-30 20:56:53 +02:00
Adolfo Gómez García
779dfe1fc4 Added mor info to pools usage summary 2020-05-30 20:55:21 +02:00
Adolfo Gómez García
d0e7dde571 fixed user save 2020-05-29 15:22:49 +02:00
Adolfo Gómez García
7ee137b00e check permisions on users/groups administration 2020-05-29 14:46:36 +02:00
Adolfo Gómez García
1a42daa8e3 fixed rdp script signatures 2020-05-29 14:16:46 +02:00
Adolfo Gómez García
a630f1fc14 fixed over fixes xd (small "beauty") 2020-05-29 14:15:11 +02:00
Adolfo Gómez García
9454b9f63f Fixed linux rdp scripts 2020-05-29 14:10:01 +02:00
Adolfo Gómez García
b48bea14d2 Now ensures setReady does not steals, on error, the machine to the user 2020-05-29 04:48:14 +02:00
Adolfo Gómez García
1959051fe4 added cache for checking liveness on multiple ip 2020-05-29 03:43:36 +02:00
Adolfo Gómez García
6faf6ceaca Updated default input field length to 64. Fixed actor to allow unmanaged new methods. Fixed admin interface 2020-05-28 13:58:28 +02:00
Adolfo Gómez García
7ec2197634 improving actor to better support unmanaged hosts 2020-05-28 04:29:13 +02:00
Adolfo Gómez García
7a9dbc3edd added logging capabilites to Provider & Services Class. Added info on provider log when a machine is not accesible on phisical 2020-05-28 02:13:00 +02:00
Adolfo Gómez García
944bc0041b Fixed rdp netbios domain being swapped with username 2020-05-26 21:36:52 +02:00
Adolfo Gómez García
a7b33bb992 Fixed calendar actions 2020-05-26 18:34:40 +02:00
Adolfo Gómez García
06f4c933ed updated translations 2020-05-26 16:22:39 +02:00
Adolfo Gómez García
b1e1aebdf0 Added por check for phisical machines multi 2020-05-26 16:03:49 +02:00
Adolfo Gómez García
36609eaff3 remove empty ips from phisical machines on save 2020-05-26 14:32:57 +02:00
Adolfo Gómez García
71d6e389ea fingerprints is a comma separated string 2020-05-26 11:52:00 +02:00
Adolfo Gómez García
1983a218cb fixed typo on forward 2020-05-26 11:37:54 +02:00
Adolfo Gómez García
2fea5d1526 fixed typo on forward 2020-05-26 11:36:41 +02:00
Adolfo Gómez García
cede2c48e9 added forward checking fingerprints capability 2020-05-26 11:21:35 +02:00
Adolfo Gómez García
f306449b0e Fixed meta pool prefetch & configuration save 2020-05-25 12:55:05 +02:00
Adolfo Gómez García
786e419b27 Removed last focos of possible slowness showing services 2020-05-22 18:57:37 +02:00
Adolfo Gómez García
6ff997b054 fixed refactored var 2020-05-22 13:15:40 +02:00
Adolfo Gómez García
e0a512eefb More improvements on getServices 2020-05-22 12:43:41 +02:00
Adolfo Gómez García
fcea278d2f fixed certificate message 2020-05-22 10:56:17 +02:00
Adolfo Gómez García
aee16dd075 Improved user services queries a LOT :) 2020-05-22 03:18:04 +02:00
Adolfo Gómez García
42b06ff688 fixed metapools access 2020-05-20 14:04:32 +02:00
Adolfo Gómez García
158564552e Fixed pushing menus after dialog 2020-05-20 13:00:13 +02:00
Adolfo Gómez García
5b9fe17353 fixed prefetchs on some methods 2020-05-19 18:05:30 +02:00
Adolfo Gómez García
5ea3949d4c Improved service pool listing on high numbers... 2020-05-19 17:08:40 +02:00
Adolfo Gómez García
aa3744094b fixed pools usage summary report 2020-05-18 21:53:15 +02:00
Adolfo Gómez García
222ed0e9b0 Added new report (summary of pools usage between dates) 2020-05-18 15:37:32 +02:00
Adolfo Gómez García
cf76d7ae76 fixed log comments 2020-05-15 14:24:26 +02:00
Adolfo Gómez García
4dec86fe9d Several fixes:
* Loglevel now more "readable" for actor
* Added "remove delete protection" for cloned machine to template on proxmox
* Fixed bug on textbox
2020-05-15 14:08:32 +02:00
Adolfo Gómez García
62313ae67f fixed texbox default values 2020-05-14 14:51:46 +02:00
Adolfo Gómez García
aba2995371 moved several logs out of info level 2020-05-13 12:12:34 +02:00
Adolfo Gómez García
66e3dc11ea Fixed IP Proxy 2020-05-11 15:09:52 +02:00
Adolfo Gómez García
f1e8011f42 fixed comms for certificate checking 2020-05-11 14:16:11 +02:00
Adolfo Gómez García
616df1f0f2 Fixed translations && updated staff showing info 2020-05-11 14:06:33 +02:00
Adolfo Gómez García
65bb91c449 fixed xss && fixed configjs 2020-05-11 13:35:28 +02:00
Adolfo Gómez García
c69512bf8b fixed issue with actor certificates creation 2020-05-09 08:51:14 +02:00
Adolfo Gómez García
1e03a5cf6e fixed issue with actor certificates creation 2020-05-09 08:48:43 +02:00
Adolfo Gómez García
8c3ca38b3d updated translations 2020-05-07 11:53:38 +02:00
Adolfo Gómez García
cb8461b06c Fixed Admin by translations 2020-05-07 10:55:04 +02:00
Adolfo Gómez García
559c5c76ff fixed literals & typo 2020-05-07 10:37:26 +02:00
Adolfo Gómez García
a5b164930e updated translations 2020-05-06 13:53:18 +02:00
Adolfo Gómez García
92b4e2c898 Changed shadow default for xcp from 4 to 1 2020-05-06 13:51:03 +02:00
Adolfo Gómez García
eba6a7be7a renamed CrOs SO to Chrome OS 2020-05-05 16:32:25 +02:00
Adolfo Gómez García
b824c5431b updated client to allow some more customizations from dashboard 2020-05-05 12:35:57 +02:00
Adolfo Gómez García
f409b2986c fixing up stuff 2020-05-04 14:12:36 +02:00
Adolfo Gómez
ad4ea61613 Merge pull request #52 from shaba/devel
ovirt -> proxmox in Proxmox service
2020-04-30 09:25:55 +02:00
a8d0081fd1 ovirt -> proxmox in Proxmox service 2020-04-29 17:31:43 +03:00
Adolfo Gómez García
cdd3cd546f fixed names 2020-04-29 11:28:58 +02:00
Adolfo Gómez García
3d2423f0bf added warning capture && fixed cert issuer name 2020-04-29 08:05:25 +02:00
Adolfo Gómez García
612d05a408 generating certificates with criptography lib && added alt subject 2020-04-29 07:16:00 +02:00
Adolfo Gómez García
ab84330c7b added "strip" to IP list 2020-04-28 15:57:36 +02:00
Adolfo Gómez García
bd28300324 fixed redirection for custom auth if default 2020-04-28 11:54:06 +02:00
Adolfo Gómez García
e758ec36ff Several fixes:
* Extended windows domain OU
* Addded certification check in connections to UDS clients
* Removed empty paths from REST api
2020-04-28 11:02:36 +02:00
Adolfo Gómez García
c1adf35c99 added "initializeUnmanaged", but right now its unused" 2020-04-28 07:44:39 +02:00
Adolfo Gómez García
9aaab57a6a Fixed typo on opengnsys 2020-04-27 12:57:03 +02:00
Adolfo Gómez García
e38151a349 Added udsclient for python3 for debian/ubuntu based 2020-04-27 11:46:07 +02:00
Adolfo Gómez García
0b61e6096f done python3 client installer 2020-04-27 11:27:45 +02:00
Adolfo Gómez García
2e9b7046ff Updated OpenGnsys working 2020-04-27 10:46:37 +02:00
Adolfo Gómez García
4b3840f9c3 fixed an invalid reverse 2020-04-24 12:33:35 +02:00
Adolfo Gómez García
44632a497e fixed admin interface 2020-04-24 10:18:27 +02:00
Adolfo Gómez García
e5967b7ff3 moved uds.js to different location for admin and user 2020-04-24 10:02:18 +02:00
Adolfo Gómez García
57bc347625 Updated translations 2020-04-23 11:05:25 +02:00
Adolfo Gómez García
54bd713de6 updated usage by pool report 2020-04-22 11:45:06 +02:00
Adolfo Gómez García
2d3b3af978 removed invalid code from xen 2020-04-22 10:51:14 +02:00
Adolfo Gómez García
7ea139163d removed again local SRs because its possible to mark a local storage as "shared" on non cluster xen 2020-04-21 12:25:05 +02:00
Adolfo Gómez García
e93f2951be Updated usage by pool report 2020-04-21 11:58:50 +02:00
Adolfo Gómez García
7c37d37418 added "remove all assigned user services" as an action 2020-04-21 10:58:39 +02:00
Adolfo Gómez García
aee5b4501a fixed admin interface 2020-04-20 11:06:41 +02:00
Adolfo Gómez García
c597b307b5 fixed publication full persistent 2020-04-20 10:57:20 +02:00
Adolfo Gómez García
4c77d1ac78 fixed non full persistent 2020-04-20 10:20:34 +02:00
Adolfo Gómez García
40a820e770 re-added shared check 2020-04-16 21:20:39 +02:00
Adolfo Gómez García
1c6d58a53d allow local storage 2020-04-16 10:35:35 +02:00
Adolfo Gómez García
b2727e700b fixed typo on Xen check 2020-04-16 10:05:59 +02:00
Adolfo Gómez García
0de8ce3000 pep fix 2020-04-16 08:44:13 +02:00
Adolfo Gómez García
9e32996fa8 Added FIXED & Optional openstack Project ID & region for platforms that do not expose user apis 2020-04-16 06:55:35 +02:00
Adolfo Gómez García
addf24a30a Merge branch 'master' of github.com:dkmstr/openuds 2020-04-14 09:51:37 +02:00
Adolfo Gómez García
25d36a64fa added missing dep on debian 3.0 client 2020-04-14 09:51:23 +02:00
Adolfo Gómez
cc9326fc95 Merge pull request #51 from shaba/devel
add renamer for ALT
2020-04-14 07:41:25 +02:00
72a6c28549 add renamer for ALT 2020-04-14 03:27:49 +03:00
Adolfo Gómez García
d7e30d149c fixed proxmox tooltips && fixed error page redirection 2020-04-13 10:35:23 +02:00
Adolfo Gómez García
b8c37b279a fixes for open urls on new window if requested 2020-04-07 15:27:55 +02:00
Adolfo Gómez García
06bd7bb736 added setting support for "force on new window" 2020-04-07 15:23:35 +02:00
Adolfo Gómez García
c1a128335c fixed interface 2020-04-03 14:08:52 +02:00
Adolfo Gómez García
f9163b4e10 updated admin interface 2020-04-02 00:01:34 +02:00
Adolfo Gómez García
359857b9b3 fixed actor logout persistent & x2go authorize script 2020-04-01 14:08:49 +02:00
Adolfo Gómez García
43fbfdab3d fixes for udsadctor on script exec 2020-04-01 13:35:21 +02:00
Adolfo Gómez García
173caa250e fixed urls for auths 2020-03-30 18:16:45 +02:00
Adolfo Gómez García
5e971db73f added password encription for UDS 2020-03-30 18:11:02 +02:00
Adolfo Gómez García
aaa2ce825e updated admin interface && changed default end dato to "today" 2020-03-11 14:51:20 +01:00
Adolfo Gómez García
663c8f762a first tests with python 3 client went fine.. :) 2020-03-10 16:23:38 +01:00
Adolfo Gómez García
6ead895bdf created fork of client for python3 version 2020-03-10 14:04:27 +01:00
Adolfo Gómez García
7f0e3f0541 Fixed client message 2020-03-09 15:24:09 +01:00
Adolfo Gómez García
fd90648874 removed old js apps 2020-03-09 14:48:15 +01:00
Adolfo Gómez García
3e67852d8a * added os type verify to ticketing auth
* fixed getType method
2020-03-06 10:54:54 +01:00
Adolfo Gómez García
099a9ba3c1 fixed error shown to user 2020-03-02 18:58:24 +01:00
Adolfo Gómez García
1d807784d2 Fixed translations 2020-02-28 09:37:05 +01:00
Adolfo Gómez García
69085f28da fixed translation from angular 2020-02-28 09:34:05 +01:00
Adolfo Gómez García
15cfa45f69 Fixed doLog type hints 2020-02-28 09:07:54 +01:00
Adolfo Gómez García
f9a5b32993 Fixed small actor bug
Fixed logging in windows domain os manager
2020-02-27 10:21:13 +01:00
Adolfo Gómez García
e84965bb84 Fixed required fields for checkbox 2020-02-26 12:57:52 +01:00
Adolfo Gómez García
a8e58db3bd Updated translations 2020-02-25 15:42:39 +01:00
Adolfo Gómez García
7c384409f7 Addad HA to proxmox 2020-02-25 15:40:32 +01:00
Adolfo Gómez García
ff64d21137 Fixed url 2020-02-25 15:40:13 +01:00
Adolfo Gómez García
d6019384ef fixed actions & admin & gui small bugs 2020-02-25 14:47:42 +01:00
Adolfo Gómez García
92b4aadfbb Added experimental features flag for turning on/off highly experimenal features not intended for production environments 2020-02-25 01:17:39 +01:00
Adolfo Gómez García
52437afcf8 Proxmox is now working 2020-02-24 17:02:33 +01:00
Adolfo Gómez García
56492ccd2d initial deployment 2020-02-24 02:28:51 +01:00
Adolfo Gómez García
23bbda845c proxmox publications works (but not functional yet) 2020-02-24 01:49:16 +01:00
Adolfo Gómez García
b3c9f07d36 Creating proxmox connector (not working right now, started from ovirt as template) 2020-02-23 17:56:28 +01:00
Adolfo Gómez García
a86cbe46d6 Fixed default copy* info && renamed "test" class to "Test" as it should be 2020-02-21 10:46:09 +01:00
Adolfo Gómez García
8e73d38ea3 fixed unamanged windows actor reference 2020-02-20 12:02:16 +01:00
Adolfo Gómez García
841d088f6a added support for actor for static machine pool of ips 2020-02-20 11:59:10 +01:00
Adolfo Gómez García
f33987e62e Updated translations 2020-02-20 11:38:57 +01:00
Adolfo Gómez García
273e394937 Added small delay on login failure on web 2020-02-20 01:55:54 +01:00
Adolfo Gómez García
1df17f99ec Updated gui 2020-02-20 01:48:57 +01:00
Adolfo Gómez García
8a090049c7 upgraded web user ui 2020-02-19 15:32:58 +01:00
Adolfo Gómez García
2b912b035d * Added, as fallback "hostnamectl set-hostname" for actor renamers for linux
* Upgraded OpenNebula service to better check hostname
* added versatile hostname validator for hostnames
* Fixed sample settings.py
2020-02-19 15:30:35 +01:00
Adolfo Gómez García
34d47bdda9 added unamanaged actor for Linux 2020-02-19 12:06:21 +01:00
Adolfo Gómez García
06b0e86a39 updated admin 2020-02-18 18:54:50 +01:00
Adolfo Gómez García
c7c685865e fixed pools performance report typo error 2020-02-18 18:17:21 +01:00
Adolfo Gómez García
9bdaf4eab1 upgraded user interface to angular 9 2020-02-18 17:40:56 +01:00
Adolfo Gómez García
0282086065 Fixed client logou due to idle log 2020-02-18 17:40:34 +01:00
Adolfo Gómez García
5e7502f221 Added "idle" info on logout for actor 2020-02-18 14:54:53 +01:00
Adolfo Gómez García
ffeabe15ee fixed unmanaged 2020-02-18 14:32:21 +01:00
Adolfo Gómez García
3bc08d6b86 Updated crypto manager to use cryptography instead of pyCrypto 2020-02-18 01:46:24 +01:00
Adolfo Gómez García
2b4a0113a2 Fixing actor for unmanaged 2020-02-17 13:07:33 +01:00
Adolfo Gómez García
ac0be2f4aa Fixing linux for unmanaged hosts 2020-02-17 12:51:43 +01:00
Adolfo Gómez García
e13c8a93b3 Fixed makefile 2020-02-17 12:01:48 +01:00
Adolfo Gómez García
d33e5e3a1e Unmanaged for Linux 2020-02-13 09:49:30 +01:00
Adolfo Gómez García
8b991eae12 updated windowsos manager to include unmanaged actor 2020-02-11 18:56:50 +01:00
Adolfo Gómez
d11ffbd401 Updated rest to check own_token 2020-02-11 15:01:27 +01:00
Adolfo Gómez
903ccf2e0a fixed service login/logout 2020-02-11 14:43:10 +01:00
Adolfo Gómez García
b0d4be83a4 added actor configuration for unmanaged actors 2020-02-10 13:07:42 +01:00
Adolfo Gómez
efe7bb2a53 adapting actor to support unmanaged hosts 2020-02-10 12:01:38 +01:00
Adolfo Gómez García
56376ecd56 Updating v3 actor so we can honor service tokens for some kind of actions 2020-02-08 20:35:43 +01:00
Adolfo Gómez García
4ecb520496 fixed max length on text fields 2020-02-07 12:49:15 +01:00
Adolfo Gómez García
5b8e346788 added "log" method to userservice model 2020-02-06 21:43:46 +01:00
Adolfo Gómez García
211b227105 fixing actor & actor methods 2020-02-06 18:01:33 +01:00
Adolfo Gómez García
ac03d142d9 Updated OS Manager base methods "loggedIn" and "loggedOut" to be status, so they can be more usable, and finished v3 "notify" method 2020-02-06 09:30:10 +01:00
Adolfo Gómez García
8549f3cfa8 fixed issue whith transport allowing add of service pools that do not supports the transport protocol from transport add/edit 2020-02-05 10:46:36 +01:00
Adolfo Gómez García
cef382a1df Added actor tokens 2020-02-03 14:03:24 +01:00
Adolfo Gómez García
f47b208c33 added custom message per-pool for calendar access denied 2020-01-31 13:16:23 +01:00
Adolfo Gómez García
63824cdeee updated translations & basic fix 2020-01-31 12:17:55 +01:00
Adolfo Gómez García
907402229e updated translations & basic fix 2020-01-31 12:16:21 +01:00
Adolfo Gómez García
929903342f added "Experimental" to proxies title so it can be identified 2020-01-29 15:03:26 +01:00
Adolfo Gómez
f9b284ff8e fixed actor_client 2020-01-29 14:36:39 +01:00
Adolfo Gómez
138f97e317 Changed default from debug to info on uds actor 2020-01-29 14:33:11 +01:00
Adolfo Gómez García
6385e24e18 Fixed ticket related stuff & REST login with root user 2020-01-29 14:32:25 +01:00
Adolfo Gómez
dcc87b5f8c Merge branch 'master' of https://github.com/dkmstr/openuds 2020-01-28 16:06:24 +01:00
Adolfo Gómez García
08c15b6f60 fixed literal 2020-01-28 16:05:37 +01:00
Adolfo Gómez García
3fafef3b41 fix actor config 2020-01-28 16:03:49 +01:00
Adolfo Gómez García
49f76a5def fixed auth for REST api 2020-01-28 15:56:11 +01:00
Adolfo Gómez García
501ed22ae6 fixed login/logout for easier use 2020-01-28 13:48:26 +01:00
Adolfo Gómez
de827f6bd5 Update log.py
Fixed typo on var typing
2020-01-28 13:20:10 +01:00
Adolfo Gómez García
820ba906f0 Fixing tickets for v3 actors && changing path for "join" registry key for join domain on 2 steps 2020-01-28 13:05:50 +01:00
Adolfo Gómez García
9fd3ac280b fixed client early client hostname notify 2020-01-27 14:59:27 +01:00
Adolfo Gómez García
9b2dd802d7 fixed uds actor parameters 2020-01-27 14:01:53 +01:00
Adolfo Gómez García
1518cc0294 fixed udsactor pre command parameters 2020-01-27 13:33:00 +01:00
Adolfo Gómez García
d8826c2841 fixed admin visualization error of user service state 2020-01-27 13:17:42 +01:00
Adolfo Gómez García
8678fa8f79 fixing service 2020-01-23 14:42:13 +01:00
Adolfo Gómez García
5229caead5 Fixed Thin Version of UDS Client 2020-01-22 15:38:45 +01:00
Adolfo Gómez García
142f7122fc Fixed so now UDSClient can run with python 2 or python 3 2020-01-22 14:41:09 +01:00
Adolfo Gómez García
26e429019e fixing actor on exit 2020-01-20 17:42:33 +01:00
Adolfo Gómez García
dcf9e0137a fixing actor on exit 2020-01-20 17:38:01 +01:00
Adolfo Gómez García
525fa6e71c fixing actor on exit 2020-01-20 17:33:10 +01:00
Adolfo Gómez García
45429027bf fixes for service 2020-01-20 17:18:48 +01:00
Adolfo Gómez García
7cc6c6d3b8 fixed timeout on actor (too high) 2020-01-20 16:55:06 +01:00
Adolfo Gómez García
b3324eec91 Removed a couple of "DEBUG" and fixed remote logging
"
2020-01-20 14:13:11 +01:00
Adolfo Gómez García
099c0d9861 Fixed calendar actions typo & added calencat action "ignore unused" 2020-01-16 11:54:02 +01:00
Adolfo Gómez García
f888d1da61 Improvements
* Added taskmanager foreground exec method
* catch checkState exceptions (not expected anyway) and mark pubs as errored
2020-01-09 11:10:10 +01:00
Adolfo Gómez García
69c4fd6325 Fixed actor for linux 2020-01-08 14:38:19 +01:00
Adolfo Gómez García
a4353dde86 Fixed login url 2019-12-26 12:52:51 +01:00
Adolfo Gómez García
ddc2699774 Fixed oVirt jobs & aasigned an unused worker 2019-12-26 11:54:55 +01:00
Adolfo Gómez García
8cded2bca7 fixing upg 2019-12-26 10:08:32 +01:00
Adolfo Gómez García
fb3808991d Importing and upgrading packages generation for linux actors 2019-12-26 09:58:17 +01:00
Adolfo Gómez García
c2da7211c3 renamed actors to legacy_actors for. Will be removed on next release 2019-12-26 09:40:30 +01:00
Adolfo Gómez García
8e76c1d733 fixed ticket_store cleanup times 2019-12-23 13:20:34 +01:00
Adolfo Gómez García
c8839ed2a5 fixes for 3.0 2019-12-23 12:31:36 +01:00
Adolfo Gómez García
52208d18ae Fixed about 2019-12-23 11:22:13 +01:00
Adolfo Gómez García
a66a14a63e fix small error for django 3.0 2019-12-23 10:49:26 +01:00
Adolfo Gómez García
7801cf85c0 Fixed opennebula mac retrieval (moved to a later stage, just after "power on" vm) 2019-12-20 16:18:35 +01:00
Adolfo Gómez
7bfa539e70 fixed for windows & rest client api 2019-12-19 13:32:09 +01:00
Adolfo Gómez García
cf40396211 Merge branch 'master' of github.com:dkmstr/openuds 2019-12-19 13:06:25 +01:00
Adolfo Gómez García
faa7c37336 fixed actor config opening on "advanced" tab 2019-12-19 13:06:06 +01:00
Adolfo Gómez
4d2f7c1b95 fixed default loglevel to error 2019-12-19 13:04:55 +01:00
Adolfo Gómez García
7483a6f04f Added test configuration for uds actor & fixed some texts 2019-12-19 12:54:30 +01:00
Adolfo Gómez García
3e905381ff Added "test" method for actor v3 2019-12-19 12:54:08 +01:00
Adolfo Gómez
9150e71840 Fixed deadline & idle check 2019-12-18 08:36:31 +01:00
Adolfo Gómez
33d2dbbc52 Merge branch 'master' of https://github.com/dkmstr/openuds 2019-12-17 12:35:28 +01:00
Adolfo Gómez
fcb252deae added icon for windows apps 2019-12-17 12:35:21 +01:00
Adolfo Gómez García
93b1e71440 client execute bit 2019-12-17 12:29:52 +01:00
Adolfo Gómez
293cb129ed Fixing actor issues 2019-12-17 12:26:55 +01:00
Adolfo Gómez García
65d4b0b409 merged from windows 2019-12-17 06:23:38 +01:00
Adolfo Gómez García
12f39853e4 upgraded angular user gui version 2019-12-17 06:20:08 +01:00
Adolfo Gómez García
fb297d05c3 fixed admin issues 2019-12-17 06:19:16 +01:00
Adolfo Gómez García
97e84c968a added idle checking 2019-12-16 12:27:00 +01:00
Adolfo Gómez
0ac3fa1987 fixing client for windows 2019-12-12 15:36:34 +01:00
Adolfo Gómez García
633671d12c fixing message 2019-12-12 10:01:35 +01:00
Adolfo Gómez García
1ed4c1ad57 added support for message to actor 2019-12-12 08:35:02 +01:00
Adolfo Gómez García
2509f41c85 advancing on actor 2019-12-11 13:05:10 +01:00
Adolfo Gómez García
91272fcbb8 Refactoring comms part of user service manager and adding screenshot request capability 2019-12-10 21:17:46 +01:00
Adolfo Gómez García
0895d2feaf Added screenshot capability 2019-12-10 20:20:43 +01:00
Adolfo Gómez García
ff5601ce12 Client is advancing 2019-12-10 12:31:58 +01:00
Adolfo Gómez García
b78a41f0d3 uds actor advance 2019-12-05 09:40:06 +01:00
Adolfo Gómez García
6402106d85 Fixed windows getIdle 2019-12-04 14:59:46 +01:00
Adolfo Gómez García
3ed5d26245 advancing 2019-12-04 14:10:26 +01:00
Adolfo Gómez
72efa3221f fixing uds actor service for windows 2019-12-03 17:43:19 +01:00
Adolfo Gómez García
aabb08cad4 * Updated admin
* Updated actor
2019-12-03 15:22:45 +01:00
Adolfo Gómez García
78953ef5d9 Advanced a lot on actor 2019-12-03 10:36:23 +01:00
Adolfo Gómez García
a6cb350454 Implementing new IPC mechanics 2019-12-02 14:38:51 +01:00
Adolfo Gómez García
20bceadda9 fixed Admin interface 2019-12-01 20:46:19 +01:00
Adolfo Gómez García
4231eb5b9d Now actor start to work. A lot of work ahead, but first part seems fine :) 2019-12-01 20:26:20 +01:00
Adolfo Gómez García
d53d092483 Advanced on v2 api for actor 3.0 2019-12-01 13:32:17 +01:00
Adolfo Gómez García
371cc3d14b fixes 2019-11-30 22:41:57 +01:00
Adolfo Gómez García
8052809e86 Fixed typo 2019-11-30 22:37:12 +01:00
Adolfo Gómez García
ced7226f81 advancing on new v3 actor 2019-11-30 22:34:05 +01:00
Adolfo Gómez García
a8b94325e5 Fixed mistake (using owntoken as secret, and we should not... 2019-11-29 09:34:06 +01:00
Adolfo Gómez García
79f61098af Advancing on actor 2019-11-29 09:14:49 +01:00
Adolfo Gómez García
e5b4fb393f Actor v3 2019-11-29 02:23:56 +01:00
Adolfo Gómez García
6f3f573f61 Advancing on actor 2019-11-28 14:11:55 +01:00
Adolfo Gómez García
cf6a03b585 updating linux actor 2019-11-28 11:05:42 +01:00
Adolfo Gómez García
4cdbe5abae udsactor/linux/renamer/common.py 2019-11-28 11:04:08 +01:00
Adolfo Gómez
2c8963ba5f Updating new UDS Actor 2019-11-27 14:00:43 +01:00
Adolfo Gómez García
e76df6349d Advancing on new UDS Actor 2019-11-27 12:09:50 +01:00
Adolfo Gómez
282816b4eb Advancing on new UDS actor 2019-11-26 15:13:07 +01:00
Adolfo Gómez García
e967d994b1 Advancing on new v2 actor 2019-11-26 11:44:58 +01:00
Adolfo Gómez García
45b827e9e9 fixed admin issue on osmanagers for service pools 2019-11-22 13:56:09 +01:00
Adolfo Gómez
9e66503f0e Update rest.py 2019-11-22 13:53:39 +01:00
Adolfo Gómez García
52335b6e31 Added computername to actortoken db 2019-11-22 11:01:41 +01:00
Adolfo Gómez
d6691a4098 Fixing Config parameters 2019-11-22 10:56:05 +01:00
Adolfo Gómez García
bef9776a6b Updated udsacotr config tool 2019-11-22 09:36:16 +01:00
Adolfo Gómez
07d337364d Actor work 2019-11-22 08:43:25 +01:00
Adolfo Gómez García
2cf869150f advancing on new actor 2019-11-21 14:00:28 +01:00
Adolfo Gómez García
4df7c18ddc Updating new actor configuration tool 2019-11-21 12:34:02 +01:00
Adolfo Gómez García
09000f8b00 advancing on actor 2019-11-21 00:59:14 +01:00
Adolfo Gómez García
f517f73a0b working on new actor 2019-11-20 13:29:12 +01:00
Adolfo Gómez
04d204883b Setting up new actor based ofc on old one 2019-11-20 09:23:35 +01:00
Adolfo Gómez
37229e92e7 Initializing new uds actor 2019-11-20 02:11:28 +01:00
Adolfo Gómez García
c7dc116980 new experimental actor 2019-11-20 01:57:41 +01:00
Adolfo Gómez García
ede5d4b790 Ported to python >= 3.7 (needs already fixes, but most work done!! :) 2019-11-19 13:59:23 +01:00
Adolfo Gómez García
4a5669bdef cleaning for 3.0 2019-11-19 11:18:10 +01:00
Adolfo Gómez García
ef7bbebec8 cleaning for 3.0 2019-11-19 11:16:32 +01:00
Adolfo Gómez García
7e034a9de1 Fixed Xen 2019-11-18 14:50:15 +01:00
Adolfo Gómez García
8d680ad32d Renaming Xen provider 2019-11-18 09:53:31 +01:00
Adolfo Gómez García
76c47f7c76 fixes for ovirt & opennebula 2019-11-18 07:53:09 +01:00
Adolfo Gómez García
03e31f31b1 Fixes 2019-11-15 13:24:22 +01:00
Adolfo Gómez García
d67a1cd70c Merge branch 'master' of github.com:dkmstr/openuds 2019-11-14 13:18:36 +01:00
Adolfo Gómez García
dc381565cf Fixes for providers 2019-11-14 13:18:26 +01:00
Adolfo Gómez
dc0511045b Update README.md 2019-11-14 10:32:14 +01:00
Adolfo Gómez
b78bcbd726 Update README.md 2019-11-14 10:30:24 +01:00
Adolfo Gómez García
6038f93189 Fixing up services 2019-11-14 09:27:26 +01:00
Adolfo Gómez García
ee42653cea fixed edit fields 2019-11-13 13:56:06 +01:00
Adolfo Gómez García
eb2ad9da19 Adding "manual assignements" for UDS 2019-11-11 13:27:33 +01:00
Adolfo Gómez García
928360444b Fixes 2019-11-11 10:01:27 +01:00
Adolfo Gómez García
5d26833779 updating ip machine access 2019-11-11 09:11:23 +01:00
Adolfo Gómez García
d00057a03d Fixed oVirt and OpenStack for 3.x 2019-11-11 08:42:31 +01:00
Adolfo Gómez García
6da8d2057e Upgraded OpenStack 2019-11-08 12:13:24 +01:00
Adolfo Gómez García
103ad93cdf Upgrade OpenNebula 2019-11-08 11:29:12 +01:00
Adolfo Gómez García
ce91840622 upgrading OpenNebula connector 2019-11-07 14:42:18 +01:00
Adolfo Gómez García
99fe68608c Fixed OpenGnsys Provider 2019-11-06 13:01:29 +01:00
Adolfo Gómez García
2dc1634004 small fixes on tasks 2019-11-06 11:40:52 +01:00
Adolfo Gómez García
9cb9fc6de1 Added "delayed cancel" for some kind of services that are specially difficult to "cancel" while running... 2019-11-04 12:40:42 +01:00
Adolfo Gómez García
19754f7ed7 Fixed small admin glich 2019-10-28 07:34:34 +01:00
Adolfo Gómez García
6706866174 Upgraded admin interface 2019-10-25 10:55:36 +02:00
Adolfo Gómez García
ba40b38998 Updated serialize/deserialize 2019-10-24 14:37:20 +02:00
Adolfo Gómez García
4e647c1d7a Fixed GroupsManager import position 2019-10-23 12:51:55 +02:00
Adolfo Gómez García
b02e8e1f30 fixed allowCacheDecorator to take kwargs also into account 2019-10-23 12:02:41 +02:00
Adolfo Gómez García
7aee4efb15 * Added snackbar with progress info on new/edit, so if loading of for example, provider information, is slow, the user knows that "something is going on
* Small type check for user interface
2019-10-20 12:29:07 +02:00
Adolfo Gómez García
4c9ad55d99 Added types to providers & transports
fixed allowCache generic decorator
2019-10-17 13:19:19 +02:00
Adolfo Gómez García
a2dd2cccc9 added sqlite file to ignores 2019-10-16 13:25:04 +02:00
Adolfo Gómez García
de5411d153 Updated frontend & admin guis 2019-10-14 13:47:06 +02:00
Adolfo Gómez García
d916d9ea1f fixed delayed task typo 2019-10-14 13:24:19 +02:00
Adolfo Gómez
015cde5301 Merge pull request #46 from glyptodon/dead-keys
Leverage Guacamole.InputSink for dead key support.
2019-10-14 09:18:50 +02:00
Adolfo Gómez García
3f88884a82 Fixed log recovery for user services
Fixed taskManager stop & start identify
2019-10-14 09:07:02 +02:00
Michael Jumper
fea0f6aa34 Leverage Guacamole.InputSink for dead key support.
The Guacamole.InputSink object was added to guacamole-common-js as part
of the 1.0.0 release of Apache Guacamole, allowing composed key events
to be handled with Guacamole.Keyboard as any other keys would:

http://guacamole.apache.org/releases/1.0.0/#improved-keyboard-handling--support-for-dead-keys
2019-10-13 19:32:25 -07:00
Adolfo Gómez García
a393e0b5a3 fixed oVirt for 3.7 2019-10-03 15:45:32 +02:00
Adolfo Gómez García
fbff259691 Fixing up OVirt and related 2019-10-03 14:56:18 +02:00
Adolfo Gómez García
8908d1de9d If logging write to file fails, continue without it 2019-10-03 12:23:55 +02:00
Adolfo Gómez García
f53fa4a304 Removed ov user/password sender 2019-10-03 07:53:51 +02:00
Adolfo Gómez García
db2a43afc8 Added ov user/password sender 2019-10-03 07:17:00 +02:00
Adolfo Gómez García
66f498e7ed Added ov user/password sender 2019-10-03 07:11:42 +02:00
Adolfo Gómez García
a32bb87a78 sample provider moved to 3.7 2019-10-02 10:51:43 +02:00
Adolfo Gómez García
d48e71cfd3 fixing up sample service 2019-10-01 14:01:52 +02:00
Adolfo Gómez García
76a17b19df typing on generators 2019-10-01 01:47:10 +02:00
Adolfo Gómez García
c2b2cab228 Updated locales 2019-09-30 11:50:04 +02:00
Adolfo Gómez García
fdb630dc8e updated user inteface 2019-09-30 10:15:17 +02:00
Adolfo Gómez García
5abd8184dc Fixing up things for 3.7. providers part 2019-09-27 13:23:18 +02:00
Adolfo Gómez García
7b4563b359 Fixed publication typo (setstate for setState 2019-09-26 13:13:27 +02:00
Adolfo Gómez García
3c4f026a21 Updating gui versions 2019-09-25 12:17:32 +02:00
Adolfo Gómez García
e11009332e Fixed admin interface 2019-09-25 12:10:58 +02:00
Adolfo Gómez García
a06fc617f0 Fixed "has_key" and other issues 2019-09-24 10:02:05 +02:00
Adolfo Gómez García
917dd33349 updated signatures for scripts 2019-09-23 14:44:39 +02:00
Adolfo Gómez García
bdc6f2efb2 *Fixed x2go for python 3.7
* Removed remaining user preferences
* Small nx typo fix
2019-09-23 12:35:56 +02:00
Adolfo Gómez García
346c3a3d33 Fixed SPICE transport an typo on RDP transport 2019-09-23 11:31:41 +02:00
Adolfo Gómez García
99bfae10ad Small fixes for rdp transport 2019-09-23 08:33:50 +02:00
Adolfo Gómez García
01317df1f7 added ?stamp to javascripts for admin 2019-09-20 13:17:05 +02:00
Adolfo Gómez García
3e51037160 removed "test" from networks 2019-09-20 12:53:50 +02:00
Adolfo Gómez García
ccea5e64d3 checked basename + lenname in every provider that needs it 2019-09-20 12:52:25 +02:00
Adolfo Gómez García
ce5251178b * Fixed errors view
* Removed "downloads" from non staff users
2019-09-20 11:10:15 +02:00
Adolfo Gómez García
7be3838e41 Fixed old data transformation (squashed). To migrate to 3.0 we will need first to go thouth 2.x versions 2019-09-20 10:04:22 +02:00
Adolfo Gómez García
a0ef9c8cbe updated scripts signatures 2019-09-19 12:17:40 +02:00
Adolfo Gómez García
a25d33a615 Fixed RDP for python 3.7 2019-09-19 12:00:36 +02:00
Adolfo Gómez García
b955d0327d Fixed NX Transport for python 3.7 (anyway, this transport is now marked as deprecated) 2019-09-19 11:06:32 +02:00
Adolfo Gómez García
6ae4380cf2 Fixed html5rds for latam keyboard for next guacamole 2019-09-19 08:18:57 +02:00
Adolfo Gómez García
e69497c8cb * A couple of fixes for service pool model & user service model for typing check
* Small fix on linux random pass
* Fixed HTML5RDP for python 3.7 (improved, not failing in fact)
2019-09-18 11:02:46 +02:00
Adolfo Gómez García
c736f82697 small code fixes 2019-09-18 10:12:35 +02:00
Adolfo Gómez García
56367c58f4 Fixed Simple LDAP for python 3.7 2019-09-18 09:57:20 +02:00
Adolfo Gómez García
ebbdbedaf6 Fixed SampleAuth form python 3.7 2019-09-18 09:26:46 +02:00
Adolfo Gómez García
b6391b10a5 Fixed Regex LDAP Auth 2019-09-18 08:38:35 +02:00
Adolfo Gómez García
ce71a2e6e7 fixed regexldap auth for python 3.7 2019-09-17 10:36:10 +02:00
Adolfo Gómez García
69e456822e fixed ip auth for python 3.7 2019-09-17 09:59:48 +02:00
Adolfo Gómez García
0afcdc3bd0 fixed ip auth for python 3.7 2019-09-17 09:58:42 +02:00
Adolfo Gómez García
3850b2e01f fixed internaldb auth for python 3.7 2019-09-17 09:46:40 +02:00
Adolfo Gómez García
265578409e Fixes for authenticators & decorators 2019-09-16 12:08:41 +02:00
Adolfo Gómez García
bde6ac422b fixed REST user_services for python 3.x 2019-09-13 11:00:29 +02:00
Adolfo Gómez García
4a8a2d05ee fixed REST transports for python 3.x 2019-09-13 10:24:25 +02:00
Adolfo Gómez García
85ef989a4c fixed REST system & tickets for python 3.x 2019-09-13 10:20:23 +02:00
Adolfo Gómez García
2d05062241 *fixed providers, services, .. for REST API
fixed admin 1 item menus
2019-09-13 09:24:43 +02:00
Adolfo Gómez García
f43a8a3bf4 Fixed REST services_pools for python 3.x 2019-09-12 13:38:43 +02:00
Adolfo Gómez García
7f9b4c9274 Fixed REST services_pool_groups for python 3.x 2019-09-12 13:11:06 +02:00
Adolfo Gómez García
061ac326df fixed handler "admin check" and reports from REST 2019-09-12 13:01:51 +02:00
Adolfo Gómez García
899df5a6a6 fixing up REST exceptions: notSupported 2019-09-12 12:47:23 +02:00
Adolfo Gómez García
29cb8b6a39 fixing up REST exceptions: invalidItemException 2019-09-12 12:45:30 +02:00
Adolfo Gómez García
18826708c8 fixing up REST exceptions: invalidMethodException 2019-09-12 12:43:49 +02:00
Adolfo Gómez García
726cc33320 fixing up REST exceptions 2019-09-12 12:42:08 +02:00
Adolfo Gómez García
ecdc4fa606 Fixed REST proxies for python 3.x 2019-09-12 12:18:28 +02:00
Adolfo Gómez García
72df9b2275 request middleware improved. Fixed base model types & migrated providers to 3.x python 2019-09-12 12:16:24 +02:00
Adolfo Gómez García
145ab9b865 addad old requests deletion in case of exceptions on server 2019-09-12 10:50:22 +02:00
Adolfo Gómez García
d758aecd1e Fixed REST permissions for python 3.x 2019-09-12 08:36:01 +02:00
Adolfo Gómez García
fd6db8d618 Fixed REST osmanagers for python 3.x 2019-09-11 13:41:56 +02:00
Adolfo Gómez García
6867a278bd Fixed REST calendars operations for python 3.x 2019-09-11 13:36:47 +02:00
Adolfo Gómez García
572e2b9a51 Fixed REST networks for python 3.x 2019-09-11 13:20:27 +02:00
Adolfo Gómez García
ce04b3949d Fixed REST metapools members for python 3.x 2019-09-11 13:18:26 +02:00
Adolfo Gómez García
4cd051f50a mendfixed REST metapools for python 3.x 2019-09-11 12:51:54 +02:00
Adolfo Gómez García
6eccb757ad mendfixed REST login-logout for python 3.x 2019-09-11 12:39:46 +02:00
Adolfo Gómez García
51b16ce895 mendfixed REST images for python 3.x 2019-09-11 12:27:47 +02:00
Adolfo Gómez García
fbcf635a60 mendfixed REST calendars for python 3.x 2019-09-11 11:28:07 +02:00
Adolfo Gómez García
da0df6d407 fixed REST calendars for python 3.x 2019-09-11 11:27:12 +02:00
Adolfo Gómez García
060e2cd023 fixed REST authenticator for python 3.x 2019-09-11 08:42:11 +02:00
Adolfo Gómez García
420e491196 fixing REST for python 3.x 2019-09-11 07:56:04 +02:00
Adolfo Gómez García
fbd2bd937c advancing a lot with REST part 2019-09-09 12:08:48 +02:00
Adolfo Gómez García
79f41b3e1a fixes for python 3.7 on REST 2019-09-05 11:29:57 +02:00
Adolfo Gómez García
f464d78f99 fixed stats reports & related 2019-09-04 11:25:36 +02:00
Adolfo Gómez García
6e7b5229d1 fixed list reports & related 2019-09-04 10:38:56 +02:00
Adolfo Gómez García
446a4a3cb4 fixed duplicate "show transports" on pools edit 2019-09-04 10:03:44 +02:00
Adolfo Gómez García
f5278aa57f fixed remmendeded by tomas lobo 2019-09-03 16:16:22 +02:00
Adolfo Gómez García
83726be209 Removed support for ovirt 3.x on UDS 3.x 2019-09-03 12:43:49 +02:00
Adolfo Gómez García
bada5ed2af fully ported openstack provider to python 3.x 2019-09-03 12:37:11 +02:00
Adolfo Gómez García
75f244be2e fixes on RDP transport 2019-09-03 10:33:48 +02:00
Adolfo Gómez García
a42ccd0ca6 fixes 2019-09-03 10:00:47 +02:00
Adolfo Gómez García
9464e1794e fixed autoattributes on python3 2019-09-02 10:44:29 +02:00
Adolfo Gómez García
c502127aa5 Fixed Base order 2019-09-02 10:22:44 +02:00
Adolfo Gómez García
97e5ff1b6a fixed initialization order for IPMachinesDeployed 2019-09-02 10:17:50 +02:00
Adolfo Gómez García
a69bda8673 updated transports signatures 2019-09-02 09:20:10 +02:00
Adolfo Gómez García
b233e26a52 upgraded os managers and typo fix 2019-08-20 11:04:25 +02:00
Adolfo Gómez García
2b733c0e9e refactorizing & fixing Linux os manager 2019-08-19 12:42:45 +02:00
Adolfo Gómez García
da0a2401f3 refactorizing uds.core.transports and uds.core.util filenames & some fixes 2019-08-19 12:20:33 +02:00
Adolfo Gómez García
22b079cf53 refactorizing uds.core.setransports: lenames & some fixes 2019-08-19 11:51:14 +02:00
Adolfo Gómez García
23834328dd refactorizing uds.core.services filenames & some fixes 2019-08-19 11:46:36 +02:00
Adolfo Gómez García
a8f2dcb03d Refactoring manager filenames -- UserPrefsManager & UserServiceManager 2019-08-16 11:43:57 +02:00
Adolfo Gómez García
80591c541b Refactoring manager filenames -- UserPrefsManager 2019-08-16 11:30:45 +02:00
Adolfo Gómez García
beb09115c2 Refactoring manager filenames & some fixes for python 3.7 conversion 2019-08-16 11:26:48 +02:00
Adolfo Gómez García
9a9eee9d5e refactorizing uds.core.managers filenames & some fixes 2019-08-16 10:40:14 +02:00
Adolfo Gómez García
5ffc66a71e refactorized uds.core.auth filenames 2019-08-16 10:26:34 +02:00
Adolfo Gómez García
104eeac53c Refactorized uds.core.ui and several fixes 2019-08-15 12:11:47 +02:00
Adolfo Gómez García
c980d42b1e refactorized worker filenames 2019-08-15 11:49:39 +02:00
Adolfo Gómez García
909ff33851 refactoryzed cryptoManager access 2019-08-15 11:24:56 +02:00
Adolfo Gómez García
be7d177bdc refactoryzed cryptoManager access 2019-08-15 11:22:20 +02:00
Adolfo Gómez García
6e39c1a2dc refactorized uds.core.jobs 2019-08-15 11:07:10 +02:00
Adolfo Gómez García
d5ac86cfba more fixes an refactoring for 3.7 2019-08-15 10:54:19 +02:00
Adolfo Gómez García
e836a142fe refactoring and updating models for python 3.7 2019-08-14 12:31:13 +02:00
Adolfo Gómez García
1b3e1d9bcc refactoring and updating models for python 3.7 2019-08-14 12:16:49 +02:00
Adolfo Gómez García
882a8ad2c9 fixes for 3.7 (random found ones) 2019-08-14 11:00:21 +02:00
Adolfo Gómez García
171b5f5a48 refactoring and updating models for python 3.7 -- StatsCounters, StatsEvents, Storage, Tag, TicketStore, UniqueId and Removed DeployedService in favor of ServicePool 2019-08-14 10:55:59 +02:00
Adolfo Gómez García
e2d1d17fa9 refactoring and updating models for python 3.7 -- ServicePoolPublication 2019-08-14 09:55:35 +02:00
Adolfo Gómez García
217a51728e renamed ServicesPoolGroup to ServicePoolGroup 2019-08-14 09:52:10 +02:00
Adolfo Gómez García
bec85b5463 renamed DeployedServicePublication to ServicePoolPublication 2019-08-14 09:46:37 +02:00
Adolfo Gómez García
1110a5bd63 renamed DeployedService to ServicePool 2019-08-14 09:25:41 +02:00
Adolfo Gómez García
ffc3d14daf refactoring and updating models for python 3.7 -- ServicesPool 2019-08-14 09:11:15 +02:00
Adolfo Gómez García
c9c4a8f578 refactoring and updating models for python 3.7 -- Service 2019-08-13 12:13:33 +02:00
Adolfo Gómez García
2b06813176 refactoring and updating models for python 3.7 -- Proxy & Scheduler 2019-08-13 11:48:32 +02:00
Adolfo Gómez García
49fd063e90 refactoring and updating models for python 3.7 -- Provider 2019-08-13 11:35:45 +02:00
Adolfo Gómez García
75b470a7d1 refactoring and updating models for python 3.7 -- os_manager & permissions 2019-08-13 11:28:33 +02:00
Adolfo Gómez García
377b4542d7 refactoring and updating models for python 3.7 -- Network & Transport 2019-08-13 11:22:57 +02:00
Adolfo Gómez García
ee34f6c624 refactoring and updating models for python 3.7 -- MetaPool & Log 2019-08-13 11:14:15 +02:00
Adolfo Gómez García
4be27489ad refactoring and updating models for python 3.7 -- Image 2019-08-13 11:10:24 +02:00
Adolfo Gómez García
e3912276f4 refactoring and updating models for python 3.7 -- UserPreference 2019-08-13 11:07:34 +02:00
Adolfo Gómez García
b4a09a4c10 refactoring and updating models for python 3.7 -- ManagedObjectModel 2019-08-13 11:03:42 +02:00
Adolfo Gómez García
77c6857973 refactoring and updating models for python 3.7 -- UUIDModel 2019-08-13 11:01:26 +02:00
Adolfo Gómez García
c13da05baa refactoring and updating models for python 3.7 -- Util, User & Group 2019-08-13 10:43:04 +02:00
Adolfo Gómez García
d108de9720 refactoring and updating models for python 3.6 -- DBFile and delayed_task 2019-08-13 10:09:47 +02:00
Adolfo Gómez García
1ace92083e refactoring for name improvements - config model 2019-08-12 15:04:37 +02:00
Adolfo Gómez García
fb32c8b86a refactoring for name improvements - cache, calendar, calendar_access, calendar_rule models 2019-08-12 15:01:24 +02:00
Adolfo Gómez García
efbca0bf92 refactoring for name improvements - account model 2019-08-12 14:52:58 +02:00
Adolfo Gómez García
1c9ba0738a refactoring for name improvements 2019-08-12 14:50:11 +02:00
Adolfo Gómez García
445c890209 more upgrading models for 3.7 2019-08-12 14:34:56 +02:00
Adolfo Gómez García
1072e1f883 more upgrading models for 3.7 2019-08-12 14:07:38 +02:00
Adolfo Gómez García
1e789132a5 more upgrading models for 3.7 2019-08-12 13:32:29 +02:00
Adolfo Gómez García
a6bf2c4cfc upgrading models for 3.7 2019-08-12 11:20:16 +02:00
Adolfo Gómez García
642009425f more 3.7 fixes 2019-08-09 17:57:16 +02:00
Adolfo Gómez García
a992246203 a lot of more fixes for 3.7 2019-08-09 13:22:50 +02:00
Adolfo Gómez García
52054ae45b fixed workers for 3.7 2019-08-08 13:42:22 +02:00
Adolfo Gómez García
064423413b latests fixes for uds.core.utils for 3.7 2019-08-06 14:44:21 +02:00
Adolfo Gómez García
de24aaab93 More fixes for uds.core.utils for 3.7 2019-08-06 14:08:35 +02:00
Adolfo Gómez García
b55669d910 More fixes for uds.core.utils for 3.7 2019-08-06 13:03:32 +02:00
Adolfo Gómez García
6fac308d80 fixed util.stats & util.states for python 3.7 2019-08-06 11:49:08 +02:00
Adolfo Gómez García
e103fb02d2 fixed user interface 2019-08-05 21:24:06 +02:00
Adolfo Gómez García
72a93e774d no themes on 3.0, just angular and custom deploys 2019-08-05 21:13:16 +02:00
Adolfo Gómez García
e484c31b38 upgrades for 3.7 2019-08-05 21:04:36 +02:00
Adolfo Gómez García
5157dce173 fixed admin 2019-08-05 13:26:54 +02:00
Adolfo Gómez García
cc7fbbf5f1 typo fix 2019-08-05 10:05:38 +02:00
Adolfo Gómez García
4f35ba2cca refactorized reports && more 3.7 upgrades 2019-08-02 13:27:08 +02:00
Adolfo Gómez García
45b2a3b66f BaseReport to 3.7 2019-08-02 12:21:14 +02:00
Adolfo Gómez García
bbb6792961 refactorying some file names 2019-08-02 11:58:45 +02:00
Adolfo Gómez García
3588ea20f4 3.7 advances 2019-08-02 11:49:49 +02:00
Adolfo Gómez García
999a23fb6d Updating to 3.7
refactoring portions
2019-08-02 11:17:28 +02:00
Adolfo Gómez García
47721db3f5 fixes for 3.7 and some improvements 2019-08-01 16:35:05 +02:00
Adolfo Gómez García
5fb7c830b2 fixes for 3.7 2019-07-31 11:41:25 +02:00
Adolfo Gómez García
82ef65a26c fixes for python 3.7 2019-07-29 13:13:49 +02:00
Adolfo Gómez García
a948188187 pep fix 2019-07-25 12:10:07 +02:00
Adolfo Gómez García
54110f5425 Fixed opennebula provider for python 3.7 && updated setting to nonpersistant (moved to end of image clone process) 2019-07-25 11:49:40 +02:00
Adolfo Gómez García
7d66d92f85 Merge branch 'master' of github.com:dkmstr/openuds 2019-07-18 13:03:56 +02:00
Adolfo Gómez García
c8831b1bba fixed cryptomanager 2019-07-18 13:03:47 +02:00
Adolfo Gómez García
c6b9bd4643 small fixes for mypy 2019-07-18 12:28:52 +02:00
Adolfo Gómez García
15f4db636e fixed notifications 2019-07-18 11:11:30 +02:00
Adolfo Gómez
668cd82d9e Merge pull request #45 from shaba/devel
Fix Error 500: Plaintext too large on Tools/Configure page.
2019-07-17 21:02:48 +02:00
dae085dc6a Fix Error 500: Plaintext too large on Tools/Configure page.
ERROR 2019-07-17 17:48:11,302 __init__ dispatch 163 Error processing request
Traceback (most recent call last):
  File "/usr/share/openuds/uds/REST/__init__.py", line 143, in dispatch
    response = operation()
  File "/usr/share/openuds/uds/REST/methods/config.py", line 61, in get
    for cfg in CfgConfig.enumerate():
  File "/usr/share/openuds/uds/core/util/Config.py", line 210, in enumerate
    val = Config.section(cfg.section).valueCrypt(cfg.key)
  File "/usr/share/openuds/uds/core/util/Config.py", line 185, in valueCrypt
    return Config.value(self, key, default, True, **kwargs)
  File "/usr/share/openuds/uds/core/util/Config.py", line 199, in value
    return Config.Value(section, key, default, crypt, longText, **kwargs)
  File "/usr/share/openuds/uds/core/util/Config.py", line 82, in __init__
    self._default = CryptoManager.manager().encrypt(default)
  File "/usr/share/openuds/uds/core/managers/CryptoManager.py", line 98, in encrypt
    return encoders.encode((self._rsa.encrypt(value, b'')[0]), 'base64', asText=True)
  File "/usr/lib64/python3/site-packages/Crypto/PublicKey/RSA.py", line 158, in encrypt
    return pubkey.pubkey.encrypt(self, plaintext, K)
  File "/usr/lib64/python3/site-packages/Crypto/PublicKey/pubkey.py", line 75, in encrypt
    ciphertext=self._encrypt(plaintext, K)
  File "/usr/lib64/python3/site-packages/Crypto/PublicKey/RSA.py", line 233, in _encrypt
    raise ValueError("Plaintext too large")
ValueError: Plaintext too large

Fixes: #44
2019-07-17 20:43:28 +03:00
Adolfo Gómez García
30e041b34b fixed admin & dbgroup info data 2019-07-15 14:37:56 +02:00
Adolfo Gómez García
38d6a7e6c6 removed cleanUDS theme reset 2019-07-15 11:26:20 +02:00
Adolfo Gómez García
e7fb7064e3 fixes for x2go & uds actor on python3 2019-07-11 11:08:46 +02:00
Adolfo Gómez García
45aa2e92ac updated changelog to 3.0 on debian actor 2019-07-10 10:17:22 +02:00
Adolfo Gómez García
7cf4659f5f fixed httpserver python 3.x issue 2019-07-09 13:26:44 +02:00
Adolfo Gómez García
45db8592b7 upgraded amin 2019-07-08 10:15:44 +02:00
Adolfo Gómez
e9f03f2075 Update client-ui.js
Changed connectionName
2019-07-04 13:18:19 +02:00
Adolfo Gómez García
59f0b1c572 upgrade frontend to angular 8 2019-06-29 18:11:41 +02:00
Adolfo Gómez García
bae405d082 fixes 2019-06-29 17:24:53 +02:00
Adolfo Gómez García
e76695e583 fixed versions 2019-06-17 12:01:35 +02:00
Adolfo Gómez García
1e74c55d2b more fixes 2019-06-14 17:44:20 +02:00
Adolfo Gómez García
70ec9ab3ea more typing checking 2019-06-14 14:08:36 +02:00
Adolfo Gómez García
a5929a0af3 adding type checking to better control source 2019-06-13 08:28:54 +02:00
Adolfo Gómez García
f343368da9 Merge remote-tracking branch 'origin/v2.2' 2019-06-11 05:35:27 +02:00
Adolfo Gómez García
7dd57cd778 Merge branch 'master' of github.com:dkmstr/openuds 2019-06-11 05:33:33 +02:00
Adolfo Gómez García
6309047a34 fixes for python 3.x 2019-06-11 05:33:25 +02:00
Adolfo Gómez
1b3ff5661b Merge pull request #41 from Jarli01/patch-1
Chore: Verbiage updates - translation corrections, typos and capitali…
2019-06-10 23:41:35 +02:00
Adolfo Gómez
8f0da29a99 Merge pull request #42 from Jarli01/patch-2
Chore: Typos, capitalization and thought clarification
2019-06-10 23:40:48 +02:00
Dustin B
bdc92052ae Chore: Typos, capitalization and thought clarification
Updated the translations a bit as some of this didn't really work in English, fixed a few typos and capitalization issues.
2019-06-10 17:07:09 -04:00
Dustin B
1df42462fd Chore: Verbiage updates - translation corrections, typos and capitalization
Fixed a few types, attempted to clarify your thought at the time and fixed some capitalization issues.
2019-06-10 17:03:38 -04:00
Adolfo Gómez García
0b97c15ca8 fixes for python 3.x 2019-06-10 14:43:03 +02:00
Adolfo Gómez García
feeeaed1a9 fixes for python 3.x 2019-06-10 11:23:38 +02:00
Adolfo Gómez García
ccdedb9126 fixes for python 3.x 2019-06-10 08:40:37 +02:00
Adolfo Gómez García
64ddba25f4 continues fixes for python 3.x and removal of 2.7 stuff 2019-06-06 10:41:26 +02:00
Adolfo Gómez García
36794ec5cf fixes for python 3.x and removal of 2.7 stuff 2019-06-06 08:38:11 +02:00
Adolfo Gómez García
89515dce33 more 3.7 fixes 2019-06-05 09:29:31 +02:00
Adolfo Gómez García
613f4efd31 fixes for python3 & type hinting 2019-06-05 08:14:45 +02:00
Adolfo Gómez García
2baac2f532 Added "extra module" for getting extra groups on ldap. Fix passing "self" 2019-05-29 05:16:27 +02:00
Adolfo Gómez García
37ae7af508 Added "extra module" for getting extra groups on ldap 2019-05-29 05:15:44 +02:00
Adolfo Gómez García
d068bcef60 fixed os_state on backend 2019-05-21 15:36:35 +02:00
Adolfo Gómez García
7540ca977f Fixed passwd 2019-05-20 10:57:49 +02:00
Adolfo Gómez García
a3bbd00531 Merge branch 'master' of github.com:dkmstr/openuds 2019-05-16 08:36:23 +02:00
Adolfo Gómez García
6ab3bad34b Some cleanups on unused stuff 2019-05-16 08:35:41 +02:00
Adolfo Gómez
bb6f21248b Update TODO.txt 2019-05-14 14:16:03 +02:00
Adolfo Gómez
39a75bfcc0 Update README.md 2019-05-14 14:15:33 +02:00
Adolfo Gómez García
20ff8cafdc Restrained mode now do not allows new machines to be created even on
user demand
2019-05-14 11:54:06 +02:00
Adolfo Gómez García
41b849c1f5 Merge remote-tracking branch 'origin/v2.2' 2019-05-14 08:34:32 +02:00
Adolfo Gómez García
4c001b044f security for PAM 2019-05-14 08:33:58 +02:00
Adolfo Gómez García
a9b4798155 added security extra to pam 2019-05-14 08:31:08 +02:00
Adolfo Gómez García
7c92d8ad5c restricted PAM to only 1 "id" on params 2019-05-14 08:22:11 +02:00
Adolfo Gómez García
8a7ceb926d imported pam_http fix 2019-05-13 17:19:44 +02:00
Adolfo Gómez García
70141ae972 fixing up pam_http 2019-05-13 17:11:12 +02:00
Adolfo Gómez García
20ead2954b fixing up pam_http 2019-05-13 16:56:19 +02:00
Adolfo Gómez García
8331c886de Set "tbr" to none always. It's a non useful parameter 2019-05-10 10:10:36 +02:00
Adolfo Gómez García
14da66291e Merge remote-tracking branch 'origin/v2.2' 2019-05-10 10:01:47 +02:00
Adolfo Gómez García
3415cb8604 fixing up things 2019-05-10 10:01:34 +02:00
Adolfo Gómez García
66c217a988 Backport of random fixes 2019-05-10 09:56:07 +02:00
Adolfo Gómez García
d6935d0210 fixed cache 2 -> 1 2019-05-08 11:34:55 +02:00
Adolfo Gómez García
a1866fb56c added RDP keyboards 2019-05-07 09:31:07 +02:00
Adolfo Gómez García
c47501e3e6 Fixed guacamole audio & video 2019-05-06 21:38:32 +02:00
Adolfo Gómez
a18f85b4f1 Merge pull request #39 from glyptodon/correct-av-mimetypes
Use Guacamole.AudioPlayer and Guacamole.VideoPlayer to query the audio/video mimetypes supported by the Apache Guacamole client.
2019-05-06 21:33:20 +02:00
Michael Jumper
9a816edcc0 Use Guacamole.AudioPlayer and Guacamole.VideoPlayer to query the audio/video mimetypes supported by the Apache Guacamole client. 2019-05-06 12:10:47 -07:00
Adolfo Gómez García
3568f43fc8 added "launcher" for ticketing auth 2019-05-06 10:49:46 +02:00
Adolfo Gómez García
3b05a06336 fixed missing include 2019-05-03 11:58:01 +02:00
Adolfo Gómez García
dfa6fe04cc Updated request middelware to work with nginx 2019-04-30 12:44:00 +02:00
Adolfo Gómez García
111660b396 Improves security of random strings 2019-04-29 13:59:52 +02:00
Adolfo Gómez García
c517e746da Fixed NX Transport for new mechanics 2019-04-29 08:28:51 +02:00
Adolfo Gómez García
68f63a02f3 updated transport signatures 2019-04-24 09:35:18 +02:00
Adolfo Gómez García
4dc4c27925 fixed RDP transport for 3.0 2019-04-24 09:31:58 +02:00
Adolfo Gómez García
363d247c8b Fixed tunnel rdp for 3.0 2019-04-23 15:11:41 +02:00
Adolfo Gómez García
842595be95 clientfix 2019-04-23 14:39:06 +02:00
Adolfo Gómez García
b248a284bb clientfix 2019-04-23 14:07:43 +02:00
Adolfo Gómez García
31d2775f4d clientfix 2019-04-23 14:05:09 +02:00
Adolfo Gómez García
bb84b64eb2 clientfix 2019-04-23 14:01:36 +02:00
Adolfo Gómez García
a7116b9e2e fixes 2019-04-23 13:44:37 +02:00
Adolfo Gómez García
2b9d625b5d testing client 2019-04-23 08:00:37 +02:00
Adolfo Gómez García
d16cc757af testing client 2019-04-23 07:45:23 +02:00
Adolfo Gómez García
1a43ce16e4 testing client 2019-04-23 07:43:55 +02:00
Adolfo Gómez García
deff947b03 Several
upgraded uds client projects
fixed admin js
rdp transport work
2019-04-23 07:28:29 +02:00
Adolfo Gómez García
436fe43098 fixes from 2.2 2019-04-15 11:51:11 +02:00
Adolfo Gómez García
7a2bd7dcf5 actor fix 2019-04-15 11:49:12 +02:00
Adolfo Gómez García
3caa49705e * update of cryptomanager Xor
* Fix config command
2019-04-10 08:17:52 +02:00
Adolfo Gómez García
6ab3fd5559 fixes for translations 2019-04-04 11:30:34 +02:00
Adolfo Gómez García
d6d6a4b44b fix 2019-04-04 11:11:10 +02:00
Adolfo Gómez García
b1a8d9b84c fixed translations 2019-04-04 11:09:57 +02:00
Adolfo Gómez García
272588f306 upgraded frontend 2019-04-04 10:32:35 +02:00
Adolfo Gómez García
87e7f1ca3c fixed double removal check 2019-04-03 21:50:00 +02:00
Adolfo Gómez García
d655b0f41a Added controls on how UDS works with domain controllers for machin/group accounts 2019-04-03 08:16:55 +02:00
Adolfo Gómez García
5422dcf78d Fixed 404 & 500 templates for new
* Try ssl before non ssl on domain os manager connections
2019-04-02 23:23:12 +02:00
Adolfo Gómez García
09eb130b11 fix commnet 2019-04-02 10:43:43 +02:00
Adolfo Gómez García
952322556c removed nonused tool 2019-04-02 07:49:27 +02:00
Adolfo Gómez García
194e232252 removed nonused tool 2019-04-02 07:48:55 +02:00
Adolfo Gómez García
9fee4adcc2 Merge remote-tracking branch 'origin/v2.2' 2019-03-28 12:22:15 +01:00
Adolfo Gómez García
ea11a25c52 Final fix 2019-03-28 12:17:27 +01:00
Adolfo Gómez García
f79f659711 Added so if ipc is closed, and logout is sent (if already logged in ofc) 2019-03-28 11:58:28 +01:00
Adolfo Gómez García
9130a12e52 Merge remote-tracking branch 'origin/v2.2' 2019-03-22 10:36:52 +01:00
Adolfo Gómez García
fddc69e0ea Fixed UDS actor postins 2019-03-22 10:36:35 +01:00
Adolfo Gómez García
30c445bef0 fixes 2019-03-22 10:36:07 +01:00
Adolfo Gómez García
47d234e1c5 small fixex 2019-03-15 13:20:48 +01:00
Adolfo Gómez García
83290f0a29 Merge remote-tracking branch 'origin/v2.2' 2019-03-08 10:34:19 +01:00
Adolfo Gómez García
b795260e4d Fixed access from MAC 2019-03-06 10:08:04 +01:00
Adolfo Gómez García
ea6d68ee93 fixes 2019-03-01 12:57:40 +01:00
Adolfo Gómez García
3fdb089b48 Re-added simple ldap 2019-02-27 11:13:33 +01:00
Adolfo Gómez García
ebf794cb67 Merge remote-tracking branch 'origin/v2.2' 2019-02-27 07:37:16 +01:00
Adolfo Gómez García
45bf24ecdd added check user on vm access, to avoid concurrency problems 2019-02-27 07:37:13 +01:00
Adolfo Gómez García
66464df043 small fix. Now checks the ownership of a machine before letting an user access it 2019-02-26 16:50:12 +01:00
Adolfo Gómez García
5d4e05309a re-added simple ldap 2019-02-26 12:54:16 +01:00
Adolfo Gómez García
a288dd4df3 Removed optimizes (nonsense with innodb) 2019-02-26 12:27:41 +01:00
Adolfo Gómez García
6156f2c6f6 Fix 2019-02-25 10:08:37 +01:00
Adolfo Gómez García
27a29d92e0 Several improvements
* Improved database saving model
* Code cleanup improvement :)
2019-02-24 12:15:12 +01:00
Adolfo Gómez García
6a7d10bf1d Merge remote-tracking branch 'origin/v2.2' 2019-02-24 11:49:14 +01:00
Adolfo Gómez García
6ec73b336d fixes 2019-02-24 11:48:38 +01:00
Adolfo Gómez García
b1f3407299 Fixes 2019-02-24 11:47:50 +01:00
Adolfo Gómez García
2b653b8b05 upgrades 2019-02-24 11:30:44 +01:00
Adolfo Gómez García
cd7beac87e Fixes 2019-02-24 11:24:54 +01:00
Adolfo Gómez García
6d50f99ad6 pydev 2019-02-24 11:01:16 +01:00
Adolfo Gómez García
f4f297a1e4 Merge remote-tracking branch 'origin/v2.2' 2019-02-24 11:00:43 +01:00
Adolfo Gómez García
dbee05d1bc More fixes 2019-02-24 10:59:47 +01:00
Adolfo Gómez García
cbfa9516bf Merge remote-tracking branch 'origin/v2.2' 2019-02-24 10:52:52 +01:00
Adolfo Gómez García
7910327a8a Removed non used deployed service method "assignTouser" 2019-02-24 10:51:12 +01:00
Adolfo Gómez García
9f01f2c368 Fix 2019-02-24 10:40:02 +01:00
Adolfo Gómez García
9e26580af5 Fixed several concurrency issues (very rare, btw, but possible :) ) 2019-02-24 10:16:50 +01:00
Adolfo Gómez García
f5abeb0a94 merged 2019-02-22 16:46:30 +01:00
Adolfo Gómez García
689b20ce2f A few more fixes for concurrency 2019-02-22 16:29:22 +01:00
Adolfo Gómez García
bac0b9755e Improved concurrency check on cache assignation 2019-02-22 15:37:42 +01:00
Adolfo Gómez García
33d2ca4ece Improved concurrency 2019-02-22 15:23:40 +01:00
Adolfo Gómez García
4e0c3b0c5d Updates 2019-02-21 14:52:44 +01:00
Adolfo Gómez García
d4aa2cc8e8 Upgraded web components 2019-02-20 07:45:29 +01:00
Adolfo Gómez García
c7c1103ed1 Fixed installed apps 2019-02-19 12:10:47 +01:00
Adolfo Gómez García
083b1f21fd Fixed Xen to work correctly with 3.7 2019-02-14 11:36:50 +01:00
Adolfo Gómez García
d7ac1f590a Updated to compatibility to python 3.7 (sync is a reserveed word) 2019-02-13 17:07:30 +01:00
Adolfo Gómez García
d523ae6001 upgrading environment 2019-02-12 11:26:04 +01:00
Adolfo Gómez García
581b13e70e Added new system info 2019-02-12 07:51:11 +01:00
Adolfo Gómez García
6889098ec8 Fixed pkexec
Removed "optimizeTable" for stats (nonsense...)
"
2019-02-11 11:13:12 +01:00
Adolfo Gómez García
683728fbc1 Locales & admin fix 2019-02-08 11:03:33 +01:00
Adolfo Gómez García
30ed88aefa Updating logic to remove table locking for some operations 2019-02-08 10:03:30 +01:00
Adolfo Gómez García
7b30f58750 Fixed services marshallers/unmarshallers for python 3.5 (correct usage
of binary data)
2019-02-07 11:20:44 +01:00
Adolfo Gómez García
0155f6c7fd * Added assigned services to meta pools (admin)
* Fixed serialization of oVirt
* Advanced a lot on meta pools (maybe they are yet usable?)
* minor fixex
2019-02-06 13:31:30 +01:00
Adolfo Gómez García
4509400605 * Advancing on metapools
* Removed non used old code
2019-02-05 13:52:51 +01:00
Adolfo Gómez García
e88256a892 Simplified code. Removed "assignedUserService" logic because pools will
allow only one userService per user, so everything can be located using
"pool"
2019-02-05 07:25:06 +01:00
Adolfo Gómez García
64faeec13c Updated translations (machine translation right now)
Fixed urls to new format
2019-02-04 10:00:15 +01:00
Adolfo Gómez García
b5352596e8 Updated grans method 2019-02-04 09:44:01 +01:00
Adolfo Gómez García
c1e8f6afe1 Updated to new admin interface 2019-02-04 09:15:46 +01:00
Adolfo Gómez García
2641fbbfcc fix 2019-01-30 09:43:01 +01:00
Adolfo Gómez García
923dbcc45b Removed old admin interface and added the new one based on Angular & Material 2019-01-30 06:40:36 +01:00
Adolfo Gómez García
0d4f2122c6 fixes on configuration administration section 2019-01-29 13:39:03 +01:00
Adolfo Gómez García
b55c9756e8 Added permissions for accounts & metapools 2019-01-24 07:27:15 +01:00
Adolfo Gómez García
cc1d022f40 fixed about 2019-01-22 09:19:59 +01:00
Adolfo Gómez García
d501d6037f Fix typo 2019-01-21 11:52:27 +01:00
Adolfo Gómez García
5353573ca3 Added "webLogoutHook" so we can, on authenticators, do some corrections
to response from authenticators
2019-01-21 11:48:10 +01:00
Adolfo Gómez García
26af865483 Upgraded javascript 2019-01-21 07:29:36 +01:00
Adolfo Gómez García
2bd4f3d8e5 Merge remote-tracking branch 'origin/v2.2'
# Conflicts:
#	server/src/uds/REST/methods/op_calendars.py
2019-01-18 08:34:47 +01:00
Adolfo Gómez García
efb3965d76 Fixed calendar action can create "empty" actions 2019-01-17 18:20:51 +01:00
Adolfo Gómez García
1a0c27f23c Fixes for new administration interface 2019-01-16 10:04:21 +01:00
Adolfo Gómez García
1b0f406de4 fixes for python 3.5 2019-01-14 10:34:51 +01:00
Adolfo Gómez García
21a5f4de09 Merge remote-tracking branch 'origin/v2.2' 2019-01-11 05:58:36 +01:00
Adolfo Gómez García
4778f5f931 fix translations 2019-01-11 05:57:51 +01:00
Adolfo Gómez García
29d0c242f7 Merge remote-tracking branch 'origin/v2.2' 2019-01-10 12:41:32 +01:00
Adolfo Gómez García
78656ed4a2 fixed 2019-01-10 12:40:23 +01:00
Adolfo Gómez García
c9a08cf1a1 Merge remote-tracking branch 'origin/v2.2' 2019-01-10 11:10:11 +01:00
Adolfo Gómez García
278bcb87de Fixed translations 2019-01-10 11:06:38 +01:00
Adolfo Gómez García
690fd7c9cc Added datepicker for chinese 2019-01-09 20:16:25 +01:00
Adolfo Gómez García
7b51bb7985 Added chinese lang to translations on sample file 2019-01-09 20:10:16 +01:00
Adolfo Gómez García
6f81892324 renamed chinese to zh_hans (traditional chinese) 2019-01-09 20:03:41 +01:00
Adolfo Gómez García
f603bd6c8f Merge remote-tracking branch 'origin/v2.2' 2019-01-09 13:53:28 +01:00
Adolfo Gómez García
a496fd97f1 added autotrasnlations for chinesse 2019-01-09 13:53:07 +01:00
Adolfo Gómez García
77bf401bd5 added eu autotranslations 2019-01-09 13:31:29 +01:00
Adolfo Gómez García
812e863e7f translations 2019-01-09 12:29:39 +01:00
Adolfo Gómez García
cd2d529524 Fixed IOS crash 2019-01-08 10:04:37 +01:00
Adolfo Gómez
445bbc6ee6 Merge pull request #37 from m-khan-glyptodon/Safari-Crash-Fix
IOS Safari crash fix
2019-01-08 09:54:33 +01:00
m-khan-glyptodon
cc9cf15c69 Added further documentation to max width and max height functions 2019-01-07 16:45:55 -08:00
m-khan-glyptodon
42ded5c382 Added documentation for the max height and max width functions 2019-01-07 16:45:55 -08:00
m-khan-glyptodon
8df513fbd3 Added scroll height and scroll width cap to fix ios safari crash 2019-01-07 15:08:42 -08:00
Adolfo Gómez García
164654143d Merge remote-tracking branch 'origin/v2.2' 2018-12-21 13:55:32 +01:00
Adolfo Gómez García
d9ad218e41 Merge remote-tracking branch 'origin/v2.2' 2018-12-21 13:55:20 +01:00
Adolfo Gómez García
8f76363b27 realname fixed on creation 2018-12-21 13:53:52 +01:00
Adolfo Gómez García
6a05403464 Added realname 2018-12-21 10:52:42 +01:00
Adolfo Gómez García
ac0eefc683 Merge remote-tracking branch 'origin/v2.2' 2018-12-20 16:46:07 +01:00
Adolfo Gómez García
43398cd125 Fixed user edition (user assignation) 2018-12-20 16:38:00 +01:00
Adolfo Gómez García
1da058cec6 Upgrading to new admin interface 2018-12-19 12:43:38 +01:00
Adolfo Gómez García
c5d1702758 Fixes for python 3 2018-12-18 10:52:03 +01:00
Adolfo Gómez García
fb818f06a5 fixes 2018-12-10 11:42:23 +01:00
Adolfo Gómez García
eae79364b8 Merge remote-tracking branch 'origin/v2.2' 2018-12-03 10:49:21 +01:00
Adolfo Gómez García
49564147a3 fixed on user services rest 2018-12-03 10:49:15 +01:00
Adolfo Gómez García
481eca7d16 Removed unused imports 2018-12-03 10:46:05 +01:00
Adolfo Gómez García
e382bfa19b Removed transaction from calendar actions execution. Not needed in fact. 2018-12-03 10:45:31 +01:00
Adolfo Gómez García
9094547f22 Testing windows 8 idle 2018-12-03 08:27:02 +01:00
Adolfo Gómez García
c2bd664545 translations 2018-11-29 10:18:59 +01:00
Adolfo Gómez García
04b68401cf minor fixes 2018-11-28 07:12:35 +01:00
Adolfo Gómez García
6300da4697 Merge remote-tracking branch 'origin/v2.2' 2018-11-27 11:59:40 +01:00
Adolfo Gómez García
8b4485d533 translations 2018-11-27 11:57:22 +01:00
Adolfo Gómez García
94501b1106 Merge remote-tracking branch 'origin/v2.2' 2018-11-27 11:18:24 +01:00
Adolfo Gómez García
696ad047a3 Merge remote-tracking branch 'origin/v2.2' 2018-11-27 11:18:14 +01:00
Adolfo Gómez García
682ce422b6 Translations 2018-11-27 11:17:49 +01:00
Adolfo Gómez García
906824cafc Fixups 2018-11-26 13:44:48 +01:00
Adolfo Gómez García
6f6633b819 Merge remote-tracking branch 'origin/v2.2' 2018-11-26 11:44:39 +01:00
Adolfo Gómez García
eb6065b203 Fixed so now services with no transports are not provided to template 2018-11-26 11:44:07 +01:00
Adolfo Gómez García
9451889bb3 Removed execution of "reg", using "winreg" instead (_winreg on 2.7) 2018-11-23 11:39:45 +01:00
Adolfo Gómez García
8120ae5c92 Final fix for no check redirections 2018-11-23 11:09:06 +01:00
Adolfo Gómez García
d1bb018dff Added "no warning for redirections' to remote connection 2018-11-23 11:07:58 +01:00
Adolfo Gómez García
694d60cb88 Some minor fixes 2018-11-23 10:55:00 +01:00
Adolfo Gómez García
a2a43fd041 Merge remote-tracking branch 'origin/v2.2' 2018-11-22 12:10:28 +01:00
Adolfo Gómez García
43cb02b177 Now on access error, reloads page 2018-11-22 12:09:58 +01:00
Adolfo Gómez García
01cc3eb147 Merge remote-tracking branch 'origin/v2.2' 2018-11-20 11:04:14 +01:00
Adolfo Gómez García
3e3ea59261 Updated translations 2018-11-20 11:02:58 +01:00
Adolfo Gómez García
462e53efea Merge remote-tracking branch 'origin/v2.2' 2018-11-20 11:00:42 +01:00
Adolfo Gómez García
589b12f490 new modern index && typo fix 2018-11-20 10:51:34 +01:00
Adolfo Gómez García
688a91325c Added servicepool add/remove from groups/transports 2018-11-20 10:50:18 +01:00
Adolfo Gómez García
3c905e8bc4 added spinner on app loading 2018-11-14 06:57:10 +01:00
Adolfo Gómez García
97e8c42b2f Fix on None notifyComms 2018-11-13 20:12:04 +01:00
Adolfo Gómez García
e814c47a24 Another fix for actor 2018-11-13 19:46:15 +01:00
Adolfo Gómez García
9fb19c6b9d Fix actor typ 2018-11-13 19:28:03 +01:00
Adolfo Gómez García
4375ee6d50 Fixups for actor 2018-11-13 18:38:35 +01:00
Adolfo Gómez García
de45c24bbc small fixes for updating 2018-11-13 13:18:19 +01:00
Adolfo Gómez García
ff2f508240 Fix on windows actor to check if lastInputInfo is valid or not... 2018-11-13 10:52:11 +01:00
Adolfo Gómez
f2ff09a882 Removed finished tasks 2018-11-12 16:27:58 +01:00
Adolfo Gómez García
68a58b7c73 removed /compression from freerdp (used -compression now) 2018-11-08 10:41:08 +01:00
Adolfo Gómez García
4441286c89 removed /compression from freerdp (used -compression now) 2018-11-08 10:40:14 +01:00
Adolfo Gómez García
0d97831b71 removed fontawesome not used anymore 2018-11-07 12:14:16 +01:00
Adolfo Gómez García
db7d3ef0e3 Updated gui to angular 7 2018-11-07 12:12:39 +01:00
Adolfo Gómez García
d0c9ca6234 Fixes for new admin gui 2018-11-06 10:08:09 +01:00
Adolfo Gómez García
857be90128 Merge remote-tracking branch 'origin/v2.2' 2018-11-05 11:28:44 +01:00
Adolfo Gómez García
c9410fbbac fixed removing user on case of error 2018-11-05 11:28:19 +01:00
Adolfo Gómez García
5a26063233 fixed dependency 2018-10-29 23:54:05 +01:00
Adolfo Gómez García
a68152fee3 Merge remote-tracking branch 'origin/v2.2' 2018-10-26 13:22:28 +02:00
Adolfo Gómez García
43157d722f Fixed Calendar Actions L2 2018-10-26 13:20:16 +02:00
Adolfo Gómez García
5bade926b1 Merge remote-tracking branch 'origin/v2.2' 2018-10-24 09:17:09 +02:00
Adolfo Gómez García
861258532d Python3 compat 2018-10-24 08:35:08 +02:00
Adolfo Gómez García
869f1d7031 Merge remote-tracking branch 'origin/v2.2' 2018-10-23 14:13:55 +02:00
Adolfo Gómez García
ba45e4c6d6 Fixed bug on case of exception on service saving 2018-10-23 14:13:36 +02:00
Adolfo Gómez García
ff3d27ad42 Fixed typo 2018-10-23 11:35:16 +02:00
Adolfo Gómez García
8088efa225 Some adjustements to OpenStack connector 2018-10-23 09:28:05 +02:00
Adolfo Gómez García
2b6a0ee449 imports 2018-10-22 12:30:06 +02:00
Adolfo Gómez García
300f2f3333 Fixed OpenStack for newer versions. Now has 2 providers for "legacy" and for "new" versions 2018-10-22 12:28:26 +02:00
Adolfo Gómez García
259bfc31c4 Merge remote-tracking branch 'origin/v2.2' 2018-10-22 10:56:35 +02:00
Adolfo Gómez García
c1e2e12dd9 Fixed "meta group" pools on information 2018-10-22 10:54:24 +02:00
Adolfo Gómez García
dc0d96c83a removed user template 2018-10-17 10:34:22 +02:00
Adolfo Gómez García
579b86c527 removed user template 2018-10-17 10:33:24 +02:00
Adolfo Gómez García
4bfcac0307 Merge remote-tracking branch 'origin/v2.2' 2018-10-15 10:56:46 +02:00
Adolfo Gómez García
265d2d8702 translations 2018-10-15 10:55:48 +02:00
Adolfo Gómez García
95e99670ee Changed names on openstack for older releases 2018-10-15 10:47:23 +02:00
Adolfo Gómez García
e33a6e4712 updated requirements 2018-10-11 05:43:56 +02:00
Adolfo Gómez García
73be005f6a changed error message on case of change user password error 2018-10-05 12:41:23 +02:00
Adolfo Gómez García
4c30e9d45e actor fix for python3/ubuntu16 (due to requests/json) 2018-10-04 13:08:26 +02:00
Adolfo Gómez García
68fbaf7ae0 removev python3-prctl as dependency and marqued as "recommended" 2018-10-04 12:54:49 +02:00
Adolfo Gómez García
78731b2e51 fixed requirements.txt to latest django 2018-10-04 08:29:01 +02:00
Adolfo Gómez García
b2cda46cc0 Merge remote-tracking branch 'origin/v2.2' 2018-10-03 13:45:22 +02:00
Adolfo Gómez García
cf7e8f19e2 updated translations 2018-10-03 13:45:05 +02:00
Adolfo Gómez García
879457db4e Merge remote-tracking branch 'origin/v2.2' 2018-10-03 13:44:49 +02:00
Adolfo Gómez García
256a7f2584 Now RDP defaults credssp to "TRUE" 2018-10-03 13:43:58 +02:00
Adolfo Gómez García
22b3aa848e Finished metepools admin part 2018-10-03 11:09:24 +02:00
Adolfo Gómez García
7d5ce53317 Finished metepools admin part 2018-10-03 11:08:24 +02:00
Adolfo Gómez García
f995903056 Merge remote-tracking branch 'origin/v2.2' 2018-10-02 15:26:51 +02:00
Adolfo Gómez García
7f1a776f69 Upgraded debian actor to python 3 2018-10-02 15:24:34 +02:00
Adolfo Gómez García
0169c64354 fixes 2018-10-02 13:12:34 +02:00
Adolfo Gómez García
d5be31f1d9 * Fixed version
* Moved actors to python3
2018-10-02 13:08:13 +02:00
Adolfo Gómez García
8968ada03b Adding metapools to UDS 2018-10-01 14:08:13 +02:00
Adolfo Gómez García
816dde8aca Preparing meta pools 2018-09-28 12:09:17 +02:00
Adolfo Gómez García
a47df49ca8 Changed order so now on mac CorD is tried first 2018-09-28 10:03:04 +02:00
Adolfo Gómez García
2e0972b71e Added loging on action over service pool 2018-09-24 18:57:11 +02:00
Adolfo Gómez García
b4e672bb43 Merge remote-tracking branch 'origin/v2.2' 2018-09-24 15:54:47 +02:00
Adolfo Gómez García
ee9a062201 added log in case of max services reached on service pool 2018-09-24 15:54:08 +02:00
Adolfo Gómez García
74ebf0dd30 Merge remote-tracking branch 'origin/v2.2' 2018-09-24 11:30:34 +02:00
Adolfo Gómez García
8384a43699 Updated trans, need revision already 2018-09-24 11:24:05 +02:00
Adolfo Gómez García
8c882852db added assigned service edition. Now we can change the onwership of a machine 2018-09-24 11:12:36 +02:00
Adolfo Gómez García
cbdd61cfa8 Small fixes 2018-09-21 11:07:39 +02:00
Adolfo Gómez García
e642f4df18 Updated about 2018-09-21 07:56:36 +02:00
Adolfo Gómez García
b8eda0cbc4 cleaning stuff for new interface 2018-09-20 14:12:37 +02:00
Adolfo Gómez García
ce3c1e3861 Merge remote-tracking branch 'origin/v2.2' 2018-09-19 07:28:16 +02:00
Adolfo Gómez García
8c85639dfe Fixed so UDS now works correctly with versiones newer that OCATA 2018-09-18 23:40:16 +02:00
Adolfo Gómez García
5c27b521af removing unused clusters part 2018-09-17 19:04:19 +02:00
Adolfo Gómez García
33a02ee8f3 cleaning for new angular interface 2018-09-14 05:50:26 +02:00
Adolfo Gómez García
44feef783b Merge remote-tracking branch 'origin/v2.2' 2018-09-13 10:21:29 +02:00
Adolfo Gómez García
5fbdb6834d fixed so concurrent creation storm is better handled now 2018-09-13 10:17:28 +02:00
Adolfo Gómez García
39877dacd9 fixes 2018-09-12 13:35:30 +02:00
Adolfo Gómez García
c8b1d0cb22 Mograting to modern user gui 2018-09-12 09:41:53 +02:00
Adolfo Gómez García
442a2cc72a Merge remote-tracking branch 'origin/v2.2' 2018-09-10 11:11:47 +02:00
Adolfo Gómez García
6bcf8a832f updated translations 2018-09-10 11:11:27 +02:00
Adolfo Gómez García
f0903ee505 fixed unique id 2018-09-10 11:02:25 +02:00
Adolfo Gómez García
9ffced6365 fixing up things 2018-09-10 10:40:34 +02:00
Adolfo Gómez García
4561e6c0fe Merge remote-tracking branch 'origin/v2.2' 2018-09-07 04:11:49 +02:00
Adolfo Gómez García
aa4bbcbeb3 Removed simple ldap from authenticators list. Its not used and its use
is very limited
2018-09-07 04:11:09 +02:00
Adolfo Gómez García
89f77dbbc6 Merge remote-tracking branch 'origin/v2.2' 2018-09-06 13:48:16 +02:00
Adolfo Gómez García
5863962e8a Added "display connection bar" option to transport 2018-09-06 13:45:21 +02:00
Adolfo Gómez García
afe5f0c965 fixed user groups assignation 2018-09-04 12:49:56 +02:00
Adolfo Gómez García
82c362b2b6 Fixed LDAP regex user search 2018-09-04 12:45:46 +02:00
Adolfo Gómez García
58886b00fa towards v3 2018-09-03 10:13:27 +02:00
Adolfo Gómez García
966d61fda1 Working towards new gui 2018-08-31 09:15:07 +02:00
Adolfo Gómez García
7a06279601 advancing on modern gui 2018-08-30 09:29:32 +02:00
Adolfo Gómez García
cb0150391a Added compat between new-future templates and existing ones 2018-08-22 05:52:54 +02:00
Adolfo Gómez García
121f5a6fa6 Merge remote-tracking branch 'origin/v2.2' 2018-08-20 13:48:54 +02:00
Adolfo Gómez García
c2a95711da Fixed trying to remove VM when LCM_STATE was "boot" or prior for
OpenNebula
2018-08-20 13:38:54 +02:00
Adolfo Gómez García
bc04f9c30f fixed password field
Updated requirements to django 2.1
2018-08-19 23:32:44 +02:00
Adolfo Gómez García
eb3188c6c1 Changed AES to CBC 2018-08-02 11:13:37 +02:00
Adolfo Gómez García
34b8902c71 Added AEScrypt y AESdecrypt 2018-08-02 01:58:49 +02:00
Adolfo Gómez García
3f76f6c1ab Some refactoring to easy indentify algorithm 2018-08-02 01:00:24 +02:00
Adolfo Gómez García
34028b99e7 Fixes from merge 2018-07-31 23:59:59 +02:00
Adolfo Gómez García
8867ef7036 Merge remote-tracking branch 'origin/v2.2' 2018-07-31 23:54:10 +02:00
Adolfo Gómez García
6cee32d680 fix lambda 2018-07-31 23:53:58 +02:00
Adolfo Gómez García
cce00adc51 Fixed string for "access denied" on logon 2018-07-26 12:52:08 +02:00
Adolfo Gómez García
e37b929adc merged from 2.2 2018-07-23 09:54:35 +02:00
Adolfo Gómez García
4b75be2f02 fully fixed password issue on HTML5 2018-07-19 21:14:08 +02:00
Adolfo Gómez García
34046c8a7e removed unsecure logging on exception on code 2018-07-19 11:22:04 +02:00
Adolfo Gómez García
f177b98c78 Fixed tickets auth 2018-07-18 23:11:55 +02:00
Adolfo Gómez García
4777b7e8f9 Fixes for passwords 2018-07-18 22:44:23 +02:00
Adolfo Gómez García
fbbdc529fe Fixes & DEBUG log fix 2018-07-17 21:16:17 +02:00
Adolfo Gómez García
e9f61b6a94 fixed single quote on passwords 2018-07-17 12:03:03 +02:00
Adolfo Gómez García
367a1779f5 fixed requirements 2018-07-13 07:02:48 +02:00
Adolfo Gómez García
99f834c41f fixed requirements 2018-07-13 06:54:53 +02:00
Adolfo Gómez García
2b868a71ba fixed paramiko dep 2018-07-13 06:54:21 +02:00
Adolfo Gómez García
1a0a1d17dc Merge remote-tracking branch 'origin/v2.2' 2018-07-02 14:10:56 +02:00
Adolfo Gómez García
f333f2f71f Fixed "keep on new publication" 2018-07-02 13:28:28 +02:00
Adolfo Gómez García
6c2a7ff6e6 Added basic metadata info to openstack server 2018-06-29 14:15:06 +02:00
Adolfo Gómez García
1936a02cf7 * Fixed get name from authCallback
* added convenient "comments" to some parts
* Fixed login, to cicly session only when logged in
2018-06-27 11:12:08 +02:00
Adolfo Gómez García
d8eb440b34 Advanced a lot on azure ad integration 2018-06-26 17:20:05 +02:00
Adolfo Gómez García
4570d79645 Added "hint" return type for managers helpers 2018-06-25 09:35:20 +02:00
Adolfo Gómez García
6936f6994d Updated random uuid method 2018-06-25 09:32:20 +02:00
Adolfo Gómez García
d60f1d82db Fixed datetime.now 2018-06-21 12:55:17 +02:00
Adolfo Gómez García
c72a6a32dc Fixed cache geting local datetime instead of 2018-06-21 12:47:20 +02:00
Adolfo Gómez García
757151c71a Merge remote-tracking branch 'origin/v2.2' 2018-06-12 13:28:52 +02:00
Adolfo Gómez García
7bdb3d77ba Fixed LogManager so now "cuts" correctly before writing log text
Removed debug that was "anoying
2018-06-12 13:25:54 +02:00
Adolfo Gómez García
f211f3482f small fixes & added open link on new window instead of current 2018-06-11 13:33:50 +02:00
Adolfo Gómez García
e52cec2ce7 Merge remote-tracking branch 'origin/v2.2' 2018-06-11 01:33:15 +02:00
Adolfo Gómez García
ff226dd8e5 included decorator 2018-06-11 01:30:32 +02:00
Adolfo Gómez García
574de727d3 Merge remote-tracking branch 'origin/v2.2' 2018-06-08 01:45:23 +02:00
Adolfo Gómez García
b0268346e5 Created Azure publication 2018-06-08 01:36:35 +02:00
Adolfo Gómez García
db87dd101b Merge remote-tracking branch 'origin/v2.2' 2018-06-06 15:30:14 +02:00
Adolfo Gómez García
9906b80702 Added russian 2018-06-06 15:29:52 +02:00
Adolfo Gómez García
be4a4a5b09 Fixed non asceii characters on user home for windows 2018-06-05 14:06:32 +02:00
Adolfo Gómez García
070088909e Fixed "idle checker" logout 2018-05-31 12:20:14 +02:00
Adolfo Gómez García
2066f4050c Merge remote-tracking branch 'origin/v2.2' 2018-05-28 09:55:14 +02:00
Adolfo Gómez García
9cbb297330 advances 2018-05-28 09:55:01 +02:00
Adolfo Gómez García
e9d23cf170 * Added "HIDDEN_FIELD" and "READ_ONLY_FIELD" to Configuration
* Added a "default" UDS Server (cluster) ID, so we can use it for a lot
of things :)
2018-05-28 09:54:23 +02:00
Adolfo Gómez García
9f98fc6f6d Merge remote-tracking branch 'origin/v2.2' 2018-05-18 12:03:50 +02:00
Adolfo Gómez García
b5ebd1f1fb Added RDP option to allow only "new local drives" from windows 2018-05-18 10:55:47 +02:00
Adolfo Gómez García
2ed4bf07cd Working on next-gen user id 2018-05-18 09:44:29 +02:00
Adolfo Gómez García
df17aa8687 Merge remote-tracking branch 'origin/v2.2' 2018-05-16 13:39:50 +02:00
Adolfo Gómez García
04e900bd8e work in progress, will log later 2018-05-16 13:39:44 +02:00
Adolfo Gómez García
0e99f53f0d Added "early client IP log" on dashboard 2018-05-16 13:36:17 +02:00
Adolfo Gómez García
af53a574f5 simple uds tags fixes 2018-05-11 12:06:00 +02:00
Adolfo Gómez García
15e4c949d3 Now the machine removal on windows takes care of child nodes.. (We have
noticed that Hyperv server 2016 creates a "node" behind machines on
domain)
2018-05-10 12:32:10 +02:00
Adolfo Gómez García
962d28b484 Merge remote-tracking branch 'origin/v2.2' 2018-05-10 12:21:22 +02:00
Adolfo Gómez García
2bbc74a87c Fixed domain deletion when a machine has child nodes 2018-05-10 12:19:54 +02:00
Adolfo Gómez García
ac5d3ebe14 Removed non used "moderm" stuff 2018-05-10 08:34:43 +02:00
Adolfo Gómez García
0e4e1e860d Now we can add/remove transports from an scheduled action 2018-05-09 08:14:39 +02:00
Adolfo Gómez García
0b201eada9 removed debug from xenserver 2018-05-09 00:24:51 +02:00
Adolfo Gómez García
73139094dc Merge remote-tracking branch 'origin/v2.2' 2018-05-09 00:24:36 +02:00
Adolfo Gómez García
9e270f6f7e fixed requirements 2018-05-09 00:22:30 +02:00
Adolfo Gómez García
81a358e4e2 Adding scheduled action on transports
Fixed PUT for detail items
2018-05-07 16:47:19 +02:00
Adolfo Gómez García
eead0d282c Merge remote-tracking branch 'origin/v2.2' 2018-05-02 10:46:18 +02:00
Adolfo Gómez García
ba09bab8a1 fix Actor for newer Oss 2018-05-02 10:40:57 +02:00
Adolfo Gómez García
ac24acc52d Merge remote-tracking branch 'origin/v2.2' 2018-04-27 16:54:22 +02:00
Adolfo Gómez García
4c4a54e50b Fixed debian to use first freerdp2 instead freerdp. Also, removed rdesktop 2018-04-27 16:52:09 +02:00
Adolfo Gómez García
5f44798fe6 Merge branch 'master' of github.com:dkmstr/openuds 2018-04-27 11:21:47 +02:00
Adolfo Gómez García
5b7d02964d Now AD search on full path instead of OU 2018-04-27 11:01:08 +02:00
Adolfo Gómez García
912c4d3d05 Merge remote-tracking branch 'origin/v2.2' 2018-04-27 10:55:42 +02:00
Adolfo Gómez García
0648a27daf Fixed for machine deletion on ou change 2018-04-27 10:53:04 +02:00
Adolfo Gómez García
496e5fb60d Removed all pycha references from project. All charts are now created
using matplotlib
2018-04-25 12:15:05 +02:00
Adolfo Gómez García
1406b036f7 Fixed another report (removed pycha) 2018-04-24 13:41:43 +02:00
Adolfo Gómez García
51cc23b223 * Fixed sample setting file
* Working on removal of pycha of reports
2018-04-24 11:27:51 +02:00
Adolfo Gómez García
2ad3517bcd Fixing up, removing pycha and using matplotlib instead 2018-04-23 15:08:58 +02:00
Adolfo Gómez García
52e703f9c2 Fixes 2018-04-20 10:39:26 +02:00
Adolfo Gómez García
2ce130786a Autcompletes 2018-04-18 12:25:20 +02:00
Adolfo Gómez García
9b2e9000e7 pep related fixes 2018-04-18 10:07:16 +02:00
Adolfo Gómez García
0021fd5ff9 pep related fixes 2018-04-18 01:06:06 +02:00
Adolfo Gómez García
f74b0b0fe9 pep related fixes 2018-04-18 00:44:21 +02:00
Adolfo Gómez García
62abc85191 pep related fixes 2018-04-18 00:38:59 +02:00
Adolfo Gómez García
429eead46d Fixes for python 3 (pep related, code warns, etc...) 2018-04-17 18:29:13 +02:00
Adolfo Gómez García
6293c09ca8 Fixed intragrations from 2.2 2018-04-14 19:15:44 +02:00
Adolfo Gómez García
6db1fdb86d Added content type to error responses on REST api 2018-04-14 18:53:26 +02:00
Adolfo Gómez García
af9e372d6b Merge remote-tracking branch 'origin/v2.2' 2018-04-12 13:11:01 +02:00
Adolfo Gómez García
b1223f623b Fixed RDP connection 2018-04-12 13:02:24 +02:00
Adolfo Gómez García
e72698e1da Merge remote-tracking branch 'origin/v2.2' 2018-03-30 19:00:50 +02:00
Adolfo Gómez García
22a78d8e69 addedd freerdp2-x11 as optional dependency 2018-03-30 19:00:24 +02:00
Adolfo Gómez García
04f532065a Merge remote-tracking branch 'origin/v2.2' 2018-03-28 12:43:37 +02:00
Adolfo Gómez García
39b6a59538 Fixed end date 2018-03-28 12:42:50 +02:00
Adolfo Gómez García
1d45fef879 Merge remote-tracking branch 'origin/v2.2' 2018-03-28 12:03:33 +02:00
Adolfo Gómez García
772a31da37 added fix for shotname 2018-03-28 12:02:57 +02:00
Adolfo Gómez García
cc95427e05 Merge remote-tracking branch 'origin/v2.2' 2018-03-26 12:34:24 +02:00
Adolfo Gómez García
0070b1618b Fixed for getByAttr1 to return FIRST element in case of error 2018-03-26 12:34:12 +02:00
Adolfo Gómez García
d3c5f47ac2 Merge remote-tracking branch 'origin/v2.2' 2018-03-23 10:53:02 +01:00
Adolfo Gómez García
3b04e2a180 translations 2 2018-03-23 10:52:54 +01:00
Adolfo Gómez García
838cedf7e2 Merge remote-tracking branch 'origin/v2.2' 2018-03-23 10:43:01 +01:00
Adolfo Gómez García
5d43c1dbff translations 1 2018-03-23 10:42:34 +01:00
Adolfo Gómez García
f3e8d98ae6 Merge remote-tracking branch 'origin/v2.2' 2018-03-23 10:40:16 +01:00
Adolfo Gómez García
9c65db5c25 X2go fixes 2018-03-23 10:39:34 +01:00
Adolfo Gómez García
a6397e9ff6 Fixed X2Go 2018-03-22 18:36:43 +01:00
Adolfo Gómez García
187d417eec Merge remote-tracking branch 'origin/v2.2' 2018-03-21 18:41:21 +01:00
Adolfo Gómez García
5909533161 Fixed "smooth fonts".Now works on linux xfreerdp clients also. 2018-03-21 18:40:32 +01:00
Adolfo Gómez García
cbaf42af26 Merge remote-tracking branch 'origin/v2.2' 2018-03-16 10:57:21 +01:00
Adolfo Gómez García
f3420a50ac translations 2018-03-16 10:56:57 +01:00
Adolfo Gómez García
f6eab2f3b2 Fixed migrations from 2.2 2018-03-16 10:02:14 +01:00
Adolfo Gómez García
6bbd8d1321 Merge remote-tracking branch 'origin/v2.2' 2018-03-16 09:53:49 +01:00
Adolfo Gómez García
1bd56debb9 Added reset to vdi 2018-03-16 09:51:55 +01:00
Adolfo Gómez García
83ad9141a8 Merge remote-tracking branch 'origin/v2.2' 2018-03-16 09:50:29 +01:00
Adolfo Gómez García
a1ed512453 fixes from merge 2018-03-16 09:43:01 +01:00
Adolfo Gómez García
4641fde008 Added reset to vdi 2018-03-16 09:37:04 +01:00
Adolfo Gómez García
1d3d79c562 fix for "reset" capacity 2018-03-16 06:15:19 +01:00
Adolfo Gómez García
33600bda6e Fixed rootless 2018-03-14 15:23:44 +01:00
Adolfo Gómez García
e4807cf648 sets "allow_users_reset" to false on save if service does not supports
it.
2018-03-14 09:51:17 +01:00
Adolfo Gómez García
b9cb82c054 Merge remote-tracking branch 'origin/v2.2' 2018-03-14 08:18:06 +01:00
Adolfo Gómez García
92de41d410 * Added support for "reset" services that support it.
Right now, we will test on enterprise this feature.
2018-03-14 08:03:23 +01:00
Adolfo Gómez García
ee72b65534 Merge from master guacamole updates 2018-03-12 07:21:22 +01:00
Adolfo Gómez
ca24954e8d Merge pull request #20 from glyptodon/update-guac-version
Update to 0.9.14 version of Apache Guacamole APIs.
2018-03-12 07:17:45 +01:00
Michael Jumper
b30f9334c5 Automatically reconnect after network errors (see upstream commit apache/guacamole-client@ecf506e). 2018-03-11 21:58:20 -07:00
Michael Jumper
a8e384cb43 Add error strings for status codes added upstream via GUACAMOLE-208 (see upstream commits apache/guacamole-client@dd6964a and apache/guacamole-client@ee4f8cf). 2018-03-11 21:55:47 -07:00
Michael Jumper
5136d013c2 Update to 0.9.14 version of Apache Guacamole APIs. 2018-03-11 21:33:30 -07:00
Adolfo Gómez García
374c35ea8c Merge remote-tracking branch 'origin/v2.2' 2018-03-09 11:19:17 +01:00
Adolfo Gómez García
dba5e4267a Fixed translations 2018-03-09 11:19:01 +01:00
Adolfo Gómez García
fb757fc1fd Merge remote-tracking branch 'origin/v2.2' 2018-03-08 20:33:21 +01:00
Adolfo Gómez García
f6d78201cb fixed cache in case of use in middle of "lock tables"... 2018-03-08 20:29:28 +01:00
Adolfo Gómez García
952cb1c3f7 Merge remote-tracking branch 'origin/v2.2' 2018-03-06 11:08:58 +01:00
Adolfo Gómez García
8162230f23 Fixed lazy trans on os managers 2018-03-06 11:06:40 +01:00
Adolfo Gómez García
f73de2f4c3 Merge remote-tracking branch 'origin/v2.2' 2018-03-05 13:59:40 +01:00
Adolfo Gómez García
bfb96b6d9f Translations 2018-03-05 13:59:20 +01:00
Adolfo Gómez García
f9316b230b Merge remote-tracking branch 'origin/v2.2' 2018-03-05 13:41:33 +01:00
Adolfo Gómez García
b37c87afb5 Added new "on logout" state 2018-03-05 13:38:40 +01:00
Adolfo Gómez García
8913d152e7 cosmetic 2018-03-05 13:37:33 +01:00
Adolfo Gómez García
8141d3bbdb Updated go fontawasome 5 2018-03-04 02:38:48 +01:00
Adolfo Gómez García
05f2f816e0 a couple of fixes for grunt-copy on user space template 2018-03-03 10:53:39 +01:00
Adolfo Gómez García
0c1313af8f Merge remote-tracking branch 'origin/v2.2' 2018-03-02 18:36:43 +01:00
Adolfo Gómez García
df98efc2da translations 2018-03-02 18:35:02 +01:00
Adolfo Gómez García
7320ba0e6d Added to "use" log the serviceName & the pool name 2018-03-02 18:09:12 +01:00
Adolfo Gómez García
9f89cc1482 Merge remote-tracking branch 'origin/v2.2' 2018-03-02 06:01:30 +01:00
Adolfo Gómez García
4271be9340 Added a couple of logs due to the fact that maybe in some moment we
change a datetime from db/uds and may "force" tasks
2018-03-02 06:00:04 +01:00
Adolfo Gómez García
8904cc9bc0 fixing migrations from 2.2 2018-03-02 05:47:17 +01:00
Adolfo Gómez García
e1efa5d5ed fixing migrations from 2.2 2018-03-02 05:46:56 +01:00
Adolfo Gómez García
b56b3ef6d8 Fixed & remove "auto_add_time" etc.. 2018-03-02 05:25:42 +01:00
Adolfo Gómez García
eacffbe20b Merge remote-tracking branch 'origin/v2.2' 2018-03-02 01:02:08 +01:00
Adolfo Gómez García
5f74c7fca8 * Changed the "persitent" management on case of new publication.
Now, if a machine is considered "persistent", on a new publication, UDS
Will not remove assigned services, nor will remove services of old
publications on logout.
2018-03-02 00:51:16 +01:00
Adolfo Gómez García
4a171b6aa5 Merge remote-tracking branch 'origin/v2.2' 2018-02-28 19:50:48 +01:00
Adolfo Gómez García
0bd09e70bf fixed README.txt 2018-02-28 19:50:27 +01:00
Adolfo Gómez García
52345d6970 Forgot the moderm folder :) 2018-02-26 07:30:22 +01:00
Adolfo Gómez García
697a07dda8 Working on templates 2018-02-26 07:11:59 +01:00
Adolfo Gómez García
ccd2215cf6 Finally, we are going to try translation to typescript, at least on user space for now. 2018-02-25 09:05:02 +01:00
Adolfo Gómez García
c2e5b705a7 Advanced a bit 2018-02-24 23:48:42 +01:00
Adolfo Gómez García
30006b90d4 Advancing on base template dev environment 2018-02-24 10:10:26 +01:00
Adolfo Gómez García
9d2abc83bf Added by now the bootstrap-select picerk beta. To be replace with stable & npm package when stable 2018-02-24 10:09:44 +01:00
Adolfo Gómez García
9e86df21e5 advancing on base templates. 2018-02-24 09:09:14 +01:00
Adolfo Gómez García
367b9ca26f Advancing on auto builders 2018-02-24 08:45:45 +01:00
Adolfo Gómez García
3be93f2dcf Testing aroung with typescripy/javascript. For now, will keep coffeescript, too many changes for using typescript and no time ;-) 2018-02-24 06:21:13 +01:00
Adolfo Gómez García
5d8a63e729 base empty template for user html 2018-02-24 05:38:23 +01:00
Adolfo Gómez García
f9886cae3b Replacing coffeescripy by typescript 2018-02-24 05:24:26 +01:00
Adolfo Gómez García
f9e10b8daf Updated 2018-02-23 09:40:14 +01:00
Adolfo Gómez García
b386839bdc started template for new user interface, using bootstrap 4 2018-02-23 09:00:59 +01:00
Adolfo Gómez García
32053627ad Merge remote-tracking branch 'origin/v2.2' 2018-02-20 14:32:51 +01:00
Adolfo Gómez García
9e991eebb2 Locales to date 2018-02-20 14:29:59 +01:00
Adolfo Gómez García
579092bac6 Merge remote-tracking branch 'origin/v2.2' 2018-02-20 13:27:16 +01:00
Adolfo Gómez García
ab8faf3ebb Small 2.2 fixes 2018-02-20 13:11:46 +01:00
Adolfo Gómez García
17e573dc14 First tests with mssql. With a couple of fixes, seems to work properly for "testing" porposes at least... 2018-02-16 06:15:21 +01:00
Adolfo Gómez García
bd267d7cd1 On Mysql, unsigned smalint can cover till 65536. Seems that on MS SQL
does not support this range (instead, supports only till 32768).
Also, due to something i do not understand, cannot change the type of
"level" field because it gas a constraint. So, as long as int and
smallint are compatibles at query leve, we have changed it on initial
creation to "PsotiveInteger" and shoudl be fine. (The already created
database will not suffer from this change)
2018-02-16 05:37:47 +01:00
Adolfo Gómez García
18d6a24631 fixes for django 2.x 2018-02-13 01:20:32 +01:00
Adolfo Gómez García
86a2c7c544 Small fix & debug info removal 2018-02-13 01:02:28 +01:00
Adolfo Gómez García
733522d574 * Added new squashed migration for next release
* Fixed several issues with django 2.x
2018-02-13 00:38:15 +01:00
Adolfo Gómez García
92a0c840a5 updated requirements with current neede versions 2018-02-12 22:03:48 +01:00
Adolfo Gómez García
92639b6771 preparing debian package for next release (just upgrading version numbers right now...) 2018-02-12 21:40:40 +01:00
Adolfo Gómez García
7b6d7df38b UDS 3.0 will be only python 3 compatible. We have upgrade django to 2.x, so we need python 3 to use it 2018-02-12 21:34:58 +01:00
Adolfo Gómez García
1ea2054d60 UDS 3.0 will be only python 3 compatible. We have upgrade django to 2.x, so we need python 3 to use it 2018-02-12 21:29:35 +01:00
Adolfo Gómez García
96721487de Fixed workers autoloader for python3 2018-02-12 19:22:57 +01:00
Adolfo Gómez García
c9075bfa0f Merge remote-tracking branch 'origin/v2.2' 2018-02-12 11:04:53 +01:00
Adolfo Gómez García
752b84a17a added xscreensaver dependencie to udsactor 2018-02-12 10:49:44 +01:00
Adolfo Gómez García
4ffdd4b882 Removed check of systray existance... 2018-02-12 10:43:34 +01:00
Adolfo Gómez García
ca0fc6a61d Updating windowmain to be functional on python2 & python3 2018-02-09 06:10:50 +01:00
Adolfo Gómez García
54136ae077 Upgraded reporting to weasyprint & python3.
Caution!!. pycha does not supports python3. Right now, we have patched
pycha on our servers, and will look for an updated alternative.
2018-02-08 08:05:18 +01:00
Adolfo Gómez García
8f38ae8f4a Fixed fields order not being returned correctly 2018-02-08 07:02:08 +01:00
Adolfo Gómez García
49654d9afe Removed duplicate password for testing (nonsense... :P) 2018-02-08 07:01:33 +01:00
Adolfo Gómez García
225bf75770 advancing on a reporting system compatible with python2 & python3 2018-02-07 21:38:17 +01:00
Adolfo Gómez García
a9844fc8b4 Merge remote-tracking branch 'origin/v2.2' 2018-02-07 16:43:35 +01:00
Adolfo Gómez García
d59661eb05 Fix report 2018-02-07 16:42:59 +01:00
Adolfo Gómez García
babcf53ea3 removing old geraldo reports and adding much more conveninet weasyprint 2018-02-07 11:53:31 +01:00
Adolfo Gómez García
a395847b32 Merge remote-tracking branch 'origin/v2.2' 2018-02-07 10:26:21 +01:00
Adolfo Gómez García
7c54eba78c Merge branch 'master' of github.com:dkmstr/openudt mes 2018-02-07 10:26:07 +01:00
Adolfo Gómez García
766786715d Removing geraldo reports/reportlabs in favor of weasyprint 2018-02-07 10:25:50 +01:00
Adolfo Gómez García
c81fc17593 Removing geraldo reports/reportlabs in favor of weasyprint 2018-02-07 10:25:22 +01:00
Adolfo Gómez García
a03f86f031 Fixed report to blob generation 2018-02-07 10:21:46 +01:00
Adolfo Gómez García
c9bea9cf78 Merge remote-tracking branch 'origin/v2.2' 2018-02-06 15:19:40 +01:00
Adolfo Gómez García
cc033105e2 fixed translations 2018-02-06 15:19:21 +01:00
Adolfo Gómez García
a665c72c25 Updated simpleldap authenticator to be python2 & python3 compatible 2018-02-01 07:06:25 +01:00
Adolfo Gómez García
dcf1ea7cac merge from 2.2 and fix 2018-02-01 05:25:17 +01:00
Adolfo Gómez García
9e293905b6 merge from 2.2 and fix 2018-02-01 05:23:36 +01:00
Adolfo Gómez García
a1bf0b92bb Enhanced "search user/groups" response on too many results 2018-02-01 04:59:20 +01:00
Adolfo Gómez García
bce764f0d3 Fixied unique generators for not using "lock tables" (towards full use of galer mariadb cluster) 2018-01-31 08:09:04 +01:00
Adolfo Gómez García
a4288b991d Removed "lock" from UniqueIdGenerator for future release 2018-01-29 12:45:18 +01:00
Adolfo Gómez García
c2a1e310ef Merge remote-tracking branch 'origin/v2.2' 2018-01-29 09:26:55 +01:00
Adolfo Gómez García
b6e5aeac29 Fixed string translation from coffeescript 2018-01-26 10:32:08 +01:00
Adolfo Gómez García
a6474101b4 small info fix 2018-01-25 08:34:01 +01:00
Adolfo Gómez García
8a06132b1a Updated LDAP REGEX to be compatible with python2 & pytohn3 2018-01-24 10:28:26 +01:00
Adolfo Gómez García
789084d3ed py3 2018-01-18 10:46:05 +01:00
Adolfo Gómez García
fab976fd8f Merge remote-tracking branch 'origin/v2.2' 2018-01-18 08:36:39 +01:00
Adolfo Gómez García
3420ac44be Fixed net to use only integers on py3 2018-01-18 08:32:16 +01:00
Adolfo Gómez García
42631f39da python 3.x 2018-01-16 12:37:56 +01:00
Adolfo Gómez García
c6003536ae python3.x 2018-01-16 11:30:04 +01:00
Adolfo Gómez García
5c3505856a Merge remote-tracking branch 'origin/v2.2' 2018-01-16 10:39:31 +01:00
Adolfo Gómez García
d0fb880880 Removed annoying debug 2018-01-16 10:38:23 +01:00
Adolfo Gómez García
e597381005 Merge remote-tracking branch 'origin/v2.2' 2018-01-16 10:37:11 +01:00
Adolfo Gómez García
f43a65e026 Fixed connection for not checking connections 2018-01-16 10:33:51 +01:00
Adolfo Gómez García
0d63c25f27 Common ldaputil for all ldap access, so py2 & py3 compat will be easier 2018-01-16 08:35:18 +01:00
Adolfo Gómez García
37c65c14e6 Fixing for python3.x 2018-01-15 23:38:00 +01:00
Adolfo Gómez García
6d5b154f3c Fixes for python3.x 2018-01-15 23:33:21 +01:00
Adolfo Gómez García
ea0727993e legacy bug, in a methond not in fact used (but maybe usable) 2018-01-15 23:32:55 +01:00
Adolfo Gómez García
61b8c270c4 Fixing up things for python 3.x compat 2018-01-15 17:02:33 +01:00
Adolfo Gómez García
b491c4a2c0 Merge remote-tracking branch 'origin/v2.2' 2018-01-12 11:53:01 +01:00
Adolfo Gómez García
8d00883213 Added "Chrome OS", and fixed the "unknown os" bug 2018-01-12 11:51:08 +01:00
Adolfo Gómez García
8ad77c736d Set that unknown os to be recognized right now as android 2018-01-12 11:25:24 +01:00
Adolfo Gómez García
f5325e47f7 Merge remote-tracking branch 'origin/v2.2' 2018-01-12 11:18:37 +01:00
Adolfo Gómez García
bfb65ccdb6 towerds python 3.x 2018-01-12 10:37:32 +01:00
Adolfo Gómez García
178bb12b62 Working on python3 compat, an fixing 2.2 merge issues :) (a couple only) 2018-01-12 10:03:05 +01:00
Adolfo Gómez García
0801bd0cfb * Fixed cache for invalidate it fi "pickle" protocol is mismatched (for
python3/python2 compat)
* Fixed BaseModule to return icon in "unicode" instead of "bytes"
2018-01-12 07:55:46 +01:00
Adolfo Gómez García
5fae347440 Fixing up for 3.x compatibility 2018-01-12 06:46:07 +01:00
Adolfo Gómez García
34ff0259ce Fixed icon for service inside providers (on dashboard) 2018-01-10 12:18:28 +01:00
Adolfo Gómez García
b4ba79cad2 Fixed look up user names on Windows Actor on lowercase 2018-01-10 12:10:53 +01:00
Adolfo Gómez García
5a13f52d8f Fixed translations 2018-01-09 22:50:46 +01:00
Adolfo Gómez García
3e8b681dae Merge remote-tracking branch 'origin/v2.2' 2018-01-09 22:36:59 +01:00
Adolfo Gómez García
0242eaaa54 fixed a couple of literals 2018-01-09 22:36:26 +01:00
Adolfo Gómez García
f2149c594e Merge remote-tracking branch 'origin/v2.2' 2018-01-09 14:35:58 +01:00
Adolfo Gómez García
7ec92d6005 translations 2018-01-09 14:35:42 +01:00
Adolfo Gómez García
1518be047c Merge remote-tracking branch 'origin/v2.2' 2018-01-09 14:33:46 +01:00
Adolfo Gómez García
dbc2bc1754 Fixed string 2018-01-09 14:33:38 +01:00
Adolfo Gómez García
4932fe37f7 Merge remote-tracking branch 'origin/v2.2' 2018-01-08 18:50:13 +01:00
Adolfo Gómez García
18f75ecb37 Updated translations 2018-01-08 18:48:41 +01:00
Adolfo Gómez García
61b147f450 Merge remote-tracking branch 'origin/v2.2' 2018-01-06 19:32:36 +01:00
Adolfo Gómez García
033a6265a8 Fixed ticket validity description on HTML5 2018-01-06 19:29:46 +01:00
Adolfo Gómez García
02ab1a8c7c Removed unused field 2018-01-06 19:27:17 +01:00
Adolfo Gómez García
8c6833f420 Several fixes
* Added missing migration
* More fixes towards python3 full compatibility (now it runs, but has
lots of unicode/bytes problems :) )
* Several minor fixes found during updating
2018-01-05 14:46:14 +01:00
Adolfo Gómez García
9726cd7858 Fixing up things for future python 3.x (advancing fast)) 2018-01-05 00:28:05 +01:00
Adolfo Gómez García
a81e08d3cd Fixed migrations to work on python3 2018-01-04 22:55:41 +01:00
Adolfo Gómez García
fa1dfea181 small fix for migrations 2018-01-04 22:43:52 +01:00
Adolfo Gómez García
b59067a20e Fixing up things for python3 near future upgrade 2018-01-04 22:16:21 +01:00
Adolfo Gómez García
fc2f8b8a37 Merge remote-tracking branch 'origin/v2.2' 2018-01-04 14:46:14 +01:00
Adolfo Gómez García
89155d6db9 HTML5 addin so we can define the duration of HTML5 tickets (for
disconnections, or F5 allowance)
2018-01-04 14:44:31 +01:00
Adolfo Gómez García
9b35224fc5 Removed "storage_type" from 4.1. It's not used, so not needed 2018-01-04 14:43:40 +01:00
Adolfo Gómez García
161c277ec6 Merge remote-tracking branch 'origin/v2.2' 2017-12-21 19:10:55 +01:00
Adolfo Gómez García
a0797ac07f Updated translations 2017-12-21 19:10:36 +01:00
Adolfo Gómez García
3694f10fff Merge remote-tracking branch 'origin/v2.2' 2017-12-21 19:05:33 +01:00
Adolfo Gómez García
bbcc06f503 Fixes on RDP for Linux.
On linux client freerdp 1.1, seems that /home-drive with
/drive:media,/media and /printer makes the client fail. (Works fine with
2.0).
We have replaced so:
1.- Now by default, on linux, redirect drives redirects /media
2.- You can check "redirect home" so /home is also redirected (take
care, /home, not home folder)
3.- If you want /home-drives, you can include it on "custom parameters"
2017-12-21 19:04:06 +01:00
Adolfo Gómez García
42ac0d6b03 Merge remote-tracking branch 'origin/v2.2' 2017-12-20 12:29:02 +01:00
Adolfo Gómez García
6fbf419064 Updated translations 2017-12-20 12:28:52 +01:00
Adolfo Gómez García
30ef566bef merged from v2.2 2017-12-20 12:28:38 +01:00
Adolfo Gómez García
cabc906758 Fixed a lof of transports string literals 2017-12-20 12:17:17 +01:00
Adolfo Gómez García
0b7535e76e Fixed string on x2go transport 2017-12-20 00:10:24 +01:00
Adolfo Gómez García
85db53e619 Merge remote-tracking branch 'origin/v2.2' 2017-12-19 22:44:32 +01:00
Adolfo Gómez García
f536112312 Updated translations 2017-12-19 22:42:50 +01:00
Adolfo Gómez García
1a1a4e84b2 Merged from 2.2. 2017-12-19 22:41:26 +01:00
Adolfo Gómez García
ab2ca6d527 Fixed text & descriptions for transports 2017-12-19 22:33:05 +01:00
Adolfo Gómez García
442b78ef2e Fixed smartcard parameter when empty 2017-12-19 13:52:20 +01:00
Adolfo Gómez García
9cfc348ee6 RDP aditions. 2017-12-18 12:48:15 +01:00
Adolfo Gómez García
6756142e44 Merged from 2.2 2017-12-15 12:41:50 +01:00
Adolfo Gómez García
0f1d1af736 RDP Transport fixes
* Now preferences are not for user, that is not useful. Now screen size,
color deppth, etc.. is selected on the transports.
* Preferences for RDP has been removed from "user preferences"
2017-12-15 12:33:15 +01:00
Adolfo Gómez García
6830d8db4e Fixed Client plugin version 2017-12-15 11:16:22 +01:00
Adolfo Gómez García
49862699f2 Merged 2017-12-14 15:28:34 +01:00
Adolfo Gómez García
d8db218c6d * Updated linux agents to include "udsvapp"
* Fixed reloading of master key, to do it "less sensitive" to database connection errros
* Removed nonsense info log from storage
* Added "customCmd" for UDS vApp on linux
2017-12-14 15:17:46 +01:00
Adolfo Gómez García
afbbc342ba Merged v2.2 & fixed typo 2017-12-14 10:52:55 +01:00
Adolfo Gómez García
81dd4e3b8c a little optimization 2017-12-12 19:42:09 +01:00
Adolfo Gómez García
9519c7c95b More fixes to scheduled actions. Now all should work as expected with start/end dates 2017-12-12 18:42:44 +01:00
Adolfo Gómez García
afa7cb8f39 Fixed another calendar issue 2017-12-12 18:04:47 +01:00
Adolfo Gómez García
dc640fd400 Added support so a deployed service can "ignore unused but assigned"
state. That is, UDS now can enforce the check to be ignored.
2017-11-29 12:50:54 +01:00
Adolfo Gómez García
76c822b015 Fixed RDPFile to split linux command lines correctly 2017-11-29 12:49:49 +01:00
Adolfo Gómez García
c7513328eb Smaill fix for authenticators list (so we can determine type) 2017-11-23 06:38:12 +01:00
Adolfo Gómez García
e5f0fcce69 Fixed SHUTOFF on OpenStack 2017-11-21 12:48:44 +01:00
Adolfo Gómez García
5e0d71042d Merge remote-tracking branch 'origin/v2.2' 2017-11-20 15:30:35 +01:00
Adolfo Gómez García
004acbab9a Fixing up thin thin plugin 2017-11-20 14:56:19 +01:00
Adolfo Gómez García
c566ec47a2 Fixes for thin thin plugin 2017-11-20 13:56:28 +01:00
Adolfo Gómez García
3e1a31954a * Added "requestLogoff", to be invoked before "user removal" of a
service
2017-11-20 01:01:52 +01:00
Adolfo Gómez García
3a42fb599c Merge remote-tracking branch 'origin/v2.2' 2017-11-15 15:39:41 +01:00
Adolfo Gómez García
ec5473d99f Fixed autoatrributes && rdp 2017-11-15 15:36:36 +01:00
Adolfo Gómez García
4cf62de3fd Fixing up encoders 2017-11-15 14:21:45 +01:00
Adolfo Gómez García
4c87d96cd3 Merge remote-tracking branch 'origin/v2.2' 2017-11-15 13:27:44 +01:00
Adolfo Gómez García
a43d6af237 Fixing up encoders/decoders 2017-11-15 13:11:34 +01:00
Adolfo Gómez García
f41f431f38 Added "hex" encoder if needed 2017-11-15 13:02:13 +01:00
Adolfo Gómez García
c5af877fce Fixed DBfile new "encoding-decoding' 2017-11-15 13:01:47 +01:00
Adolfo Gómez García
88dd6e7494 Fixed encoding to bzip2 2017-11-15 12:41:40 +01:00
Adolfo Gómez García
7fd7f48ee8 Mergin 2.2 changes into master 2017-11-14 15:19:32 +01:00
Adolfo Gómez García
e69800ccd2 Fixing up removing ".encode(bzip2, base64, zip)" from strings for Python 3 compatibility 2017-11-14 14:51:26 +01:00
Adolfo Gómez García
b1ba02c1f3 Added support or "ignore ssl" cert to openstack (to allow self signed) 2017-11-13 09:23:02 +01:00
Adolfo Gómez García
cb13ac1617 Fixing up REST api for client access 2017-11-10 14:10:26 +01:00
Adolfo Gómez García
dcfc5357aa Merge remote-tracking branch 'origin/v2.2' 2017-11-09 08:20:24 +01:00
Adolfo Gómez García
de051d99ac Small fix 2017-11-09 08:20:03 +01:00
Adolfo Gómez García
86b12f82bf Merge remote-tracking branch 'origin/v2.2' 2017-11-07 11:10:01 +01:00
Adolfo Gómez García
fa1e6a69e8 Added "minValue" (cosmetic) to memory & storage sizes on oVirt Service 2017-11-07 11:09:14 +01:00
Adolfo Gómez García
5360864aed Merge remote-tracking branch 'origin/v2.2' 2017-11-06 15:03:12 +01:00
Adolfo Gómez García
417ddc6d8d * Fixed calendar, so next execution updates correctly on calendar rule
edition
2017-11-06 10:56:35 +01:00
Adolfo Gómez García
238f08b7dd Fixed id on auth list on REST api 2017-11-03 12:13:32 +01:00
Adolfo Gómez García
739ee728d3 upgraded to 2.2 2017-10-30 10:24:45 +01:00
Adolfo Gómez García
b8042f5aa7 Merged changes from 2.2 2017-10-26 14:02:07 +02:00
Adolfo Gómez García
09d6001ef1 Merged changes from 2.2 2017-10-26 14:01:44 +02:00
Adolfo Gómez García
c5b9233d4a Lots of new things
* Now we can have a short name for correct visualization of UDS Services
* We now can allow release services
2017-10-26 13:35:53 +02:00
Adolfo Gómez García
22a8933e82 Added "release" icon (trash) 2017-10-26 10:47:55 +02:00
Adolfo Gómez García
a185baccdd fixed so /rest is allowed 2017-10-25 13:45:22 +02:00
Adolfo Gómez García
9e2a5d8b07 Merge remote-tracking branch 'origin/v2.2' 2017-10-25 13:31:58 +02:00
Adolfo Gómez García
2521f41e76 fixed so now Redirect To Https will redirect ALWAYS :) 2017-10-25 13:26:08 +02:00
Adolfo Gómez García
3f1f2066b4 Merged 2.2 2017-10-19 14:31:16 +02:00
Adolfo Gómez García
815de57b86 fixed executing 2017-10-19 14:27:17 +02:00
Adolfo Gómez García
428ddd493c * Fixed actor version
* Fixed run
2017-10-19 10:38:41 +02:00
Adolfo Gómez García
4de93ddf1f adapted "run" windows registry key value, so it contains also arguments 2017-10-19 08:07:45 +02:00
Adolfo Gómez García
e6b75e3807 Now, run allows the use of a full command line with parameters 2017-10-18 15:27:56 +02:00
Adolfo Gómez García
e835c018b4 Logs for debugging 2017-10-18 13:18:37 +02:00
Adolfo Gómez García
6b88209a93 Coding style related 2017-10-17 14:16:00 +02:00
Adolfo Gómez García
eb7773fb74 Merge remote-tracking branch 'origin/v2.2' 2017-10-17 13:24:23 +02:00
Adolfo Gómez García
098620cd05 Fix 2017-10-17 13:20:20 +02:00
Adolfo Gómez García
1519d7b8a1 Merge remote-tracking branch 'origin/v2.2' 2017-10-17 13:15:17 +02:00
Adolfo Gómez García
214f9c397b Improved "ensureResponseIsOk" to detect non json responses... 2017-10-17 13:14:56 +02:00
Adolfo Gómez García
528d1d3acc Code slyling related 2017-10-16 19:24:28 +02:00
Adolfo Gómez García
f1158b9d42 Merge remote-tracking branch 'origin/v2.2' 2017-10-16 19:08:18 +02:00
Adolfo Gómez García
8a87c2e057 Fixes 2017-10-16 19:08:14 +02:00
Adolfo Gómez García
47ae741952 Fixed exception on "notifyReadyFromOsManager' 2017-10-16 19:06:41 +02:00
Adolfo Gómez García
97dde33c48 Merge remote-tracking branch 'origin/v2.2' 2017-10-16 18:51:59 +02:00
Adolfo Gómez García
907fad4a55 On 2.2 and later, we force the python executable to be "python2.7" on
linux platforms (except for thin udsclient, that will execute python)
2017-10-16 13:08:47 +02:00
Adolfo Gómez García
7c3e289a6b * Deadline now on its own method
* Removed deadline from notifyUrls. It was a nonsense :).
2017-10-16 12:15:46 +02:00
Adolfo Gómez García
1f5a647ff3 Deadline & Fake set to false
* Added deadline to notifyURLS
* Now Fake = False
2017-10-16 12:02:01 +02:00
Adolfo Gómez García
0eebe6a0a5 Fixed Removal of service without os manager on "logout" 2017-10-16 11:10:39 +02:00
Adolfo Gómez García
953d4ac0c9 ¡ 2017-10-13 13:09:15 +02:00
Adolfo Gómez García
b8c09f48db Code style related fixes (a lot!!! :) ) 2017-10-13 13:06:27 +02:00
Adolfo Gómez García
8aa1607fee Fixed auth log 2017-10-13 13:05:45 +02:00
Adolfo Gómez García
a890a957c8 Merge remote-tracking branch 'origin/v2.2' 2017-10-13 12:17:11 +02:00
Adolfo Gómez García
64ed0a9a1f Merge branch 'master' of github.com:dkmstr/openuds 2017-10-13 12:16:59 +02:00
Adolfo Gómez García
0aa1311836 Fixed small bug on "useEmptyCreds". In fact, not used but "bug" exists 2017-10-13 12:16:32 +02:00
Adolfo Gómez García
1ac61edebe small fixes 2017-10-12 02:54:56 +02:00
Adolfo Gómez García
6eaa3fd450 PEP & related 2017-10-12 02:28:43 +02:00
Adolfo Gómez García
81ce78bbbd PEP & related 2017-10-12 02:05:44 +02:00
Adolfo Gómez García
a1478a04d8 Fixing up PEP related 2017-10-12 01:27:26 +02:00
Adolfo Gómez García
6d49ae6667 Fixed IP Machines service && "execute" method of action calendars 2017-10-12 01:23:02 +02:00
Adolfo Gómez García
76ff66661d Merge remote-tracking branch 'origin/v2.2' 2017-10-11 17:55:46 +02:00
Adolfo Gómez García
e60a4bc8fa Added "udsvapp" possibility 2017-10-09 15:18:59 +02:00
Adolfo Gómez García
5ebd081ff3 Merge remote-tracking branch 'origin/v2.2' 2017-10-09 09:21:38 +02:00
Adolfo Gómez García
6e5b73c3b7 Catalan up to date 2017-10-09 09:21:23 +02:00
Adolfo Gómez García
71f04e46be from 2.2 2017-10-05 11:11:35 +02:00
Adolfo Gómez García
cbb6d48cfb Merge remote-tracking branch 'origin/v2.2' 2017-10-05 11:09:42 +02:00
Adolfo Gómez García
ae4330fc9d Fixed custom spice error message on dashboard 2017-10-05 11:08:43 +02:00
Adolfo Gómez García
04a862840c Updating from 2.2 2017-10-05 11:05:18 +02:00
Adolfo Gómez García
b7147661e7 * Fixed several translations && translations upgrade
* Also removed nonsense check for AD
2017-10-05 10:58:25 +02:00
Adolfo Gómez García
3c07d2f667 Several improvements to messages for transports, and minor client
scripts fixed

* Added custom error message for SPICE
* Remover "import QT" from NX client scripts
2017-10-04 11:30:29 +02:00
Adolfo Gómez García
f54d87a295 Fixed NX legacy password generator. The $ must not be scaped to "\$" :) 2017-10-04 11:26:16 +02:00
Adolfo Gómez García
9f386a8d01 Merge remote-tracking branch 'origin/v2.2' 2017-10-02 10:44:54 +02:00
Adolfo Gómez García
ac8a661182 Merge remote-tracking branch 'origin/v2.2' 2017-10-02 10:44:14 +02:00
Adolfo Gómez García
13f97248f6 Fixed OSManager to allow:
1.- Posting "POST"-only messages through "GET" method. (Only basic
messages)
 2.- Allow notify login/logout for user services without os manager
2017-10-02 10:36:45 +02:00
Adolfo Gómez García
786945fcbf Fixiung up og 2017-09-29 12:33:03 +02:00
Adolfo Gómez García
1070b716a2 Fixiung up og 2017-09-29 12:10:21 +02:00
Adolfo Gómez García
ad1bf0fe0b Fixiung up og 2017-09-29 11:49:37 +02:00
Adolfo Gómez García
df70dd4fd8 Fixiung up og 2017-09-29 11:37:37 +02:00
Adolfo Gómez García
3038c545ce Fixiung up og 2017-09-29 11:09:35 +02:00
Adolfo Gómez García
8d3b28e3cb Fixiung up og 2017-09-29 11:05:29 +02:00
Adolfo Gómez García
c431e39d4a Fixiung up og 2017-09-29 11:04:13 +02:00
Adolfo Gómez García
770f2eef09 Fixing up og 2017-09-29 11:01:28 +02:00
Adolfo Gómez García
e702ff6bca Fixing up OpenGnsys 2017-09-29 10:02:44 +02:00
Adolfo Gómez García
c6cc1f2b43 x2go transport fix 2017-09-27 08:07:43 +02:00
Adolfo Gómez García
06f5184ddd Fixed OpenGnsys 2017-09-25 14:18:19 +02:00
Adolfo Gómez García
a071ce5e3e Merge remote-tracking branch 'origin/v2.2' 2017-09-21 15:50:07 +02:00
Adolfo Gómez García
d5688116e3 Merge remote-tracking branch 'origin/v2.1' into v2.2 2017-09-21 15:49:39 +02:00
Adolfo Gómez García
1ec1104356 Fixed advanced "alt class" setting to be optional 2017-09-21 09:26:34 +02:00
Adolfo Gómez García
cd19eae182 Merge remote-tracking branch 'origin/v2.2' 2017-09-20 10:16:22 +02:00
Adolfo Gómez García
234eb98f0c Included support for retrieving secondary LDAP records so the
information can be completed
2017-09-20 10:14:05 +02:00
Adolfo Gómez García
3c7d0f0e71 Merge remote-tracking branch 'origin/v2.2' 2017-09-19 16:32:16 +02:00
Adolfo Gómez García
fa7ab534a3 Updated openGnsys 2017-09-19 08:33:24 +02:00
Adolfo Gómez García
ee661461a5 Fixed windows domain "release", so if domain is not found can be easyly
identified
2017-09-19 08:32:51 +02:00
Adolfo Gómez García
aecf6854a4 Fixed Domain Os Manager for 2017-09-18 14:13:49 +02:00
Adolfo Gómez García
a3eb1f6e3f Fixing up things for 2.5 2017-09-18 09:46:00 +02:00
Adolfo Gómez García
b9634bfd10 Merged 2.2 2017-09-18 08:35:16 +02:00
Adolfo Gómez García
34cd90f9a1 Fixed macosx CoRD transports && backported OpenGnsys 2017-09-18 08:33:17 +02:00
Adolfo Gómez García
5091b69219 Merge remote-tracking branch 'origin/v2.2' 2017-09-13 14:32:33 +02:00
Adolfo Gómez García
201fb8ff9b A couple of cosmetic fixes 2017-09-13 14:31:41 +02:00
Adolfo Gómez García
d071f86c31 Updated filesaver version 2017-09-13 08:26:51 +02:00
Adolfo Gómez García
1c133eacd0 Fix for Windomain 2017-09-13 08:22:10 +02:00
Adolfo Gómez García
89ed019788 Fixed WinDomainOsManager to, in case of several servers actin as DC, look for the machine on all of them 2017-09-07 15:05:44 +02:00
Adolfo Gómez García
9930f4323c Small fix for windomain os manager, to better inform on errors adding to
group.
2017-09-04 18:12:03 +02:00
Adolfo Gómez García
167eb1861c Merge remote-tracking branch 'origin/v2.2' 2017-09-01 13:06:03 +02:00
Adolfo Gómez García
115beefa8a Fixed RDP TRansport to leave enabled by default clipboard redirection, for backward consistence 2017-09-01 13:05:27 +02:00
Adolfo Gómez García
611f3590e6 Added clipboard enabling/disabling on transport 2017-09-01 12:37:13 +02:00
Adolfo Gómez García
59635839cf Added check so we cannot use "no credentials" with an sec that is not rdp and set default sec level to "rdp" for html5 transport 2017-09-01 12:36:39 +02:00
Adolfo Gómez García
0d13156edf Merge remote-tracking branch 'origin/v2.2' 2017-08-04 15:20:12 +02:00
Adolfo Gómez García
4853729d7c Merge remote-tracking branch 'origin/v2.1' into v2.2 2017-08-04 15:19:58 +02:00
Adolfo Gómez García
b5887ad1df Merged & fixed 2.2 changes 2017-08-02 16:29:47 +02:00
Adolfo Gómez García
a8b3b80f75 Merge remote-tracking branch 'origin/v2.1' into v2.2 2017-08-02 16:21:14 +02:00
Adolfo Gómez García
e5a6916109 Fixing up for 2.2 future release 2017-07-27 14:12:45 +02:00
Adolfo Gómez García
6a3093c49d Fix for miniamal server version to use "old method" 2017-07-27 14:04:36 +02:00
Adolfo Gómez García
498154ffb1 Updated version & Initial 2.2 uds client fix so it will support signed scripts 2017-07-27 14:01:04 +02:00
Adolfo Gómez García
9f441c6b22 merged from 2.1 update 1 changes 2017-07-17 13:15:08 +02:00
Adolfo Gómez
1e96bd2c13 Update README.md 2017-07-01 17:30:07 +02:00
Adolfo Gómez García
65d4e8f316 Fix so POSTs bodys of UDSActor are never empty 2017-06-27 10:40:15 +02:00
Adolfo Gómez García
876e9ee3b5 Merge remote-tracking branch 'origin/v2.1' 2017-06-20 08:18:36 +02:00
Adolfo Gómez García
59e670f44e Merge remote-tracking branch 'origin/v2.1' 2017-06-08 11:34:12 +02:00
Adolfo Gómez García
2117433f8f Merge remote-tracking branch 'origin/v2.1' 2017-06-08 11:17:57 +02:00
Adolfo Gómez García
7d39e15c18 removed checkpoints 2017-06-06 13:17:55 +02:00
Adolfo Gómez García
77c7d71a96 Merge remote-tracking branch 'origin/v2.1' 2017-06-06 13:16:20 +02:00
Adolfo Gómez García
ca877e513f Merge remote-tracking branch 'origin/v2.1' 2017-06-06 13:09:46 +02:00
Adolfo Gómez García
648aad97ea Merge remote-tracking branch 'origin/v2.1' 2017-06-01 11:38:24 +02:00
Adolfo Gómez García
e8ecf3d057 Merged changes to 2.1 2017-06-01 11:36:07 +02:00
Adolfo Gómez García
d8fa71c326 Merge remote-tracking branch 'origin/v2.1' 2017-05-18 12:39:42 +02:00
Adolfo Gómez García
aa4a96663c * Fixed a bug with removal/checkForRemoval on UserServiceManager that,
in case of a publication that finishes instantly (no one before 2.5
version), the valid services got into error instead of removal process.
* Added OpenGnsys, now works correctly (needs to do real tests against)
* Fixed template getting from adm interface for django >1.10
2017-05-18 12:31:03 +02:00
Adolfo Gómez García
8dc0239548 * Added "fake" opengnsys server
* Advanced with provider & service for Opengnsys
2017-05-17 13:55:38 +02:00
Adolfo Gómez García
0d02dcb83b Merge remote-tracking branch 'origin/v2.1' 2017-05-16 09:37:38 +02:00
Adolfo Gómez García
e5a770345b Merge remote-tracking branch 'origin/v2.1' 2017-05-16 09:32:03 +02:00
Adolfo Gómez García
922659d284 Merge remote-tracking branch 'origin/v2.1' 2017-05-13 18:37:13 +02:00
Adolfo Gómez García
c846bae301 Fixed report generation on 2.5 2017-05-10 10:48:37 +02:00
Adolfo Gómez García
bdefd11ade Fixing up proxy 2017-05-10 09:50:49 +02:00
Adolfo Gómez García
e8888afd22 Merge remote-tracking branch 'origin/v2.1' 2017-05-09 10:20:14 +02:00
Adolfo Gómez García
58d0f10eb0 Merge remote-tracking branch 'origin/v2.1' 2017-05-09 09:42:18 +02:00
Adolfo Gómez García
72eedd8978 Merge remote-tracking branch 'origin/v2.1' 2017-05-08 09:33:42 +02:00
Adolfo Gómez García
b2851b3c65 Merge remote-tracking branch 'origin/v2.1' 2017-05-08 09:31:32 +02:00
Adolfo Gómez García
b8e1e17735 Merge remote-tracking branch 'origin/v2.1' 2017-04-19 08:23:44 +02:00
Adolfo Gómez García
06d4909447 Merge remote-tracking branch 'origin/v2.1' 2017-04-18 00:32:44 +02:00
Adolfo Gómez
498a1a51eb Merge pull request #6 from glyptodon/update-glypto-copyright
Update Glyptodon copyright notice in applicable files.
2017-04-18 00:24:31 +02:00
Adolfo Gómez
3862605e3a Merge pull request #4 from glyptodon/remove-unused
Remove unused portions of legacy Guacamole UI.
2017-04-18 00:23:41 +02:00
Adolfo Gómez
b713ac9172 Merge pull request #5 from glyptodon/check-window-objects
Verify existence of localStorage / opener before attempting to reference.
2017-04-18 00:23:30 +02:00
Michael Jumper
1e96917c27 Remove unused CSS files. 2017-04-17 14:42:50 -07:00
Michael Jumper
5adc47fab8 Remove old, commented-out code. 2017-04-17 14:42:50 -07:00
Michael Jumper
2ca3b7ba25 Update copyright notice in applicable files. 2017-04-17 14:42:14 -07:00
Michael Jumper
8af8c91e2e Do not attempt to reference opener unless it is actually defined. 2017-04-17 14:41:57 -07:00
Michael Jumper
c7ba6e84b9 Do not attempt to reference localStorage unless it has been verified to exist. 2017-04-17 14:41:57 -07:00
Adolfo Gómez García
469fbaacda Merge remote-tracking branch 'origin/v2.1' 2017-04-17 23:11:59 +02:00
Michael Jumper
ba53a37d6f Remove unused GuacUI interface component classes. 2017-04-17 13:28:15 -07:00
Michael Jumper
d7006264ad Remove unused GuacUI utility functions. 2017-04-17 13:28:15 -07:00
Michael Jumper
3acda2fa28 Remove legacy code driving non-existant administration UI. 2017-04-17 13:28:15 -07:00
Michael Jumper
543e16500f Remove tracking of connection history and thumbnails. 2017-04-17 13:28:14 -07:00
Adolfo Gómez García
2a0a243dd1 merged 2.1 2017-04-10 02:45:17 +02:00
Adolfo Gómez García
cdb3a2e8df Fixed version of guacamole transport 2017-04-10 02:40:32 +02:00
Adolfo Gómez
e7f6d8ddeb Merge pull request #3 from glyptodon/update-guac-api
Update to latest Guacamole API versions.
2017-04-10 02:33:59 +02:00
Michael Jumper
f68f78f48c Update to latest Guacamole API versions. 2017-04-08 16:58:03 -07:00
Adolfo Gómez García
c5eb0432b3 Merge remote-tracking branch 'origin/v2.1' 2017-04-06 20:33:16 +02:00
Adolfo Gómez García
d6539dc543 Added visible attribute to services pools 2017-04-06 20:30:49 +02:00
Adolfo Gómez García
f2523fa8f2 Merge remote-tracking branch 'origin/v2.1' 2017-04-06 19:56:29 +02:00
Adolfo Gómez García
eb6ac84b5b Merge remote-tracking branch 'origin/v2.1' 2017-03-31 10:38:05 +02:00
Adolfo Gómez García
3999507129 Merge remote-tracking branch 'origin/v2.1' 2017-03-31 08:08:31 +02:00
Adolfo Gómez García
03db789be9 Merge remote-tracking branch 'origin/v2.1' 2017-03-29 13:33:59 +02:00
Adolfo Gómez García
4ce97b4e7a removed duplicate except 2017-03-29 13:07:40 +02:00
Adolfo Gómez García
621722f5e3 Merge remote-tracking branch 'origin/v2.1' 2017-03-29 13:03:53 +02:00
Adolfo Gómez García
897682eae4 Merge remote-tracking branch 'origin/v2.1' 2017-03-29 11:00:32 +02:00
Adolfo Gómez García
5a3c14db2d Fixed SPICE with powered off machines (fixed check connection) 2017-03-29 10:23:07 +02:00
Adolfo Gómez García
f531d338a0 Merge remote-tracking branch 'origin/v2.1' 2017-03-28 15:12:50 +02:00
Adolfo Gómez García
615ed11197 Fixing up opennebula things 2017-03-28 14:27:36 +02:00
Adolfo Gómez García
5037fd2bd4 Merge remote-tracking branch 'origin/v2.1' 2017-03-27 10:36:48 +02:00
Adolfo Gómez García
9cf5291064 Merge remote-tracking branch 'origin/v2.1' 2017-03-23 14:04:55 +01:00
Adolfo Gómez García
c1ac0d4734 merged ipc from actor 2.1 2017-03-23 10:01:27 +01:00
Adolfo Gómez García
d838c8c9fe Merge remote-tracking branch 'origin/v2.1' 2017-03-22 15:07:03 +01:00
Adolfo Gómez García
fd056eab9f Merge remote-tracking branch 'origin/v2.1' 2017-03-22 12:43:09 +01:00
Adolfo Gómez García
cbc66f4017 Merge remote-tracking branch 'origin/v2.1' 2017-03-22 11:55:51 +01:00
Adolfo Gómez García
f5d1e39121 Fixes for ovirt cleanup 2017-03-22 11:53:59 +01:00
Adolfo Gómez García
c981935270 Fixes for ovirt housekeeping 2017-03-22 11:10:28 +01:00
Adolfo Gómez García
8fb4f190e6 Added defred removal for cleaning up on ovirt as done on other
hypervisors
2017-03-22 10:47:56 +01:00
Adolfo Gómez García
4e2e023ac6 Merge remote-tracking branch 'origin/v2.1' 2017-03-22 10:13:48 +01:00
Adolfo Gómez García
9c0c3bcade Merge remote-tracking branch 'origin/v2.1' 2017-03-22 01:55:03 +01:00
Adolfo Gómez García
5287bfbe9c merged 2.1 fixes 2017-03-20 21:23:03 +01:00
Adolfo Gómez García
2acaa74270 Fixes & merges 2017-03-17 13:39:54 +01:00
Adolfo Gómez García
d816b141b1 Merge remote-tracking branch 'origin/v2.1' 2017-03-16 15:34:08 +01:00
Adolfo Gómez García
4793667435 * Fixed signatures && rdp transport direct now works fine again 2017-03-15 10:54:06 +01:00
Adolfo Gómez García
f86c5942f8 Merge remote-tracking branch 'origin/v2.1' 2017-03-15 10:03:37 +01:00
Adolfo Gómez García
a5b17d3015 Upgrading transports to new secured method 2017-03-15 09:46:51 +01:00
Adolfo Gómez García
1af160608e Merge remote-tracking branch 'origin/v2.1' 2017-03-14 13:46:20 +01:00
Adolfo Gómez García
f244bb7ece Merge remote-tracking branch 'origin/v2.1' 2017-03-10 13:24:17 +01:00
Adolfo Gómez García
55964b7e3f Fixing up for signed-client code 2017-03-10 13:18:34 +01:00
Adolfo Gómez García
35a3e48b89 merged 2017-03-10 10:04:19 +01:00
Adolfo Gómez García
9944854b7b Working on new signed client scripts 2017-03-10 10:02:16 +01:00
Adolfo Gómez García
6e6d7a8795 Fixed client & signature for RDP tunnel 2017-03-08 17:43:09 +01:00
Adolfo Gómez García
bf85332492 Merge remote-tracking branch 'origin/v2.1' 2017-03-08 17:38:21 +01:00
Adolfo Gómez García
0b928476d1 Adding signatures & signature checking for client scripts 2017-03-08 15:23:37 +01:00
Adolfo Gómez García
88fb4ce1b7 Merge remote-tracking branch 'origin/v2.1' 2017-03-07 10:41:17 +01:00
Adolfo Gómez García
1ad7385954 Merge remote-tracking branch 'origin/v2.1' 2017-03-06 14:17:28 +01:00
Adolfo Gómez García
cdac261561 Merge remote-tracking branch 'origin/v2.1' 2017-03-06 09:31:03 +01:00
Adolfo Gómez García
8ebc0aeaaf Refactoring 2017-03-06 09:30:36 +01:00
Adolfo Gómez García
55dd16d508 Refactoring fixing some code issues 2017-03-03 08:32:46 +01:00
Adolfo Gómez García
70dc779fc4 refactoring & fixes 2017-02-27 09:41:32 +01:00
Adolfo Gómez García
240be81f26 Big refactoring towards future 3.x version 2017-02-17 20:22:52 +01:00
Adolfo Gómez García
c80535fabb small fix for base rdp to backwards compatibility 2017-02-14 10:27:48 +01:00
Adolfo Gómez García
a499f13e56 fixed urls for dispatchers for django 1.10 2017-02-14 09:56:13 +01:00
Adolfo Gómez García
4e8b267da5 Merge remote-tracking branch 'origin/v2.1' 2017-02-14 09:54:49 +01:00
Adolfo Gómez García
bb41021eee Merge remote-tracking branch 'origin/v2.1' 2017-02-13 17:28:46 +01:00
Adolfo Gómez García
c7d9ed8d78 Fixes from 2.1 merge 2017-02-13 17:23:48 +01:00
Adolfo Gómez García
053eb55355 Merge remote-tracking branch 'origin/v2.1' 2017-02-13 17:09:16 +01:00
Adolfo Gómez García
9084c0e8b0 Merged from 2.1 2017-02-09 20:13:51 +01:00
Adolfo Gómez García
9c3d67a34c Fixes to OG 2017-02-09 20:04:38 +01:00
Adolfo Gómez García
0d42fbdc84 Login & Info 2017-02-09 08:21:14 +01:00
Adolfo Gómez García
08f442b809 Started OpenGnsys UDS Provider 2017-02-09 08:12:56 +01:00
Adolfo Gómez García
c3c11f3326 Fixed merge mistake 2017-02-07 07:55:00 +01:00
Adolfo Gómez García
f1a7c4661e Merge remote-tracking branch 'origin/v2.1' 2017-02-07 07:52:47 +01:00
Adolfo Gómez García
84d3a2d67f Added sample .service 2017-02-07 07:52:24 +01:00
Adolfo Gómez García
186190ddff * Fixed Proxy model (1 more fix to go)
* Fixed names on coffee script files
* Added proxies admin interface
2017-01-31 09:26:18 +01:00
Adolfo Gómez García
9e2a1cc9f9 done accounting usage of services 2017-01-31 07:20:23 +01:00
Adolfo Gómez García
310d3ca618 Merge remote-tracking branch 'origin/v2.1' 2017-01-30 10:58:30 +01:00
Adolfo Gómez García
c8d26199cd Updating dashboard 2017-01-30 10:58:21 +01:00
Adolfo Gómez García
a601220771 Updating dashboard to include accounts & proxy 2017-01-30 08:17:56 +01:00
Adolfo Gómez García
9b0e1eb7ce updated sample settings tu current version 2017-01-26 06:56:46 +01:00
Adolfo Gómez García
eeaef4604a Merge remote-tracking branch 'origin/v2.1' 2017-01-26 06:30:25 +01:00
Adolfo Gómez García
cd45b9359c Merged from 2.1 2017-01-25 12:36:42 +01:00
Adolfo Gómez García
1b1ec6d736 Merge remote-tracking branch 'origin/v2.1' 2017-01-25 12:30:39 +01:00
Adolfo Gómez García
d9454fea63 Merge remote-tracking branch 'origin/v2.1' 2017-01-24 09:57:29 +01:00
Adolfo Gómez García
3f110fb6c6 Merged from 2.1 2017-01-23 11:54:35 +01:00
Adolfo Gómez García
09a49a1cb2 * Renamed udsProxy to udsproxy
* Woring first version proxy
* Added basic sample config file for udsproxy
* Added daemonize example for udsproxy
Fixed os manager treatment of ready
2017-01-20 10:29:33 +01:00
Adolfo Gómez García
d42482b6c3 Removing qt imports from plugin scripts 2017-01-20 06:54:27 +01:00
Adolfo Gómez García
83ed44b399 Merge remote-tracking branch 'origin/v2.1' 2017-01-20 05:35:16 +01:00
Adolfo Gómez García
d1f4ce0884 * Added new images
* Fixes on Dashboard (advanced new sidevar disposition)
* Added Proxy element to DB (needs to finish this)
2017-01-20 04:58:05 +01:00
Adolfo Gómez García
d3417a1c79 Implemented "proxyRequest" method 2017-01-20 02:19:49 +01:00
Adolfo Gómez García
1a2619c170 * Advancing on proxy
* Preparing UDS to allow "proxied" requests to services (to simplify
access to remote "hidden" networks)
2017-01-19 18:50:00 +01:00
Adolfo Gómez García
ad5b8dcded Added support for using a proxy on requests methods to services 2017-01-19 18:38:28 +01:00
Adolfo Gómez García
16997b6298 Merging 2.1 fixes 2017-01-19 12:52:33 +01:00
Adolfo Gómez García
519e36e7bd Advancing on admin dashboard & accounting 2017-01-19 12:47:01 +01:00
Adolfo Gómez García
dcc870d8e0 starting also proxy 2017-01-19 04:55:44 +01:00
Adolfo Gómez García
ab8cb7a7e0 Initial UDS Proxy for networks behind firewalls 2017-01-18 20:25:13 +01:00
Adolfo Gómez García
5897cf33f2 Fixed 0024 migration to include also tags
Started accounts admin gui
2017-01-17 08:57:17 +01:00
Adolfo Gómez García
4401985f3c Adding constraints to cache and advancing so we can make use efficiently a predefined pool with uds & uds actor 2017-01-12 03:27:42 +01:00
Adolfo Gómez García
4e972e0aff * Added background color for selected items on admin choices
* Fixes to sample settings file for django 1.10
2017-01-11 02:27:29 +01:00
Adolfo Gómez García
4a16707be3 Merge remote-tracking branch 'origin/v2.1' 2017-01-10 17:20:07 +01:00
Adolfo Gómez García
bf131f896c Merged 2.1 changes 2017-01-10 02:24:04 +01:00
Adolfo Gómez García
506364d578 Merged with 2.1 2016-11-22 11:14:38 +01:00
Adolfo Gómez García
f1704787b8 Merge remote-tracking branch 'origin/v2.1' 2016-10-14 10:59:24 +02:00
Adolfo Gómez García
eb3c61f0ea merge changes from 2.1 2016-10-14 09:33:53 +02:00
Adolfo Gómez García
0711bf5db3 merged from 2.1 2016-10-14 06:56:43 +02:00
Adolfo Gómez García
83a94d0ece updated operations from previous releases 2016-10-14 06:54:38 +02:00
Adolfo Gómez García
5e0ba4990a Merge remote-tracking branch 'origin/v2.1' 2016-10-10 08:31:48 +02:00
Adolfo Gómez García
e7b2811fa1 Added migration 2016-10-10 07:59:31 +02:00
Adolfo Gómez García
f9f1413a3e Updating to 2.1 intermediate version 2016-10-10 07:53:28 +02:00
Adolfo Gómez García
c11953cd03 Merge remote-tracking branch 'origin/v2.1' 2016-10-10 07:52:20 +02:00
Adolfo Gómez García
148a8a1ffc Merge remote-tracking branch 'origin/v2.1' 2016-10-10 07:42:41 +02:00
Adolfo Gómez García
1658e9278a Merge remote-tracking branch 'origin/v2.0' 2016-10-10 07:22:45 +02:00
Adolfo Gómez García
7fc9adae8b Merged 2.0 fixes 2016-09-27 15:52:47 +02:00
Adolfo Gómez García
780f2b4a05 Fixed xen default shadow memory value 2016-09-27 15:51:16 +02:00
Adolfo Gómez García
14e42a6382 Fixing up accounting methods.
Now we have included an "temporal updating", so running services will
get their accounting updated every minute
2016-09-21 10:20:04 +02:00
Adolfo Gómez
d439f78f11 Merge pull request #2 from johnp/patch-1
Add necessary packages to requirements.txt
2016-09-20 08:18:33 +02:00
Johannes Pfrang
610e88cf09 Add necessary packages to requirements.txt
This does not include `pycairo`, as it does not provide an egg and therefore can't be installed via pip.
We should consider `cairocffi` instead, but `pycha` (last update 2013) would have to be patched then.
2016-09-19 11:51:05 +02:00
Adolfo Gómez García
293dd2d9a1 Forgot this :) 2016-09-16 08:30:37 +02:00
Adolfo Gómez García
57b5ae6dcf Fixes & corrections to initial usage accounting.
Fixes.
We already keep "stats" tables, but we think it is better to start using
a well-known location for accounting on usage.
2016-09-16 08:29:52 +02:00
Adolfo Gómez García
8c2b7bf4bb Started pools usage accounting mechanism 2016-09-16 07:55:24 +02:00
Adolfo Gómez García
3113524197 New fix for windomain.. :) 2016-09-12 18:50:40 +02:00
Adolfo Gómez García
2bf6a92de3 Removev "space removal" from OU for WinDomain OS Manager, and removed de
"add" of the dc...dc.
2016-09-12 18:47:35 +02:00
Adolfo Gómez García
8ac5cc068d Merge remote-tracking branch 'origin/v2.0' 2016-09-11 23:04:02 +02:00
Adolfo Gómez García
729b0310bd Merge remote-tracking branch 'origin/v2.0' 2016-09-11 22:21:30 +02:00
Adolfo Gómez García
d229dab41e Finished basic support for ovirt4.
Now we need to have installed ovirt-engine-sdk-python 3.x and 4.x in
order to work properly
2016-09-11 22:13:11 +02:00
Adolfo Gómez García
fb9fa08090 * Adding support for ovirt 4.x keeping support for ovirt 3.x
Big changes on Python ovirt SDK API...
2016-09-11 20:53:45 +02:00
Adolfo Gómez García
682ce5d69f Adding phisical server for user (1 to N users) 2016-09-07 16:46:58 +02:00
Adolfo Gómez García
397bd29ce6 Started experimental x2go support (for linux clients only right now) 2016-09-07 15:33:10 +02:00
Adolfo Gómez García
cba154944d Now password fields are repeated, so we can ensure the vale before
submiting (on admin dashboard)
2016-09-06 23:29:13 +02:00
Adolfo Gómez García
efacaeec7f Viz command no more works correctly (and in fact, was never used), se we
have removed it
2016-08-26 03:08:01 +02:00
Adolfo Gómez García
05c00eb13a Fixed taskManager command for 2.0 also :) 2016-08-26 03:05:54 +02:00
Adolfo Gómez García
9347b3c29b Aded build version to be current datetime. On production environments,
better replace this with datetime/git commit
2016-08-26 03:01:13 +02:00
Adolfo Gómez García
8ba4a9827b Addapted middleware from pre-1.10 to post-1.10 2016-08-26 02:53:38 +02:00
Adolfo Gómez García
14bbf56145 Fixes to work with Django 1.0.
From this commit on master onwards, UDS needs Django 1.10 or greater.
Probably will need some more fixes, but basic ones are done
2016-08-26 02:37:30 +02:00
Adolfo Gómez García
71076a1b63 Merge remote-tracking branch 'origin/v2.0' 2016-08-25 13:21:36 +02:00
Adolfo Gómez García
36dc8ecfd5 Added support for filtering transport on device basis 2016-08-24 11:27:34 +02:00
Adolfo Gómez García
34c6dd9cb5 Now we can notify source platform on REST API login. If not specified,
will try to guest from User Agent String.

This is important because we will add filters by platform to transports,
and we will need to know it.
2016-08-24 09:21:34 +02:00
Adolfo Gómez García
c34d70231c Now we can notify source platform on REST API login. If not specified,
will try to guest from User Agent String.

This is important because we will add filters by platform to transports,
and we will need to know it.
2016-08-24 09:21:34 +02:00
Adolfo Gómez García
5eb9af39f6 Merge remote-tracking branch 'origin/v2.0' 2016-08-17 20:49:23 +02:00
Adolfo Gómez García
1dc58be4fa Merge remote-tracking branch 'origin/v2.0' 2016-07-28 13:36:01 +02:00
Adolfo Gómez García
1e7b729164 Updated 2.x translations 2016-07-26 15:06:29 +02:00
Adolfo Gómez
4a021a4ed4 Merge pull request #1 from glyptodon/cleanup
Clean up and upgrade Guacamole transport backend.
2016-07-26 03:25:09 +02:00
Michael Jumper
7b86ec97eb Include port number in service base URI of OpenUDS. 2016-07-25 03:48:54 -07:00
Michael Jumper
8bb9bf11d5 Read configuration from servlet context. 2016-07-25 03:48:22 -07:00
Adolfo Gómez García
d34e80e360 Merged fixes from 2.0 2016-07-22 18:00:50 +02:00
Adolfo Gómez García
a8853930a2 Minor fixes for actor 2016-07-19 14:18:29 +02:00
Adolfo Gómez García
ac02161eb9 Adding ticket messaging support on actor & server 2016-07-19 13:56:11 +02:00
Adolfo Gómez García
957403a23f Merge remote-tracking branch 'origin/v2.0' 2016-07-18 20:13:30 +02:00
Adolfo Gómez García
c5582c3092 Fixing open nebula 2016-07-18 20:13:14 +02:00
Adolfo Gómez
1c9bc68a66 Fixed header date 2016-07-14 10:50:37 +02:00
Adolfo Gómez García
73192bb515 Merge remote-tracking branch 'origin/v2.0' 2016-07-12 01:44:42 +02:00
Adolfo Gómez
d57ef0cc5e Update README.md 2016-07-11 22:20:07 +02:00
Adolfo Gómez García
105df6e0fb Merge remote-tracking branch 'origin/v2.0' 2016-07-11 22:17:47 +02:00
Adolfo Gómez García
cd859ca0cb Merge remote-tracking branch 'origin/v2.0' 2016-07-11 22:06:23 +02:00
Adolfo Gómez García
5cb5b5f343 Adapted OpenNebula to work with version 4 & version 5 (more tests are
needed right now)
2016-07-11 21:46:42 +02:00
Adolfo Gómez García
f0049cb826 Removing oca python module and using xmlrpc to access opennebula (we have found problems with oca python accesing OpenNebula 5.0) 2016-07-11 03:44:38 +02:00
Adolfo Gómez García
643d8b40e1 Moved to 0023 migration for adding secure tickets 2016-07-10 21:00:49 +02:00
Adolfo Gómez García
e2db15ead7 Merged with 2.0 fixes 2016-07-10 20:59:31 +02:00
Michael Jumper
24dbd884ad Restore use of WebSocket. 2016-07-08 15:45:36 -07:00
Michael Jumper
97fd0b8272 Migrate to Guice and upstream HTTP / WebSocket tunnel implementations. Clarify licensing. 2016-07-08 15:45:36 -07:00
Michael Jumper
6096313cae Add NOTICE file from upstream Apache Guacamole project. 2016-07-07 17:05:19 -07:00
Michael Jumper
6401ca3f05 Correct wording of readme.txt with respect to licensing and upstream project. 2016-07-07 17:03:52 -07:00
Michael Jumper
9f37956e99 Remove IDE-specific cruft. Ignore going forward. 2016-07-07 16:59:56 -07:00
Michael Jumper
0b48306f3e Remove definition for non-existent and unused servlet. 2016-07-07 14:41:06 -07:00
Adolfo Gómez García
83cdd9446b Fixing up password & rdp transport to allow working with tickets 2016-06-28 10:33:10 +02:00
Adolfo Gómez García
3f7fb77086 Started to implement a mechanism to allow a secure sso.
We have started a way for pass the credentials from UDS directly to
VM, without passing it to UDS.
  Currently we are working on a credential provider for windows, that
will interact with UDS. We will release this provider as soon as it is
functional ;-)
2016-06-17 12:15:07 +02:00
Adolfo Gómez García
2683fddfc1 * Added secure tickets, to be used only with secure known sources
(actors, tunnelers, ...)
2016-06-15 01:05:10 +02:00
Adolfo Gómez García
9c49158de2 * Updated translations
* Fixed some literals
2016-06-07 18:30:50 +02:00
1494 changed files with 135330 additions and 128345 deletions

7
.gitignore vendored
View File

@@ -7,6 +7,7 @@
*_enterprise.*
.settings/
.ipynb_checkpoints
.idea/
# Debian buildings
*.debhelper*
@@ -31,9 +32,6 @@
/client/administration/installer/UDSAdminInstaller/MSChart.exe
/client/administration/installer/UDSAdminInstaller/UDSAdminSetup.exe
# /guacamole-tunnel/
/guacamole-tunnel/target
# /linuxActor/
/linuxActor/udsactor_*
@@ -164,3 +162,6 @@
/udsService/udsgui/obj/Debug
/udsService/udsgui/obj/Release
/udsService/udsgui/obj/x86
.vscode
.mypy_cache

View File

@@ -3,5 +3,13 @@
openuds
=======
OpenUDS Is an Open Source Source project, initiated by Spanish Company Virtualcable and released Open Source with the help of several Spanish Universities.
OpenUDS (Universal Desktop Services) is a multiplatform connection broker for:
- VDI: Windows and Linux virtual desktops administration and deployment
- App virtualization
- Desktop services consolidation
This is an Open Source Source project, initiated by Spanish Company Virtualcable and released Open Source with the help of several Spanish Universities.
Any help provided will be welcome.
**Note: Master version is always under heavy development and it is not recommended for use, it will probably have unfixed bugs. Please use the latest stable branch.**

View File

@@ -1,6 +1 @@
* Add "Scheduler" to manage pools, and posibbly other operations (Expect to release an version 1.7.1??)
* Improve stats
* Add App Virtualization support
* Add "Meta Pools"
* Manage to connect several UDS in "tree", so one UDS can be provider o another UDS

View File

@@ -1 +1 @@
2.1.0
3.5.0

2
actor/.env Normal file
View File

@@ -0,0 +1,2 @@
PYTHONPATH=./src:${PYTHONPATH}

8
actor/.gitignore vendored Normal file
View File

@@ -0,0 +1,8 @@
# Debian source builds
udsactor_*.dsc
udsactor_*.tar.xz
udsactor_*.buildinfo
udsactor_*.changes
# And binaries
udsactor*.deb
udsactor*.rpm

4
actor/deps.txt Normal file
View File

@@ -0,0 +1,4 @@
Linux:
python3-prctl (recommended, but not required in fact)
python3-pyqt5

91
actor/linux/Makefile Normal file
View File

@@ -0,0 +1,91 @@
#!/usr/bin/make -f
# -*- makefile -*-
.PHONY: install-udsactor install-udsactor-unmanaged
# Directories
SOURCEDIR := ../src
LIBDIR := $(DESTDIR)/usr/share/UDSActor
BINDIR := $(DESTDIR)/usr/bin
SBINDIR = $(DESTDIR)/usr/sbin
APPSDIR := $(DESTDIR)/usr/share/applications
CFGDIR := $(DESTDIR)/etc/udsactor
SYSTEMDIR := $(DESTDIR)/etc/systemd/system
POLKITDIR := $(DESTDIR)/usr/share/polkit-1/actions/
XDGAUTOSTARTDIR := $(DESTDIR)/etc/xdg/autostart
KDEAUTOSTARTDIR := $(DESTDIR)/usr/share/autostart
PYC := $(shell find $(SOURCEDIR) -name '*.py[co]')
CACHES := $(shell find $(SOURCEDIR) -name '__pycache__' -o -name '.mypy_cache')
clean:
rm -rf $(PYC) $(CACHES) $(DESTDIR)
install-udsactor: udsactor
install-udsactor-unmanaged: udsactor udsactor-unmanaged
udsactor-unmanaged:
# Overwrite udsactor config is what to be done
cp scripts/UDSActorConfig-unmanaged $(SBINDIR)/UDSActorConfig
udsactor:
rm -rf $(DESTDIR)
mkdir -p $(LIBDIR)
mkdir -p $(BINDIR)
mkdir -p $(SBINDIR)
mkdir -p $(APPSDIR)
mkdir -p $(CFGDIR)
mkdir -p $(POLKITDIR)
mkdir -p $(XDGAUTOSTARTDIR)
mkdir -p $(KDEAUTOSTARTDIR)
mkdir $(LIBDIR)/img
# Cleans up .pyc and cache folders
rm -f $(PYC) $(CACHES)
cp -r $(SOURCEDIR)/udsactor $(LIBDIR)/udsactor
cp $(SOURCEDIR)/img/uds-icon.png $(LIBDIR)/img
cp $(SOURCEDIR)/actor_*.py $(LIBDIR)
# QT Dialogs & resources
cp -r $(SOURCEDIR)/ui $(LIBDIR)/ui
# Menu GUI app
cp desktop/UDS_Actor_Configuration.desktop $(APPSDIR)
# Autostart elements for gnome/kde
cp desktop/UDSActorTool.desktop $(XDGAUTOSTARTDIR)
cp desktop/UDSActorTool.desktop $(KDEAUTOSTARTDIR)
# scripts
cp scripts/udsactor $(BINDIR)
cp scripts/UDSActorConfig $(SBINDIR)
cp scripts/UDSActorConfig-pkexec $(SBINDIR)
cp scripts/UDSActorTool $(BINDIR)
cp scripts/UDSActorTool-startup $(BINDIR)
cp scripts/udsvapp ${BINDIR}
# Policy to run as administrator
cp policy/org.openuds.pkexec.UDSActorConfig.policy $(POLKITDIR)
# Fix permissions
chmod 755 $(BINDIR)/udsactor
chmod 755 $(BINDIR)/udsvapp
chmod 755 $(BINDIR)/UDSActorTool-startup
chmod 755 $(SBINDIR)/UDSActor*
chmod 755 $(LIBDIR)/actor_*.py
chmod 644 $(POLKITDIR)/org.openuds.pkexec.UDSActorConfig.policy
# If for red hat based, copy init.d
ifeq ($(DISTRO),rh)
mkdir -p $(SYSTEMDIR)
cp debian/udsactor.service $(SYSTEMDIR)/
endif
# chmod 0755 $(BINDIR)/udsactor
uninstall:
rm -rf $(LIBDIR)
# rm -f $(BINDIR)/udsactor
rm -rf $(CFGDIR)

36
actor/linux/build-packages.sh Executable file
View File

@@ -0,0 +1,36 @@
#!/bin/bash
VERSION=`cat ../../VERSION`
RELEASE=1
top=`pwd`
# Debian based
dpkg-buildpackage -b
cat udsactor-template.spec |
sed -e s/"version 0.0.0"/"version ${VERSION}"/g |
sed -e s/"release 1"/"release ${RELEASE}"/g > udsactor-$VERSION.spec
# Now fix dependencies for opensuse
# Note that, although on opensuse the library is "libXss1" on newer,
# the LibXscrnSaver is a "capability" and gets libXss1 installed
# So right now, we only need 1 uds actor for both platforms.
# cat udsactor-template.spec |
# sed -e s/"version 0.0.0"/"version ${VERSION}"/g |
# sed -e s/"name udsactor"/"name udsactor-opensuse"/g |
# sed -e s/"libXScrnSaver"/"libXss1"/g > udsactor-opensuse-$VERSION.spec
#for pkg in udsactor-$VERSION.spec udsactor-opensuse-$VERSION.spec; do
for pkg in udsactor-$VERSION.spec; do
rm -rf rpm
for folder in SOURCES BUILD RPMS SPECS SRPMS; do
mkdir -p rpm/$folder
done
rpmbuild -v -bb --clean --buildroot=$top/rpm/BUILD/$pkg-root --target noarch $pkg 2>&1
done
rpm --addsign ../*rpm
#rm udsactor-$VERSION

2
actor/linux/debian/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
/udsactor/
/udsactor-unmanaged/

View File

@@ -0,0 +1,59 @@
udsactor (3.5.0) stable; urgency=medium
* Upgraded to 3.5.0 release
-- Adolfo Gómez García <agomez@virtualcable.es> Fri, 23 Oct 2020 8:00:00 +0200
udsactor (3.0.0) stable; urgency=medium
* Upgraded to 3.0.0 release
-- Adolfo Gómez García <agomez@virtualcable.es> Wed, 10 Jul 2019 9:24:10 +0200
udsactor (2.2.1) stable; urgency=medium
* Upgraded to 2.2.1 release
-- Adolfo Gómez García <agomez@virtualcable.es> Thu, 2 Oct 2018 12:44:12 +0200
udsactor (2.2.0) stable; urgency=medium
* Upgraded to 2.2.0 release
-- Adolfo Gómez García <agomez@virtualcable.es> Thu, 19 Oct 2017 16:44:12 +0200
udsactor (2.1.0) stable; urgency=medium
* Fixes for 2.1.0 release
-- Adolfo Gómez García <agomez@virtualcable.es> Tue, 19 Jan 2017 08:00:22 +0200
udsactor (2.0.0) stable; urgency=medium
* Upgrade for 2.0.0
-- Adolfo Gómez García <agomez@virtualcable.es> Tue, 01 Mar 2016 03:39:21 +0100
udsactor (1.9.1) stable; urgency=medium
* Upgrade for 1.9.1
-- Adolfo Gómez García <agomez@virtualcable.es> Tue, 01 Mar 2016 03:19:21 +0100
udsactor (1.9.0) stable; urgency=medium
* Upgrade for 1.9.0 (fixed package version)
-- Adolfo Gómez García <agomez@virtualcable.es> Tue, 05 May 2015 07:10:27 +0200
udsactor (1.7.5) stable; urgency=medium
* Upgrade for 1.7.5
-- Adolfo Gómez García <agomez@virtualcable.es> Thu, 23 Apr 2015 06:08:53 +0200
udsactor (1.7.0) stable; urgency=medium
* Initial release.
-- Adolfo Gómez García <agomez@virtualcable.es> Mon, 17 Nov 2014 05:32:41 +0100

View File

@@ -0,0 +1 @@
10

View File

@@ -0,0 +1,26 @@
Source: udsactor
Section: admin
Priority: optional
Maintainer: Adolfo Gómez García <agomez@virtualcable.net>
Build-Depends: debhelper (>= 7), po-debconf, dh-systemd (>= 1.5)
Standards-Version: 4.1.4
Homepage: http://www.udsenterprise.com
Package: udsactor
Section: admin
Priority: optional
Architecture: all
Depends: policykit-1(>=0.100), python3-requests (>=0.8.2), python3-pyqt5 (>=4.9), python3-six(>=1.1), python3 (>=3.6), libxss1, xscreensaver, ${misc:Depends}
Recommends: python3-prctl(>=1.1.1)
Description: Actor for Universal Desktop Services (UDS) Broker
This package provides the required components to allow managed machines to work on an environment managed by UDS Broker.
Package: udsactor-unmanaged
Section: admin
Priority: optional
Architecture: all
Depends: policykit-1(>=0.100), python3-requests (>=0.8.2), python3-pyqt5 (>=4.9), python3-six(>=1.1), python3 (>=3.6), libxss1, xscreensaver, ${misc:Depends}
Recommends: python3-prctl(>=1.1.1)
Description: Actor for Universal Desktop Services (UDS) Broker Static Unmanaged machines
This package provides the required components to allow unmanaged machines (static, independent machines) to work on an environment managed by UDS Broker.

View File

@@ -0,0 +1,26 @@
Format-Specification: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&rev=135
Name: udsactor
Maintainer: Adolfo Gómez García
Source: http://www.udsenterprise.com/
Copyright: 2014-2019 Virtual Cable S.L.U.
License: BSD-3-clause
License: GPL-2+
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
.
On Debian systems, the full text of the GNU General Public
License version 2 can be found in the file
`/usr/share/common-licenses/GPL-2'.

3
actor/linux/debian/files Normal file
View File

@@ -0,0 +1,3 @@
udsactor-unmanaged_3.5.0_all.deb admin optional
udsactor_3.5.0_all.deb admin optional
udsactor_3.5.0_amd64.buildinfo admin optional

47
actor/linux/debian/rules Executable file
View File

@@ -0,0 +1,47 @@
#!/usr/bin/make -f
# -*- makefile -*-
configure: configure-stamp
configure-stamp:
dh_testdir
touch configure-stamp
build: build-arch build-indep
build-arch: build-stamp
build-indep: build-stamp
build-stamp: configure-stamp
dh_testdir
$(MAKE)
touch $@
clean:
dh_testdir
dh_testroot
rm -f build-stamp configure-stamp
dh_clean
install: build
dh_testdir
dh_testroot
dh_prep
dh_installdirs
$(MAKE) DESTDIR=$(CURDIR)/debian/udsactor install-udsactor
$(MAKE) DESTDIR=$(CURDIR)/debian/udsactor-unmanaged install-udsactor-unmanaged
binary-arch: build install
# emptyness
binary-indep: build install
dh_testdir
dh_testroot
dh_installchangelogs
dh_installdocs
dh_installdebconf
dh_systemd_enable
dh_installinit --no-restart-on-upgrade --no-start --name=udsactor
dh_systemd_start
dh_python2=python
dh_compress
dh_link
dh_fixperms
dh_installdeb
dh_shlibdeps
dh_gencontrol
dh_md5sums
dh_builddeb
binary: binary-indep
.PHONY: build clean binary-indep binary install configure

View File

@@ -0,0 +1 @@
udsactor.postinst

View File

@@ -0,0 +1 @@
udsactor.service

View File

@@ -0,0 +1,3 @@
#!/bin/sh -e
exit 0

View File

@@ -0,0 +1,28 @@
#!/bin/sh
. /usr/share/debconf/confmodule
set -e
case "$1" in
configure)
/usr/bin/python3 -m compileall /usr/share/UDSActor > /dev/nul 2>&1
# Fix perms so only root can access "masterKey"
chmod 0700 /etc/udsactor
# chmod 0600 /etc/udsactor/udsactor.cfg
chown root:root /etc/udsactor
# chown root:root /etc/udsactor/udsactor.cfg
;;
abort-upgrade|abort-remove|abort-deconfigure)
;;
*)
echo "postinst called with unknown argument \`$1'" >&2
exit 1
;;
esac
#DEBHELPER#
exit 0

View File

@@ -0,0 +1,14 @@
[Unit]
Description=UDS Broker actor
After=network.target
[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/usr/share/UDSActor
ExecStart=/usr/bin/python3 actor_service.py start-foreground
PrivateTmp=true
[Install]
WantedBy=multi-user.target

View File

@@ -0,0 +1,12 @@
[Desktop Entry]
Name=UDS Actor Tool
Comment=UDS Actor Userspace tools
Exec=/usr/bin/UDSActorTool-startup
Icon=/usr/share/UDSActor/img/uds-icon.png
Terminal=false
Type=Application
NoDisplay=true
X-KDE-autostart-after=panel
X-KDE-StartupNotify=false
X-DBUS-StartupType=None
X-KDE-UniqueApplet=false

View File

@@ -0,0 +1,11 @@
[Desktop Entry]
Name=UDS Actor Configuration
Version=1.0
Exec=/usr/sbin/UDSActorConfig-pkexec
Comment=UDS Actor Configuration Application. (Must be executed as root)
Icon=/usr/share/UDSActor/img/uds-icon.png
Type=Application
Terminal=false
StartupNotify=true
Encoding=UTF-8
Categories=Settings;System;

View File

@@ -0,0 +1,6 @@
#!/bin/sh
FOLDER=/usr/share/UDSActor
cd $FOLDER
exec python3 actor_config.py -platform xcb $@

View File

@@ -0,0 +1,3 @@
#!/bin/sh
# pkexec env DISPLAY=$DISPLAY QT_X11_NO_MITSHM=1 "/usr/sbin/UDSActorConfig" "$@"
pkexec "/usr/sbin/UDSActorConfig" "$@"

View File

@@ -0,0 +1,6 @@
#!/bin/sh
FOLDER=/usr/share/UDSActor
cd $FOLDER
exec python3 actor_config_unmanaged.py -platform xcb $@

View File

@@ -0,0 +1,6 @@
#!/bin/sh
FOLDER=/usr/share/UDSActor
cd $FOLDER
exec python3 actor_client.py -platform xcb $@

View File

@@ -0,0 +1,3 @@
#!/bin/sh
exec /usr/bin/UDSActorTool

View File

@@ -3,4 +3,4 @@
FOLDER=/usr/share/UDSActor
cd $FOLDER
python -m udsactor.linux.UDSActorService $@
exec python3 actor_service.py $@

View File

@@ -0,0 +1,3 @@
#!/bin/sh
exec /usr/bin/udsactor login $2 &

View File

@@ -0,0 +1,3 @@
#!/bin/sh
exec /usr/bin/udsactor logout $2 &

5
actor/linux/scripts/udsvapp Executable file
View File

@@ -0,0 +1,5 @@
#!/bin/sh
/usr/bin/udsactor login "$USER"
$@
/usr/bin/udsactor logout "$USER"

View File

@@ -0,0 +1,70 @@
%define _topdir %(echo $PWD)/rpm
%define name udsactor
%define version 0.0.0
%define release 1
%define buildroot %{_topdir}/%{name}-%{version}-%{release}-root
BuildRoot: %{buildroot}
Name: %{name}
Version: %{version}
Release: %{release}
Summary: Actor for Universal Desktop Services (UDS) Broker
License: BSD3
Group: Admin
Requires: python3-six python3-requests python3-qt5 libXScrnSaver
Vendor: Virtual Cable S.L.U.
URL: http://www.udsenterprise.com
Provides: udsactor
%define _rpmdir ../
%define _rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm
%install
curdir=`pwd`
cd ../..
make DESTDIR=$RPM_BUILD_ROOT DISTRO=rh install-udsactor
cd $curdir
%clean
rm -rf $RPM_BUILD_ROOT
curdir=`pwd`
cd ../..
make DESTDIR=$RPM_BUILD_ROOT DISTRO=rh clean
cd $curdir
%post
systemctl enable udsactor.service > /dev/null 2>&1
%preun
systemctl disable udsactor.service > /dev/null 2>&1
systemctl stop udsactor.service > /dev/null 2>&1
%postun
# $1 == 0 on uninstall, == 1 on upgrade for preun and postun (just a reminder for me... :) )
if [ $1 -eq 0 ]; then
rm -rf /etc/udsactor
rm /var/log/udsactor.log
fi
# And, posibly, the .pyc leaved behind on /usr/share/UDSActor
rm -rf /usr/share/UDSActor > /dev/null 2>&1
%description
This package provides the required components to allow this machine to work on an environment managed by UDS Broker.
%files
%defattr(-,root,root)
/etc/udsactor
/etc/xdg/autostart/UDSActorTool.desktop
/etc/systemd/system/udsactor.service
/usr/bin/UDSActorTool-startup
/usr/bin/udsactor
/usr/bin/udsvapp
/usr/bin/UDSActorTool
/usr/sbin/UDSActorConfig
/usr/sbin/UDSActorConfig-pkexec
/usr/share/UDSActor/*
/usr/share/applications/UDS_Actor_Configuration.desktop
/usr/share/autostart/UDSActorTool.desktop
/usr/share/polkit-1/actions/org.openuds.pkexec.UDSActorConfig.policy

3
actor/src/.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
dist
build
*.spec

77
actor/src/actor_client.py Executable file
View File

@@ -0,0 +1,77 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Copyright (c) 2020 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
# pylint: disable=invalid-name
import sys
import os
import PyQt5 # pylint: disable=unused-import
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QMainWindow
from udsactor.log import logger, INFO
from udsactor.client import UDSClientQApp
from udsactor.platform import operations
if __name__ == "__main__":
logger.setLevel(INFO)
# Ensure idle operations is initialized on start
operations.initIdleDuration(0)
if 'linux' in sys.platform:
os.environ['QT_X11_NO_MITSHM'] = '1'
UDSClientQApp.setQuitOnLastWindowClosed(False)
qApp = UDSClientQApp(sys.argv)
if 'linux' not in sys.platform:
# The "hidden window" is only needed to process events on Windows
# Not needed on Linux
mw = QMainWindow()
mw.showMinimized() # Start minimized, will be hidden (not destroyed) as soon as qApp.init is invoked
qApp.setMainWindow(mw)
qApp.init()
# Crate a timer to a "dummy" function, so python can check signals from time to time by executing the python interpreter
# Note: Signals are only checked on python code execution, so we create a timer to force call back to python
timer = QTimer(qApp)
timer.start(1000)
timer.timeout.connect(lambda *a: None) # type: ignore # timeout can be connected to a callable
qApp.exec_()
# On windows, if no window is created, this point will never be reached.
qApp.end()
logger.debug('Exiting...')

195
actor/src/actor_config.py Executable file
View File

@@ -0,0 +1,195 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Copyright (c) 2020 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
# pylint: disable=invalid-name
import sys
import os
import logging
import typing
import PyQt5 # pylint: disable=unused-import
from PyQt5.QtWidgets import QApplication, QDialog, QFileDialog, QMessageBox
import udsactor
from ui.setup_dialog_ui import Ui_UdsActorSetupDialog
# Not imported at runtime, just for type checking
if typing.TYPE_CHECKING:
from PyQt5.QtWidgets import QLineEdit # pylint: disable=ungrouped-imports
logger = logging.getLogger('actor')
class UDSConfigDialog(QDialog):
_host: str = ''
def __init__(self) -> None:
QDialog.__init__(self, None)
# Get local config config
config: udsactor.types.ActorConfigurationType = udsactor.platform.store.readConfig()
self.ui = Ui_UdsActorSetupDialog()
self.ui.setupUi(self)
self.ui.host.setText(config.host)
self.ui.validateCertificate.setCurrentIndex(1 if config.validateCertificate else 0)
self.ui.postConfigCommand.setText(config.post_command or '')
self.ui.preCommand.setText(config.pre_command or '')
self.ui.runonceCommand.setText(config.runonce_command or '')
self.ui.logLevelComboBox.setCurrentIndex(config.log_level)
if config.host:
self.updateAuthenticators()
self.ui.username.setText('')
self.ui.password.setText('')
self.ui.testButton.setEnabled(bool(config.master_token and config.host))
@property
def api(self) -> udsactor.rest.UDSServerApi:
return udsactor.rest.UDSServerApi(self.ui.host.text(), self.ui.validateCertificate.currentIndex() == 1)
def browse(self, lineEdit: 'QLineEdit', caption: str) -> None:
name = QFileDialog.getOpenFileName(parent=self, caption=caption, directory=os.path.dirname(lineEdit.text()))[0]
if name:
if ' ' in name:
name = '"' + name + '"'
lineEdit.setText(os.path.normpath(name))
def browsePreconnect(self) -> None:
self.browse(self.ui.preCommand, 'Select Preconnect command')
def browseRunOnce(self) -> None:
self.browse(self.ui.runonceCommand, 'Select Runonce command')
def browsePostConfig(self) -> None:
self.browse(self.ui.postConfigCommand, 'Select Postconfig command')
def updateAuthenticators(self) -> None:
if self.ui.host.text() != self._host:
self._host = self.ui.host.text()
self.ui.authenticators.clear()
auth: udsactor.types.AuthenticatorType
auths = list(self.api.enumerateAuthenticators())
if auths:
for auth in auths:
self.ui.authenticators.addItem(auth.auth, userData=auth)
# Last, add "admin" authenticator (for uds root user)
self.ui.authenticators.addItem('Administration', userData=udsactor.types.AuthenticatorType('admin', 'admin', 'admin', 'admin', 1, False))
def textChanged(self) -> None:
enableButtons = bool(self.ui.host.text() and self.ui.username.text() and self.ui.password.text() and self.ui.authenticators.currentText())
self.ui.registerButton.setEnabled(enableButtons)
self.ui.testButton.setEnabled(False) # Only registered information can be checked
def finish(self) -> None:
self.close()
def testUDSServer(self) -> None:
config: udsactor.types.ActorConfigurationType = udsactor.platform.store.readConfig()
if not config.master_token or not config.host:
self.ui.testButton.setEnabled(False)
return
try:
api = udsactor.rest.UDSServerApi(config.host, config.validateCertificate)
if not api.test(config.master_token, udsactor.types.MANAGED):
QMessageBox.information(
self,
'UDS Test',
'Current configured token seems to be invalid for {}. Please, request a new one.'.format(config.host),
QMessageBox.Ok
)
else:
QMessageBox.information(
self,
'UDS Test',
'Configuration for {} seems to be correct.'.format(config.host),
QMessageBox.Ok
)
except Exception:
QMessageBox.information(
self,
'UDS Test',
'Configured host {} seems to be inaccesible.'.format(config.host),
QMessageBox.Ok
)
def registerWithUDS(self) -> None:
# Get network card. Will fail if no network card is available, but don't mind (not contempled)
data: udsactor.types.InterfaceInfoType = next(udsactor.platform.operations.getNetworkInfo())
try:
token = self.api.register(
self.ui.authenticators.currentData().auth,
self.ui.username.text(),
self.ui.password.text(),
udsactor.platform.operations.getComputerName(),
data.ip or '', # IP
data.mac or '', # MAC
self.ui.preCommand.text(),
self.ui.runonceCommand.text(),
self.ui.postConfigCommand.text(),
self.ui.logLevelComboBox.currentIndex() # Loglevel
)
# Store parameters on register for later use, notify user of registration
udsactor.platform.store.writeConfig(
udsactor.types.ActorConfigurationType(
actorType=udsactor.types.MANAGED,
host=self.ui.host.text(),
validateCertificate=self.ui.validateCertificate.currentIndex() == 1,
master_token=token,
pre_command=self.ui.preCommand.text(),
post_command=self.ui.postConfigCommand.text(),
runonce_command=self.ui.runonceCommand.text(),
log_level=self.ui.logLevelComboBox.currentIndex()
)
)
# Enables test button
self.ui.testButton.setEnabled(True)
# Informs the user
QMessageBox.information(self, 'UDS Registration', 'Registration with UDS completed.', QMessageBox.Ok)
except udsactor.rest.RESTError as e:
self.ui.testButton.setEnabled(False)
QMessageBox.critical(self, 'UDS Registration', 'UDS Registration error: {}'.format(e), QMessageBox.Ok)
if __name__ == "__main__":
# If to be run as "sudo" on linux, we will need this to avoid problems
if 'linux' in sys.platform:
os.environ['QT_X11_NO_MITSHM'] = '1'
app = QApplication(sys.argv)
if udsactor.platform.operations.checkPermissions() is False:
QMessageBox.critical(None, 'UDS Actor', 'This Program must be executed as administrator', QMessageBox.Ok)
sys.exit(1)
myapp = UDSConfigDialog()
myapp.show()
sys.exit(app.exec_())

View File

@@ -0,0 +1,156 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Copyright (c) 2020 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
# pylint: disable=invalid-name
import sys
import os
import pickle
import logging
import typing
import PyQt5 # pylint: disable=unused-import
from PyQt5.QtWidgets import QApplication, QDialog, QMessageBox
import udsactor
from ui.setup_dialog_unmanaged_ui import Ui_UdsActorSetupDialog
# Not imported at runtime, just for type checking
if typing.TYPE_CHECKING:
from PyQt5.QtWidgets import QLineEdit # pylint: disable=ungrouped-imports
logger = logging.getLogger('actor')
class UDSConfigDialog(QDialog):
_host: str = ''
_config: udsactor.types.ActorConfigurationType
def __init__(self) -> None:
QDialog.__init__(self, None)
# Get local config config
self._config = udsactor.platform.store.readConfig()
self.ui = Ui_UdsActorSetupDialog()
self.ui.setupUi(self)
self.ui.host.setText(self._config.host)
self.ui.validateCertificate.setCurrentIndex(1 if self._config.validateCertificate else 0)
self.ui.logLevelComboBox.setCurrentIndex(self._config.log_level)
self.ui.serviceToken.setText(self._config.master_token)
self.ui.testButton.setEnabled(bool(self._config.master_token and self._config.host))
@property
def api(self) -> udsactor.rest.UDSServerApi:
return udsactor.rest.UDSServerApi(self.ui.host.text(), self.ui.validateCertificate.currentIndex() == 1)
def finish(self) -> None:
self.close()
def configChanged(self, text: str) -> None:
self.ui.testButton.setEnabled(self.ui.host.text() == self._config.host and self.ui.serviceToken.text() == self._config.master_token)
def testUDSServer(self) -> None:
if not self._config.master_token or not self._config.host:
self.ui.testButton.setEnabled(False)
return
try:
api = udsactor.rest.UDSServerApi(self._config.host, self._config.validateCertificate)
if not api.test(self._config.master_token, udsactor.types.UNMANAGED):
QMessageBox.information(
self,
'UDS Test',
'Service token seems to be invalid . Please, check token validity.',
QMessageBox.Ok
)
else:
QMessageBox.information(
self,
'UDS Test',
'Configuration for {} seems to be correct.'.format(self._config.host),
QMessageBox.Ok
)
except Exception:
QMessageBox.information(
self,
'UDS Test',
'Configured host {} seems to be inaccesible.'.format(self._config.host),
QMessageBox.Ok
)
def saveConfig(self) -> None:
# Store parameters on register for later use, notify user of registration
self._config = udsactor.types.ActorConfigurationType(
actorType=udsactor.types.UNMANAGED,
host=self.ui.host.text(),
validateCertificate=self.ui.validateCertificate.currentIndex() == 1,
master_token=self.ui.serviceToken.text(),
log_level=self.ui.logLevelComboBox.currentIndex()
)
udsactor.platform.store.writeConfig(self._config)
# Enables test button
self.ui.testButton.setEnabled(True)
# Informs the user
QMessageBox.information(self, 'UDS Configuration', 'Configuration saved.', QMessageBox.Ok)
if __name__ == "__main__":
# If to be run as "sudo" on linux, we will need this to avoid problems
if 'linux' in sys.platform:
os.environ['QT_X11_NO_MITSHM'] = '1'
app = QApplication(sys.argv)
if udsactor.platform.operations.checkPermissions() is False:
QMessageBox.critical(None, 'UDS Actor', 'This Program must be executed as administrator', QMessageBox.Ok)
sys.exit(1)
if len(sys.argv) > 2:
if sys.argv[1] == 'export':
try:
with open(sys.argv[2], 'wb') as f:
pickle.dump(udsactor.platform.store.readConfig(), f, protocol=3)
except Exception as e:
print('Error exporting configuration file: {}'.format(e))
sys.exit(1)
sys.exit(0)
if sys.argv[1] == 'import':
try:
with open(sys.argv[2], 'rb') as f:
config = pickle.load(f)
udsactor.platform.store.writeConfig(config)
except Exception as e:
print('Error importing configuration file: {}'.format(e))
sys.exit(1)
sys.exit(0)
myapp = UDSConfigDialog()
myapp.show()
sys.exit(app.exec_())

40
actor/src/actor_service.py Executable file
View File

@@ -0,0 +1,40 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Copyright (c) 2020 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
import sys
if sys.platform == 'win32':
from udsactor.windows import runner
else:
from udsactor.linux import runner
if __name__ == "__main__":
runner.run()

View File

@@ -0,0 +1,363 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<author>Adolfo Gómez</author>
<class>UdsActorSetupDialog</class>
<widget class="QDialog" name="UdsActorSetupDialog">
<property name="windowModality">
<enum>Qt::WindowModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>595</width>
<height>220</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<family>Verdana</family>
<pointsize>9</pointsize>
</font>
</property>
<property name="contextMenuPolicy">
<enum>Qt::DefaultContextMenu</enum>
</property>
<property name="windowTitle">
<string>UDS Actor Configuration Tool</string>
</property>
<property name="windowIcon">
<iconset resource="uds.qrc">
<normaloff>:/img/img/uds-icon.png</normaloff>:/img/img/uds-icon.png</iconset>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="locale">
<locale language="English" country="UnitedStates"/>
</property>
<property name="sizeGripEnabled">
<bool>false</bool>
</property>
<property name="modal">
<bool>true</bool>
</property>
<widget class="QPushButton" name="saveButton">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>10</x>
<y>180</y>
<width>181</width>
<height>23</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>181</width>
<height>0</height>
</size>
</property>
<property name="contextMenuPolicy">
<enum>Qt::DefaultContextMenu</enum>
</property>
<property name="toolTip">
<string>Click to register Actor with UDS Broker</string>
</property>
<property name="whatsThis">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Click on this button to register Actor with UDS Broker.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Save Configuration</string>
</property>
</widget>
<widget class="QPushButton" name="closeButton">
<property name="geometry">
<rect>
<x>410</x>
<y>180</y>
<width>171</width>
<height>23</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>171</width>
<height>0</height>
</size>
</property>
<property name="toolTip">
<string>Closes UDS Actor Configuration (discard pending changes if any)</string>
</property>
<property name="whatsThis">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Exits the UDS Actor Configuration Tool&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Close</string>
</property>
</widget>
<widget class="QPushButton" name="testButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>210</x>
<y>180</y>
<width>181</width>
<height>23</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>181</width>
<height>0</height>
</size>
</property>
<property name="toolTip">
<string>Click to test existing configuration (disabled if no config found)</string>
</property>
<property name="whatsThis">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Click on this button to test the server host and assigned toen.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Test configuration</string>
</property>
</widget>
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>571</width>
<height>161</height>
</rect>
</property>
<layout class="QFormLayout" name="formLayout">
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
</property>
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<property name="verticalSpacing">
<number>16</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_security">
<property name="text">
<string>SSL Validation</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="validateCertificate">
<property name="toolTip">
<string>Select communication security with broker</string>
</property>
<property name="whatsThis">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Select the security for communications with UDS Broker.&lt;/p&gt;&lt;p&gt;The recommended method of communication is &lt;span style=&quot; font-weight:600;&quot;&gt;Use SSL&lt;/span&gt;, but selection needs to be acording to your broker configuration.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<item>
<property name="text">
<string>Ignore certificate</string>
</property>
</item>
<item>
<property name="text">
<string>Verify certificate</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_host">
<property name="text">
<string>UDS Server</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="host">
<property name="acceptDrops">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Uds Broker Server Addres. Use IP or FQDN</string>
</property>
<property name="whatsThis">
<string>Enter here the UDS Broker Addres using either its IP address or its FQDN address</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_serviceToken">
<property name="text">
<string>Service Token</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="serviceToken">
<property name="toolTip">
<string>UDS user with administration rights (Will not be stored on template)</string>
</property>
<property name="whatsThis">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Administrator user on UDS Server.&lt;/p&gt;&lt;p&gt;Note: This credential will not be stored on client. Will be used to obtain an unique token for this image.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_loglevel">
<property name="text">
<string>Log Level</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="logLevelComboBox">
<property name="currentIndex">
<number>1</number>
</property>
<property name="frame">
<bool>true</bool>
</property>
<item>
<property name="text">
<string notr="true">DEBUG</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">INFO</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">ERROR</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">FATAL</string>
</property>
</item>
</widget>
</item>
</layout>
<zorder>label_host</zorder>
<zorder>host</zorder>
<zorder>label_serviceToken</zorder>
<zorder>serviceToken</zorder>
<zorder>validateCertificate</zorder>
<zorder>label_security</zorder>
<zorder>label_loglevel</zorder>
<zorder>logLevelComboBox</zorder>
</widget>
</widget>
<resources>
<include location="uds.qrc"/>
</resources>
<connections>
<connection>
<sender>closeButton</sender>
<signal>clicked()</signal>
<receiver>UdsActorSetupDialog</receiver>
<slot>finish()</slot>
<hints>
<hint type="sourcelabel">
<x>315</x>
<y>165</y>
</hint>
<hint type="destinationlabel">
<x>231</x>
<y>161</y>
</hint>
</hints>
</connection>
<connection>
<sender>testButton</sender>
<signal>clicked()</signal>
<receiver>UdsActorSetupDialog</receiver>
<slot>testUDSServer()</slot>
<hints>
<hint type="sourcelabel">
<x>300</x>
<y>281</y>
</hint>
<hint type="destinationlabel">
<x>294</x>
<y>153</y>
</hint>
</hints>
</connection>
<connection>
<sender>saveButton</sender>
<signal>clicked()</signal>
<receiver>UdsActorSetupDialog</receiver>
<slot>saveConfig()</slot>
<hints>
<hint type="sourcelabel">
<x>100</x>
<y>191</y>
</hint>
<hint type="destinationlabel">
<x>297</x>
<y>109</y>
</hint>
</hints>
</connection>
<connection>
<sender>host</sender>
<signal>textChanged(QString)</signal>
<receiver>UdsActorSetupDialog</receiver>
<slot>configChanged()</slot>
<hints>
<hint type="sourcelabel">
<x>341</x>
<y>61</y>
</hint>
<hint type="destinationlabel">
<x>297</x>
<y>109</y>
</hint>
</hints>
</connection>
<connection>
<sender>serviceToken</sender>
<signal>textChanged(QString)</signal>
<receiver>UdsActorSetupDialog</receiver>
<slot>configChanged()</slot>
<hints>
<hint type="sourcelabel">
<x>341</x>
<y>100</y>
</hint>
<hint type="destinationlabel">
<x>297</x>
<y>109</y>
</hint>
</hints>
</connection>
</connections>
<slots>
<slot>finish()</slot>
<slot>saveConfig()</slot>
<slot>testUDSServer()</slot>
<slot>configChanged()</slot>
</slots>
</ui>

View File

@@ -0,0 +1,660 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<author>Adolfo Gómez</author>
<class>UdsActorSetupDialog</class>
<widget class="QDialog" name="UdsActorSetupDialog">
<property name="windowModality">
<enum>Qt::WindowModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>590</width>
<height>307</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<family>Verdana</family>
<pointsize>9</pointsize>
</font>
</property>
<property name="contextMenuPolicy">
<enum>Qt::DefaultContextMenu</enum>
</property>
<property name="windowTitle">
<string>UDS Actor Configuration Tool</string>
</property>
<property name="windowIcon">
<iconset resource="uds.qrc">
<normaloff>:/img/img/uds-icon.png</normaloff>:/img/img/uds-icon.png</iconset>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="locale">
<locale language="English" country="UnitedStates"/>
</property>
<property name="sizeGripEnabled">
<bool>false</bool>
</property>
<property name="modal">
<bool>true</bool>
</property>
<widget class="QPushButton" name="registerButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>10</x>
<y>270</y>
<width>181</width>
<height>23</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>181</width>
<height>0</height>
</size>
</property>
<property name="contextMenuPolicy">
<enum>Qt::DefaultContextMenu</enum>
</property>
<property name="toolTip">
<string>Click to register Actor with UDS Broker</string>
</property>
<property name="whatsThis">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Click on this button to register Actor with UDS Broker.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Register with UDS</string>
</property>
</widget>
<widget class="QPushButton" name="closeButton">
<property name="geometry">
<rect>
<x>410</x>
<y>270</y>
<width>171</width>
<height>23</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>171</width>
<height>0</height>
</size>
</property>
<property name="toolTip">
<string>Closes UDS Actor Configuration (discard pending changes if any)</string>
</property>
<property name="whatsThis">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Exits the UDS Actor Configuration Tool&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Close</string>
</property>
</widget>
<widget class="QTabWidget" name="tabWidget">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>571</width>
<height>241</height>
</rect>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab_uds">
<attribute name="title">
<string>UDS Server</string>
</attribute>
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>551</width>
<height>191</height>
</rect>
</property>
<layout class="QFormLayout" name="formLayout">
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
</property>
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<property name="verticalSpacing">
<number>16</number>
</property>
<item row="1" column="0">
<widget class="QLabel" name="label_host">
<property name="text">
<string>UDS Server</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="host">
<property name="acceptDrops">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Uds Broker Server Addres. Use IP or FQDN</string>
</property>
<property name="whatsThis">
<string>Enter here the UDS Broker Addres using either its IP address or its FQDN address</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_auth">
<property name="text">
<string>Authenticator</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="authenticators">
<property name="whatsThis">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Select the UDS Broker authenticator for credentials validation&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_username">
<property name="text">
<string>Username</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="username">
<property name="toolTip">
<string>UDS user with administration rights (Will not be stored on template)</string>
</property>
<property name="whatsThis">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Administrator user on UDS Server.&lt;/p&gt;&lt;p&gt;Note: This credential will not be stored on client. Will be used to obtain an unique token for this image.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_password">
<property name="text">
<string>Password</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLineEdit" name="password">
<property name="toolTip">
<string>Password for user (Will not be stored on template)</string>
</property>
<property name="whatsThis">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Administrator password for the user on UDS Server.&lt;/p&gt;&lt;p&gt;Note: This credential will not be stored on client. Will be used to obtain an unique key for this image.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="validateCertificate">
<property name="toolTip">
<string>Select communication security with broker</string>
</property>
<property name="whatsThis">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Select the security for communications with UDS Broker.&lt;/p&gt;&lt;p&gt;The recommended method of communication is &lt;span style=&quot; font-weight:600;&quot;&gt;Use SSL&lt;/span&gt;, but selection needs to be acording to your broker configuration.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<item>
<property name="text">
<string>Ignore certificate</string>
</property>
</item>
<item>
<property name="text">
<string>Verify certificate</string>
</property>
</item>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_security">
<property name="text">
<string>SSL Validation</string>
</property>
</widget>
</item>
</layout>
<zorder>label_host</zorder>
<zorder>host</zorder>
<zorder>label_auth</zorder>
<zorder>label_username</zorder>
<zorder>username</zorder>
<zorder>label_password</zorder>
<zorder>password</zorder>
<zorder>validateCertificate</zorder>
<zorder>label_security</zorder>
<zorder>authenticators</zorder>
</widget>
</widget>
<widget class="QWidget" name="tab_advanced">
<attribute name="title">
<string>Advanced</string>
</attribute>
<widget class="QWidget" name="layoutWidget_2">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>551</width>
<height>161</height>
</rect>
</property>
<layout class="QFormLayout" name="formLayout_2">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<property name="verticalSpacing">
<number>16</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_host_2">
<property name="text">
<string>Preconnect</string>
</property>
</widget>
</item>
<item row="0" column="1">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>4</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<item>
<widget class="QLineEdit" name="preCommand">
<property name="acceptDrops">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Pre connection command. Executed just before the user is connected to machine.</string>
</property>
<property name="whatsThis">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="browsePreconnectButton">
<property name="text">
<string>Browse</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_username_2">
<property name="text">
<string>Runonce</string>
</property>
</widget>
</item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>4</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<item>
<widget class="QLineEdit" name="runonceCommand">
<property name="toolTip">
<string>Run once command. Executed on first boot, just before UDS does anything.</string>
</property>
<property name="whatsThis">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="browseRunOnceButton">
<property name="text">
<string>Browse</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_password_2">
<property name="text">
<string>Postconfig</string>
</property>
</widget>
</item>
<item row="2" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="spacing">
<number>4</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<item>
<widget class="QLineEdit" name="postConfigCommand">
<property name="toolTip">
<string>Command to execute after UDS finalizes the VM configuration.</string>
</property>
<property name="whatsThis">
<string/>
</property>
<property name="echoMode">
<enum>QLineEdit::Normal</enum>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="browsePostConfigButton">
<property name="text">
<string>Browse</string>
</property>
<property name="autoDefault">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_loglevel">
<property name="text">
<string>Log Level</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="logLevelComboBox">
<property name="currentIndex">
<number>1</number>
</property>
<property name="frame">
<bool>true</bool>
</property>
<item>
<property name="text">
<string notr="true">DEBUG</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">INFO</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">ERROR</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">FATAL</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>
</widget>
</widget>
<widget class="QPushButton" name="testButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>210</x>
<y>270</y>
<width>181</width>
<height>23</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>181</width>
<height>0</height>
</size>
</property>
<property name="toolTip">
<string>Click to test existing configuration (disabled if no config found)</string>
</property>
<property name="whatsThis">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Click on this button to test the server host and assigned toen.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Test configuration</string>
</property>
</widget>
</widget>
<resources>
<include location="uds.qrc"/>
</resources>
<connections>
<connection>
<sender>closeButton</sender>
<signal>clicked()</signal>
<receiver>UdsActorSetupDialog</receiver>
<slot>finish()</slot>
<hints>
<hint type="sourcelabel">
<x>315</x>
<y>165</y>
</hint>
<hint type="destinationlabel">
<x>231</x>
<y>161</y>
</hint>
</hints>
</connection>
<connection>
<sender>registerButton</sender>
<signal>clicked()</signal>
<receiver>UdsActorSetupDialog</receiver>
<slot>registerWithUDS()</slot>
<hints>
<hint type="sourcelabel">
<x>239</x>
<y>132</y>
</hint>
<hint type="destinationlabel">
<x>285</x>
<y>185</y>
</hint>
</hints>
</connection>
<connection>
<sender>host</sender>
<signal>textChanged(QString)</signal>
<receiver>UdsActorSetupDialog</receiver>
<slot>textChanged()</slot>
<hints>
<hint type="sourcelabel">
<x>239</x>
<y>59</y>
</hint>
<hint type="destinationlabel">
<x>199</x>
<y>150</y>
</hint>
</hints>
</connection>
<connection>
<sender>username</sender>
<signal>textChanged(QString)</signal>
<receiver>UdsActorSetupDialog</receiver>
<slot>textChanged()</slot>
<hints>
<hint type="sourcelabel">
<x>239</x>
<y>98</y>
</hint>
<hint type="destinationlabel">
<x>199</x>
<y>150</y>
</hint>
</hints>
</connection>
<connection>
<sender>password</sender>
<signal>textChanged(QString)</signal>
<receiver>UdsActorSetupDialog</receiver>
<slot>textChanged()</slot>
<hints>
<hint type="sourcelabel">
<x>239</x>
<y>137</y>
</hint>
<hint type="destinationlabel">
<x>199</x>
<y>150</y>
</hint>
</hints>
</connection>
<connection>
<sender>browsePreconnectButton</sender>
<signal>clicked()</signal>
<receiver>UdsActorSetupDialog</receiver>
<slot>browsePreconnect()</slot>
<hints>
<hint type="sourcelabel">
<x>430</x>
<y>60</y>
</hint>
<hint type="destinationlabel">
<x>243</x>
<y>150</y>
</hint>
</hints>
</connection>
<connection>
<sender>browsePostConfigButton</sender>
<signal>clicked()</signal>
<receiver>UdsActorSetupDialog</receiver>
<slot>browsePostConfig()</slot>
<hints>
<hint type="sourcelabel">
<x>430</x>
<y>142</y>
</hint>
<hint type="destinationlabel">
<x>243</x>
<y>150</y>
</hint>
</hints>
</connection>
<connection>
<sender>browseRunOnceButton</sender>
<signal>clicked()</signal>
<receiver>UdsActorSetupDialog</receiver>
<slot>browseRunOnce()</slot>
<hints>
<hint type="sourcelabel">
<x>430</x>
<y>101</y>
</hint>
<hint type="destinationlabel">
<x>243</x>
<y>150</y>
</hint>
</hints>
</connection>
<connection>
<sender>host</sender>
<signal>editingFinished()</signal>
<receiver>UdsActorSetupDialog</receiver>
<slot>updateAuthenticators()</slot>
<hints>
<hint type="sourcelabel">
<x>343</x>
<y>98</y>
</hint>
<hint type="destinationlabel">
<x>294</x>
<y>153</y>
</hint>
</hints>
</connection>
<connection>
<sender>authenticators</sender>
<signal>currentTextChanged(QString)</signal>
<receiver>UdsActorSetupDialog</receiver>
<slot>textChanged()</slot>
<hints>
<hint type="sourcelabel">
<x>343</x>
<y>137</y>
</hint>
<hint type="destinationlabel">
<x>294</x>
<y>153</y>
</hint>
</hints>
</connection>
<connection>
<sender>testButton</sender>
<signal>clicked()</signal>
<receiver>UdsActorSetupDialog</receiver>
<slot>testUDSServer()</slot>
<hints>
<hint type="sourcelabel">
<x>300</x>
<y>281</y>
</hint>
<hint type="destinationlabel">
<x>294</x>
<y>153</y>
</hint>
</hints>
</connection>
</connections>
<slots>
<slot>textChanged()</slot>
<slot>finish()</slot>
<slot>registerWithUDS()</slot>
<slot>browsePreconnect()</slot>
<slot>browseRunOnce()</slot>
<slot>browsePostConfig()</slot>
<slot>updateAuthenticators()</slot>
<slot>testUDSServer()</slot>
</slots>
</ui>

View File

@@ -0,0 +1,5 @@
<RCC>
<qresource prefix="img">
<file>../img/uds-icon.png</file>
</qresource>
</RCC>

16
actor/src/designer/update.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/bash
function process {
# pyuic4 about-dialog.ui -o about_dialog_ui.py -x
# pyuic4 message-dialog.ui -o message_dialog_ui.py
pyuic5 setup-dialog.ui -o ../ui/setup_dialog_ui.py --import-from=ui
pyuic5 setup-dialog-unmanaged.ui -o ../ui/setup_dialog_unmanaged_ui.py --import-from=ui
}
pyrcc5 uds.qrc -o ../ui/uds_rc.py
# process current directory ui's
process

BIN
actor/src/img/uds-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

@@ -0,0 +1,38 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
from . import types
from . import rest
from . import platform
__title__ = 'udsactor'
__author__ = 'Adolfo Gómez <dkmaster@dkmon.com>'
__license__ = "BSD 3-clause"
__copyright__ = "Copyright 2014-2020 VirtualCable S.L.U."

View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014 Virtual Cable S.L.
# Copyright (c) 2014-2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
@@ -29,24 +29,23 @@
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
from __future__ import unicode_literals
import logging
import os
import sys
import tempfile
import os.path
import secrets
import typing
if sys.platform.startswith('linux'):
from os.path import expanduser
logFile = expanduser('~/udsclient.log')
else:
logFile = os.path.join(tempfile.gettempdir(), b'udsclient.log')
# Not imported at runtime, just for type checking
if typing.TYPE_CHECKING:
from . import types
logging.basicConfig(
filename=logFile,
filemode='a',
format='%(levelname)s %(asctime)s %(message)s',
level=logging.DEBUG
)
logger = logging.getLogger('udsclient')
def saveCertificate(certInfo: 'types.CertificateInfoType') -> typing.Tuple[str, str]:
"""
Returns CertificateFile, Password tuple generated from certInfo
"""
certFile = os.path.join(tempfile.gettempdir(), secrets.token_hex(16))
with open(certFile, "w") as f:
f.write(certInfo.private_key+certInfo.server_certificate)
return certFile, certInfo.password

View File

@@ -0,0 +1,247 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
import threading
import time
import datetime
import signal
import typing
from PyQt5.QtWidgets import QApplication, QMessageBox
from PyQt5.QtCore import QByteArray, QBuffer, QIODevice, pyqtSignal
from . import rest
from . import tools
from . import platform
from .log import logger
from .http import client
# Not imported at runtime, just for type checking
if typing.TYPE_CHECKING:
from . import types
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QMainWindow
class UDSClientQApp(QApplication):
_app: 'UDSActorClient'
_initialized: bool
_mainWindow: typing.Optional['QMainWindow']
message = pyqtSignal(str, name='message')
def __init__(self, args) -> None:
super().__init__(args)
self._mainWindow = None
self._initialized = False
# This will be invoked on session close
self.commitDataRequest.connect(self.end) # type: ignore # Will be invoked on session close, to gracely close app
# self.aboutToQuit.connect(self.end)
self.message.connect(self.showMessage) # type: ignore # there are problems with Pylance and connects on PyQt5... :)
# Execute backgroup thread for actions
self._app = UDSActorClient(self)
def init(self) -> None:
# Notify loging and mark it
logger.debug('Starting APP')
if self._mainWindow:
self._mainWindow.hide()
self._app.start()
self._initialized = True
def end(self, sessionManager=None) -> None: # pylint: disable=unused-argument
if not self._initialized:
return
self._initialized = False
logger.debug('Stopping app thread')
self._app.stop()
self._app.join()
def showMessage(self, message: str) -> None:
QMessageBox.information(None, 'Message', message) # type: ignore
def setMainWindow(self, mw: 'QMainWindow'):
self._mainWindow = mw
class UDSActorClient(threading.Thread): # pylint: disable=too-many-instance-attributes
_running: bool
_forceLogoff: bool
_extraLogoff: str
_qApp: UDSClientQApp
_listener: client.HTTPServerThread
_loginInfo: typing.Optional['types.LoginResultInfoType']
_notified: bool
_notifiedDeadline: bool
_sessionStartTime: datetime.datetime
api: rest.UDSClientApi
def __init__(self, qApp: QApplication):
super().__init__()
self.api = rest.UDSClientApi() # Self initialized
self._qApp = typing.cast(UDSClientQApp, qApp)
self._running = False
self._forceLogoff = False
self._extraLogoff = ''
self._listener = client.HTTPServerThread(self)
self._loginInfo = None
self._notified = False
self._notifiedDeadline = False
# Capture stop signals..
logger.debug('Setting signals...')
signal.signal(signal.SIGINT, self.stopSignal)
signal.signal(signal.SIGTERM, self.stopSignal)
def stopSignal(self, signum, frame) -> None: # pylint: disable=unused-argument
logger.info('Stop signal received')
self.stop()
def checkDeadLine(self):
if self._loginInfo is None or not self._loginInfo.dead_line: # No deadline check
return
remainingTime = self._loginInfo.dead_line - (datetime.datetime.now() - self._sessionStartTime).total_seconds()
logger.debug('Remaining time: {}'.format(remainingTime))
if not self._notifiedDeadline and remainingTime < 300: # With five minutes, show a warning message
self._notifiedDeadline = True
self._showMessage('Your session will expire in less that 5 minutes. Please, save your work and disconnect.')
return
if remainingTime <= 0:
logger.debug('Session dead line reached. Logging out')
self._running = False
self._forceLogoff = True
def checkIdle(self) -> None:
if self._loginInfo is None or not self._loginInfo.max_idle: # No idle check
return
idleTime = platform.operations.getIdleDuration()
remainingTime = self._loginInfo.max_idle - idleTime
logger.debug('Idle: %s Remaining: %s', idleTime, remainingTime)
if remainingTime > 120: # Reset show Warning dialog if we have more than 5 minutes left
self._notified = False
return
if not self._notified and remainingTime < 120: # With two minutes, show a warning message
self._notified = True
self._showMessage('You have been idle for too long. The session will end if you don\'t resume operations.')
if remainingTime <= 0:
logger.info('User has been idle for too long, exiting from session')
self._extraLogoff = ' (idle: {} vs {})'.format(int(idleTime), self._loginInfo.max_idle)
self._running = False
self._forceLogoff = True
def run(self) -> None:
logger.debug('UDS Actor thread')
self._listener.start() # async listener for service
self._running = True
self._sessionStartTime = datetime.datetime.now()
time.sleep(0.4) # Wait a bit before sending login
try:
# Notify loging and mark it
self._loginInfo = self.api.login(platform.operations.getCurrentUser(), platform.operations.getSessionType())
if self._loginInfo.max_idle:
platform.operations.initIdleDuration(self._loginInfo.max_idle)
while self._running:
# Check Idle & dead line
self.checkIdle()
self.checkDeadLine()
time.sleep(1.3) # Sleeps between loop iterations
self._loginInfo = None
self.api.logout(platform.operations.getCurrentUser() + self._extraLogoff)
except Exception as e:
logger.error('Error on client loop: %s', e)
self._listener.stop() # async listener for service
# Notify exit to qt
QApplication.quit()
if self._forceLogoff:
time.sleep(1.3) # Wait a bit before forcing logoff
platform.operations.loggoff()
def _showMessage(self, message: str) -> None:
self._qApp.message.emit(message) # type: ignore # there are problems with Pylance and connects on PyQt5... :)
def stop(self) -> None:
logger.debug('Stopping client Service')
self._running = False
def logout(self) -> typing.Any:
self._forceLogoff = True
self._running = False
return 'ok'
def message(self, msg: str) -> typing.Any:
threading.Thread(target=self._showMessage, args=(msg,)).start()
return 'ok'
def screenshot(self) -> typing.Any:
'''
On windows, an RDP session with minimized screen will render "black screen"
So only when user is using RDP connection will return an "actual" screenshot
'''
pixmap: 'QPixmap' = self._qApp.primaryScreen().grabWindow(0) # type: ignore
ba = QByteArray()
buffer = QBuffer(ba)
buffer.open(QIODevice.WriteOnly)
pixmap.save(buffer, 'PNG')
buffer.close()
scrBase64 = bytes(ba.toBase64()).decode() # type: ignore # there are problems with Pylance and connects on PyQt5... :)
logger.debug('Screenshot length: %s', len(scrBase64))
return scrBase64 # 'result' of JSON will contain base64 of screen
def script(self, script: str) -> typing.Any:
tools.ScriptExecutorThread(script).start()
return 'ok'

View File

@@ -0,0 +1,7 @@
from .. import types
defaultCertificate = types.CertificateInfoType(
private_key='-----BEGIN ENCRYPTED PRIVATE KEY-----\nMIIFHTBPBgkqhkiG9w0BBQ0wQjApBgkqhkiG9w0BBQwwHAQIfG2+iMYJBswCAggA\nMAwGCCqGSIb3DQIJBQAwFQYJKwYBBAGXVQECBAhCusU5R8ulZQSCBMgheyZ81Qkq\n+TcbPeBlUGCFllSUOo7xQ/OuwYSmzLx8LpN0hQNv4azF6MYH+I8eMSPd3A547yW3\nJE4GjIBfRvcq2X1UZ2FQfECU9UP0ShPuPrVhIh6ZZklmlRjbIF8hGfSzXAuafQb+\n4wXXsofahi/SPgqK1Gw65nRiMcoeRZchJkx8pBgKVWED6Cbh6aAkeqkVKPnsebiV\n6kE+0C7+hgNUbyRd46R+/5NXzPjg4ItfSak+PLzQ1KeRv4Cu6DdzRKJ4V9/MlNdU\nNNEkSVSEaRn4sv+eByU4uxBMaSmD1tLc/A7OmaAeRpIQvls3Zcf2+V0+anAtjbjd\n6eIb2nceey+dKFm4ewlR4mXuzj1QowRTHceOIkvKIrOODxdy9M5hNBZ7VLum29tY\nRhqtmEH2BZZJ8SpM2SsEZzPxqJFiVZbvpeOKjxlMyn1dFWn1rP8uMnfuMKqBaj5D\nd5clOPlwebYw5UpM6Vvawu4nGqxECTSWcfNlDYO5U/0Fsm9+JIrJ7Buukgv2+rhs\nD/6oUK9NB8AW9qnDr7UxbC/ujhkKQG3woaZlPbiMs5WQaS+DrTg4N49wPzS0h+ME\nF8ZzuPnd6+sMGQioCIrQAZ08rk54oCijBhFh8/EQhQKGsMFw2swi9t6+FVU5Bvil\nlhmBd3LA5EuQ5y1X0jRL/+GDiUiZw1gOJP8d/XzhUJL9AmamdqJ6/rAU7lUTNWkM\ndzmFonUO2Mh2zgEEudHsTOH8udZ2l64LIHc6fCkDmM8QzghjrEFyci6R8333DSSM\nwbM0MvyTLM7TTqZUD60EgD+Ihyr/wJcBZY7GVn7hTq7ee14zeI+dZFmTMYOnt0mA\ngof19t0naPPZU+zyl/ambNF5mmSkGOAl4IBHNvPt5ztEVbNpwW3DHbmdYW71Ax+z\nCDlr4iKZahv21o1PCesPV2IlaHZFD6aBRt0DxzMqtq9cpWsI1g7aEaAjRbSvqhMY\npUeqFXz/GfR9rjRkufr48//ll0/Q/Ogx7m1TjQ6mAEQrklI7pa2W0u3H0BpSZSis\nR6ST3ulE+wfsp8cau6q2er+BSsDhBjSn9FeCUjHzY56u9ud/kb6/jLEdgxNpj0na\n3WVqCCCL/dAFSWznBmdracZsRMXapXInHCiiOEkXXbXIXvRKiTPJXdN+w2/U2j2B\nwXZuazVSpmM+xAZTAS9dtBUQJo+5px9b6P09uagvTA32ezbpPXf+hSfmTdUwbmAY\nrmE9SW85tzX+cD17loygBBRrjOr4uQy/s/9FqLx8bM73jly05rdOmX28ECKwEA05\n8aCFkfqrl9J9doVapaUlywpJVPFtE6W6tCF+ULMfb16vEjT1du1+epEnbGGLRQxg\n3aFLyKlvFaNvR38fiQFUGtBgGOaBN3rhGpbMwjch3oReXv9X/4UCL6sVIiOH2H3c\nVSZdC3O5g6CMVe4zckUe1k9mLDb5524IHDFfptZ6Bw+uzrqIy3GHW8dJF2AK471b\nMUnCojTpdbFHaUs2u/rNKVUyY+vLf8hkyP+znBUoPxSJtty53EWNukxjjsxx0lx3\niZGqN72lXlXuSFZAIxi307+xxE21cbzDsMidyJkbKKGm/F4BOKvX9jWmAyYmBG6A\n1L3yNRouFWsYDwYAX2nZ1is=\n-----END ENCRYPTED PRIVATE KEY-----\n',
server_certificate='-----BEGIN CERTIFICATE-----\nMIIDcTCCAlkCBDfnXU8wDQYJKoZIhvcNAQELBQAwfTELMAkGA1UEBhMCRVMxDzAN\nBgNVBAgMBk1hZHJpZDEPMA0GA1UEBwwGTWFkcmlkMREwDwYDVQQKDAhVRFMgQ2Vy\ndDERMA8GA1UECwwIVURTIENlcnQxEjAQBgNVBAMMCTEyNy4wLjAuMTESMBAGA1Ud\nEQwJMTI3LjAuMC4xMB4XDTIwMDIxNzExNTkzMloXDTMwMDIxNDExNTkzMlowfTEL\nMAkGA1UEBhMCRVMxDzANBgNVBAgMBk1hZHJpZDEPMA0GA1UEBwwGTWFkcmlkMREw\nDwYDVQQKDAhVRFMgQ2VydDERMA8GA1UECwwIVURTIENlcnQxEjAQBgNVBAMMCTEy\nNy4wLjAuMTESMBAGA1UdEQwJMTI3LjAuMC4xMIIBIjANBgkqhkiG9w0BAQEFAAOC\nAQ8AMIIBCgKCAQEA2e1cW7YtRpNLazR3f/LqLv8OB0rKh8cUPH4wuQhbBTkee8Wu\n5eMSadRCIyRbKj4b8dtVfI9QW0SrmhGuMx1KCh3CsYd9XsWiKbGkiRBHIDOn5pkF\n6PUayDJ8KjnGbfnZjp0AmxXP4r1OO8jUPqzKS9Ubf5PgwcwdFiUKVfVPwGwctwt5\nt9YpSRONw0rTsCjVHvO2dd9h6EopskLCWxpN8l9kNLwLM/6t0IqVKmn5/IYPKKN2\nCX8a7IXpxwoiUs4sBZYhUMBWikB1hKQRSYafp1Xvc5PeTFXTFqGANnqz0NoZ8tqL\n8qjQUN/PCdtzhfcP5RgT2g1qyS2RBCMYH7Zs0wIDAQABMA0GCSqGSIb3DQEBCwUA\nA4IBAQCUt+qlLA1N9VXMwDQAYG4Kt6/UlMHCXAajHQQGtjdyGJ4++m7EIjI96hMU\n3Cx2gp2ggR3JGnuSR+DdBvPl5iGku7J8KV0JiJg30gTY8JuUIy/PMLZWloYKrBHV\nlin2GujQ4OsIt3dbr4XtcKW1Wd7L6fBzHlq7Xyxh+gcTzTvTmq67Q9XKlBWsegMf\nv4FKy0lfcSFK3vTzswQtuTontG4TqLiT/4AnMt3D0cTQ6b6KoZwUUX/TDNhau06d\nQ4Ilz8X61ka+4HBkFSR5ahP9noCVhwO329h+6epO141E5Tep3OLc/GCF4oaKOlMR\nfqxf5f2bghU0fxmtEoNJTZkBsN1S\n-----END CERTIFICATE-----\n',
password='Pw7qbatz5u-y-Z5ora2D2ZuBCm95AHnKRcpze53k8tw'
)

View File

@@ -0,0 +1,166 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
# pylint: disable=invalid-name
import threading
import http.server
import secrets
import json
import typing
from ..log import logger
# Not imported at runtime, just for type checking
if typing.TYPE_CHECKING:
from ..client import UDSActorClient
class HTTPServerHandler(http.server.BaseHTTPRequestHandler):
protocol_version = 'HTTP/1.0'
server_version = 'UDS Actor Server'
sys_version = ''
_id: typing.ClassVar[str] # Random id for server
_app: typing.ClassVar['UDSActorClient']
def sendJsonResponse(self, result: typing.Optional[typing.Any] = None, error: typing.Optional[str] = None, code: int = 200) -> None:
data = json.dumps({'result': result, 'error': error})
self.send_response(code)
self.send_header('Content-type', 'application/json')
self.send_header('Content-Length', str(len(data)))
self.send_header('Server: ', self.server_version)
self.end_headers()
try:
self.wfile.write(data.encode())
except Exception:
pass # Evict "broken pipe" when sending errors
def do_POST(self) -> None:
# Only allows requests from localhost
if self.client_address[0][:3] != '127':
self.sendJsonResponse(error='Forbidden', code=403)
# Very simple path & params splitter
path = self.path.split('?')[0][1:].split('/')
if len(path) != 2 or path[0] != HTTPServerHandler._id:
self.sendJsonResponse(error='Forbidden', code=403)
try:
length = int(str(self.headers.get('content-length', '0')))
content = self.rfile.read(length)
params: typing.MutableMapping[str, str] = json.loads(content or '{}')
except Exception as e:
logger.error('Got exception executing POST {}: {}'.format(self.path, str(e)))
self.sendJsonResponse(error='Invalid request', code=400)
return
try:
result = getattr(self, 'method_' + path[1])(params) # last part of path is method
except AttributeError as e:
logger.error('Invoked invalid method: %s: %s', path[1], e)
self.sendJsonResponse(error='Invalid request', code=400)
return
except Exception as e:
logger.error('Got exception executing {}: {}'.format('/'.join(path), str(e)))
self.sendJsonResponse(error='Internal error', code=500)
return
self.sendJsonResponse(result)
# Internal methods
def method_ping(self, params: typing.MutableMapping[str, str]) -> typing.Any:
return 'pong'
def method_logout(self, params: typing.MutableMapping[str, str]) -> typing.Any:
return self._app.logout()
def method_message(self, params: typing.MutableMapping[str, str]) -> typing.Any:
return self._app.message(params['message'])
def method_screenshot(self, params: typing.MutableMapping[str, str]) -> typing.Any:
return self._app.screenshot()
def method_script(self, params: typing.MutableMapping[str, str]) -> typing.Any:
return self._app.script(params['script'])
def do_GET(self) -> None:
self.sendJsonResponse(error='Forbidden', code=403)
def log_error(self, format: str, *args): # pylint: disable=redefined-builtin
logger.error(format, *args)
def log_message(self, format: str, *args): # pylint: disable=redefined-builtin
logger.debug(format, *args)
class HTTPServerThread(threading.Thread):
_server: typing.Optional[http.server.HTTPServer]
_app: 'UDSActorClient'
port: int
id: str
def __init__(self, app: 'UDSActorClient'):
super().__init__()
self._server = None
self._app = app
self.port = -1
self.id = secrets.token_urlsafe(16)
@property
def url(self) -> str:
return 'http://127.0.0.1:{}/{}'.format(self.port, self.id)
def stop(self) -> None:
if self._server:
logger.debug('Stopping Http-client Service')
try:
self._app.api.unregister(self.url)
except Exception as e:
logger.error('Error unregistering on actor service: %s', e)
self._server.shutdown()
self._server = None
def run(self):
HTTPServerHandler._app = self._app # pylint: disable=protected-access
HTTPServerHandler._id = self.id # pylint: disable=protected-access
self._server = http.server.HTTPServer(('127.0.0.1', 0), HTTPServerHandler)
self.port = self._server.socket.getsockname()[1]
# Register using app api
logger.debug('Registered %s', self.url)
try:
self._app.api.register(self.url)
except Exception as e:
logger.error('Error registering on actor service: %s', e)
self._server.serve_forever()

View File

@@ -0,0 +1,98 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
# pylint: disable=invalid-name
import json
import typing
import requests
from ..log import logger
# For avoid proxy on localhost connections
NO_PROXY = {
'http': None,
'https': None,
}
class UDSActorClientPool:
_clientUrl: typing.List[str]
def __init__(self) -> None:
self._clientUrl = []
def _post(self, method: str, data: typing.MutableMapping[str, str], timeout=2) -> typing.List[requests.Response]:
removables: typing.List[str] = []
result: typing.List[typing.Any] = []
for clientUrl in self._clientUrl:
try:
result.append(requests.post(clientUrl + '/' + method, data=json.dumps(data), verify=False, timeout=timeout, proxies=NO_PROXY))
except Exception as e:
# If cannot request to a clientUrl, remove it from list
logger.info('Could not connect with client %s: %s. Removed from registry.', e, clientUrl)
removables.append(clientUrl)
# Remove failed connections
for clientUrl in removables:
self.unregister(clientUrl)
return result
def register(self, clientUrl: str) -> None:
# Remove first if exists, to avoid duplicates
self.unregister(clientUrl)
# And add it again
self._clientUrl.append(clientUrl)
def unregister(self, clientUrl: str) -> None:
self._clientUrl = list((i for i in self._clientUrl if i != clientUrl))
def executeScript(self, script: str) -> None:
self._post('script', {'script': script}, timeout=30)
def logout(self) -> None:
self._post('logout', {})
def message(self, message: str) -> None:
self._post('message', {'message': message})
def ping(self) -> bool:
if not self._clientUrl:
return True # No clients, ping ok
self._post('ping', {}, timeout=1)
return bool(self._clientUrl) # There was clients, but they are now lost!!!
def screenshot(self) -> typing.Optional[str]: # Screenshot are returned as base64
for r in self._post('screenshot', {}, timeout=3):
try:
return r.json()['result']
except Exception:
pass
return None

View File

@@ -1,7 +1,6 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2017 Virtual Cable S.L.
# Copyright (c) 2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
@@ -29,16 +28,17 @@
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
from __future__ import unicode_literals
import typing
try:
import gtkui as theUI
except Exception:
import consoleui as theUI # @Reimport
if typing.TYPE_CHECKING:
from ..service import CommonService
def message(title, message):
theUI.message(title, message)
def question(title, message):
return theUI.question(title, message)
class Handler:
_service: 'CommonService'
_method: str
_params: typing.MutableMapping[str, str]
def __init__(self, service: 'CommonService', method: str, params: typing.MutableMapping[str, str]):
self._service = service
self._method = method
self._params = params

View File

@@ -1,7 +1,6 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2012 Virtual Cable S.L.
# Copyright (c) 2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
@@ -26,28 +25,32 @@
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
from __future__ import unicode_literals
import typing
from uds.core import services
from . import handler
if typing.TYPE_CHECKING:
from ..service import CommonService
class PhysicalMachinesProvider(services.ServiceProvider):
# No extra data needed
class LocalProvider(handler.Handler):
# What services do we offer?
offers = []
typeName = 'Static IP Machines Provider'
typeType = 'PhysicalMachinesServiceProvider'
typeDescription = 'Provides connection to machines by IP'
iconFile = 'provider.png'
def post_login(self) -> typing.Any:
result = self._service.login(self._params['username'], self._params['session_type'])
return result._asdict()
from .IPMachinesService import IPMachinesService
from .IPSingleMachineService import IPSingleMachineService
offers = [IPMachinesService, IPSingleMachineService]
def post_logout(self) -> typing.Any:
self._service.logout(self._params['username'])
return 'ok'
def __unicode__(self):
return "Physical Machines Provider"
def post_ping(self) -> typing.Any:
return 'pong'
def post_register(self) -> typing.Any:
self._service._clientsPool.register(self._params['callback_url']) # pylint: disable=protected-access
return 'ok'
def post_unregister(self) -> typing.Any:
self._service._clientsPool.unregister(self._params['callback_url']) # pylint: disable=protected-access

View File

@@ -0,0 +1,87 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
import typing
from .. import tools
from . import handler
from ..log import logger
if typing.TYPE_CHECKING:
from ..service import CommonService
class PublicProvider(handler.Handler):
def post_logout(self) -> typing.Any:
logger.debug('Sending LOGOFF to clients')
self._service._clientsPool.logout() # pylint: disable=protected-access
return 'ok'
# Alias
post_logoff = post_logout
def post_message(self) -> typing.Any:
logger.debug('Sending MESSAGE to clients')
if 'message' not in self._params:
raise Exception('Invalid message parameters')
self._service._clientsPool.message(self._params['message']) # pylint: disable=protected-access
return 'ok'
def post_script(self) -> typing.Any:
logger.debug('Received script: {}'.format(self._params))
if 'script' not in self._params:
raise Exception('Invalid script parameters')
if self._params.get('user', False):
logger.debug('Sending SCRIPT to client')
self._service._clientsPool.executeScript(self._params['script']) # pylint: disable=protected-access
else:
# Execute script at server space, that is, here
# as a parallel thread
th = tools.ScriptExecutorThread(self._params['script'])
th.start()
return 'ok'
def post_preConnect(self) -> typing.Any:
logger.debug('Received Pre connection')
if 'user' not in self._params or 'protocol' not in self._params:
raise Exception('Invalid preConnect parameters')
return self._service.preConnect(self._params['user'], self._params['protocol'], self._params.get('ip', 'unknown'), self._params.get('hostname', 'unknown'))
def get_information(self) -> typing.Any:
# Return something useful? :)
return 'UDS Actor Secure Server'
def get_screenshot(self) -> typing.Any:
return self._service._clientsPool.screenshot() # pylint: disable=protected-access
def get_uuid(self) -> typing.Any:
if self._service.isManaged():
return self._service._cfg.own_token # pylint: disable=protected-access
return ''

View File

@@ -0,0 +1,166 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
import os
import threading
import http.server
import json
import ssl
import typing
from ..log import logger
from .. import certs
from .. import rest
from .public import PublicProvider
from .local import LocalProvider
# Not imported at runtime, just for type checking
if typing.TYPE_CHECKING:
from ..service import CommonService
from .handler import Handler
class HTTPServerHandler(http.server.BaseHTTPRequestHandler):
protocol_version = 'HTTP/1.0'
server_version = 'UDS Actor Server'
sys_version = ''
_service: typing.Optional['CommonService'] = None
def sendJsonResponse(self, result: typing.Optional[typing.Any] = None, error: typing.Optional[str] = None, code: int = 200) -> None:
data = json.dumps({'result': result, 'error': error})
self.send_response(code)
self.send_header('Content-type', 'application/json')
self.send_header('Content-Length', str(len(data)))
self.send_header('Server: ', self.server_version)
self.end_headers()
self.wfile.write(data.encode())
def process(self, method: str, params: typing.MutableMapping[str, str]) -> None:
if not self._service:
self.sendJsonResponse(error='Not initialized', code=500)
return
# Very simple path & params splitter
path = self.path.split('?')[0][1:].split('/')
logger.debug('Path: %s, params: %s', path, params)
handlerType: typing.Optional[typing.Type['Handler']] = None
if len(path) == 3 and path[0] == 'actor' and path[1] == self._service._secret: # pylint: disable=protected-access
# public method
handlerType = PublicProvider
elif len(path) == 2 and path[0] == 'ui':
# private method, only from localhost
if self.client_address[0][:3] == '127':
handlerType = LocalProvider
if not handlerType:
self.sendJsonResponse(error='Forbidden', code=403)
return
try:
result = getattr(handlerType(self._service, method, params), method + '_' + path[-1])() # last part of path is method
except AttributeError:
self.sendJsonResponse(error='Method not found', code=404)
return
except Exception as e:
logger.error('Got exception executing {} {}: {}'.format(method, '/'.join(path), str(e)))
self.sendJsonResponse(error=str(e), code=500)
return
self.sendJsonResponse(result)
def do_GET(self) -> None:
try:
params = {v.split('=')[0]: v.split('=')[1] for v in self.path.split('?')[1].split('&')}
except Exception:
params = {}
self.process('get', params)
def do_POST(self) -> None:
try:
length = int(str(self.headers.get('content-length', '0')))
content = self.rfile.read(length)
params: typing.MutableMapping[str, str] = json.loads(content)
except Exception as e:
logger.error('Got exception executing POST {}: {}'.format(self.path, str(e)))
self.sendJsonResponse(error='Invalid parameters', code=400)
return
self.process('post', params)
def log_error(self, format, *args): # pylint: disable=redefined-builtin
logger.error(format, *args)
def log_message(self, format, *args): # pylint: disable=redefined-builtin
logger.debug(format, *args)
class HTTPServerThread(threading.Thread):
_server: typing.Optional[http.server.HTTPServer]
_service: 'CommonService'
_certFile: typing.Optional[str]
def __init__(self, service: 'CommonService'):
super().__init__()
self._server = None
self._service = service
self._certFile = None
def stop(self) -> None:
logger.debug('Stopping Http-server Service')
if self._server:
self._server.shutdown()
self._server = None
if self._certFile:
try:
os.unlink(self._certFile)
except Exception as e:
logger.error('Error removing certificate file: %s', e)
logger.debug('Http-server stopped')
def run(self):
HTTPServerHandler._service = self._service # pylint: disable=protected-access
self._certFile, password = certs.saveCertificate(self._service._certificate) # pylint: disable=protected-access
self._server = http.server.HTTPServer(('0.0.0.0', rest.LISTEN_PORT), HTTPServerHandler)
# self._server.socket = ssl.wrap_socket(self._server.socket, certfile=self.certFile, server_side=True)
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.options = ssl.CERT_NONE
context.load_cert_chain(certfile=self._certFile, password=password)
self._server.socket = context.wrap_socket(self._server.socket, server_side=True)
self._server.serve_forever()

View File

@@ -0,0 +1 @@
VERSION = '3.0.0'

View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2013 Virtual Cable S.L.
# Copyright (c) 2014-2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
@@ -29,5 +29,3 @@
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
__updated__ = '2014-02-19'

View File

@@ -0,0 +1,173 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014-2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
import sys
import os
import time
import atexit
from signal import SIGTERM, SIGKILL
from udsactor.log import logger
class Daemon:
"""
A generic daemon class.
Usage: subclass the Daemon class and override the run() method
"""
def __init__(self, pidfile: str, stdin: str = '/dev/null', stdout: str = '/dev/null', stderr: str = '/dev/null'):
self.stdin = stdin
self.stdout = stdout
self.stderr = stderr
self.pidfile = pidfile
def daemonize(self) -> None:
"""
do the UNIX double-fork magic, see Stevens' "Advanced
Programming in the UNIX Environment" for details (ISBN 0201563177)
http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16
"""
try:
pid = os.fork()
if pid > 0:
# exit first parent
sys.exit(0)
except OSError as e:
logger.error("fork #1 error: {}".format(e))
sys.stderr.write("fork #1 failed: {}\n".format(e))
sys.exit(1)
# decouple from parent environment
os.chdir("/")
os.setsid()
os.umask(0)
# do second fork
try:
pid = os.fork()
if pid > 0:
# exit from second parent
sys.exit(0)
except OSError as e:
logger.error("fork #2 error: {}".format(e))
sys.stderr.write("fork #2 failed: {}\n".format(e))
sys.exit(1)
# redirect standard file descriptors
sys.stdout.flush()
sys.stderr.flush()
si = open(self.stdin, 'r')
so = open(self.stdout, 'ab+')
se = open(self.stderr, 'ab+', 0)
os.dup2(si.fileno(), sys.stdin.fileno())
os.dup2(so.fileno(), sys.stdout.fileno())
os.dup2(se.fileno(), sys.stderr.fileno())
# write pidfile
atexit.register(self.removePidFile)
pidStr = str(os.getpid())
with open(self.pidfile, 'w+') as f:
f.write("{}\n".format(pidStr))
def removePidFile(self) -> None:
try:
os.remove(self.pidfile)
except Exception:
# Not found/not permissions or whatever, ignore it
pass
def start(self) -> None:
"""
Start the daemon
"""
logger.debug('Starting daemon')
# Check for a pidfile to see if the daemon already runs
if os.path.exists(self.pidfile):
message = "pidfile {} already exist. Daemon already running?\n".format(self.pidfile)
logger.error(message)
sys.stderr.write(message)
sys.exit(1)
# Start the daemon
self.daemonize()
try:
self.run()
except Exception as e:
logger.error('Exception running process: {}'.format(e))
self.removePidFile()
def stop(self) -> None:
"""
Stop the daemon
"""
# Get the pid from the pidfile
try:
pf = open(self.pidfile, 'r')
pid = int(pf.read().strip())
pf.close()
except IOError:
message = "pidfile {} does not exist. Daemon not running?\n".format(self.pidfile)
logger.error(message)
# sys.stderr.write(message)
return # not an error in a restart
# Try killing the daemon process
try:
cnt = 10
while cnt:
cnt -= 1
os.kill(pid, SIGTERM)
time.sleep(1)
if not cnt:
os.kill(pid, SIGKILL)
except OSError as err:
if err.errno == 3: # No such process
if os.path.exists(self.pidfile):
os.remove(self.pidfile)
else:
sys.stderr.write('Error: {}'.format(err))
sys.exit(1)
def restart(self) -> None:
"""
Restart the daemon
"""
self.stop()
self.start()
# Overridables
def run(self) -> None:
"""
override this to provide your own daemon
"""

View File

@@ -0,0 +1,73 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014-2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
# pylint: disable=invalid-name
import os
import tempfile
import logging
import typing
class LocalLogger: # pylint: disable=too-few-public-methods
linux = False
windows = True
logger: typing.Optional[logging.Logger]
def __init__(self) -> None:
# tempdir is different for "user application" and "service"
# service wil get c:\windows\temp, while user will get c:\users\XXX\temp
# Try to open logger at /var/log path
# If it fails (access denied normally), will try to open one at user's home folder, and if
# agaim it fails, open it at the tmpPath
for logDir in ('/var/log', os.path.expanduser('~'), tempfile.gettempdir()):
try:
fname = os.path.join(logDir, 'udsactor.log')
logging.basicConfig(
filename=fname,
filemode='a',
format='%(levelname)s %(asctime)s %(message)s',
level=logging.DEBUG
)
self.logger = logging.getLogger('udsactor')
os.chmod(fname, 0o0600)
return
except Exception:
pass
# Logger can't be set
self.logger = None
def log(self, level: int, message: str) -> None:
# Debug messages are logged to a file
# our loglevels are 0 (other), 10000 (debug), ....
# logging levels are 10 (debug), 20 (info)
# OTHER = logging.NOTSET
if self.logger:
self.logger.log(int(level / 1000), message)

View File

@@ -0,0 +1,196 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014-2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
# pylint: disable=invalid-name
import configparser
import platform
import socket
import fcntl # Only available on Linux. Expect complains if edited from windows
import os
import subprocess
import struct
import array
import typing
from .. import types
from .renamer import rename
from . import xss
def _getMacAddr(ifname: str) -> typing.Optional[str]:
'''
Returns the mac address of an interface
Mac is returned as unicode utf-8 encoded
'''
ifnameBytes = ifname.encode('utf-8')
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
info = bytearray(fcntl.ioctl(s.fileno(), 0x8927, struct.pack(str('256s'), ifnameBytes[:15])))
return str(''.join(['%02x:' % char for char in info[18:24]])[:-1]).upper()
except Exception:
return None
def _getIpAddr(ifname: str) -> typing.Optional[str]:
'''
Returns the ip address of an interface
Ip is returned as unicode utf-8 encoded
'''
ifnameBytes = ifname.encode('utf-8')
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
return str(socket.inet_ntoa(fcntl.ioctl(
s.fileno(),
0x8915, # SIOCGIFADDR
struct.pack(str('256s'), ifnameBytes[:15])
)[20:24]))
except Exception:
return None
def _getInterfaces() -> typing.List[str]:
'''
Returns a list of interfaces names coded in utf-8
'''
max_possible = 128 # arbitrary. raise if needed.
space = max_possible * 16
if platform.architecture()[0] == '32bit':
offset, length = 32, 32
elif platform.architecture()[0] == '64bit':
offset, length = 16, 40
else:
raise OSError('Unknown arquitecture {0}'.format(platform.architecture()[0]))
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
names = array.array(str('B'), b'\0' * space)
outbytes = struct.unpack(str('iL'), fcntl.ioctl(
s.fileno(),
0x8912, # SIOCGIFCONF
struct.pack(str('iL'), space, names.buffer_info()[0])
))[0]
namestr = names.tostring()
# return namestr, outbytes
return [namestr[i:i + offset].split(b'\0', 1)[0].decode('utf-8') for i in range(0, outbytes, length)]
def _getIpAndMac(ifname: str) -> typing.Tuple[typing.Optional[str], typing.Optional[str]]:
ip, mac = _getIpAddr(ifname), _getMacAddr(ifname)
return (ip, mac)
def checkPermissions() -> bool:
return os.getuid() == 0 # getuid only available on linux. Expect "complaioins" if edited from Windows
def getComputerName() -> str:
'''
Returns computer name, with no domain
'''
return socket.gethostname().split('.')[0]
def getNetworkInfo() -> typing.Iterator[types.InterfaceInfoType]:
for ifname in _getInterfaces():
ip, mac = _getIpAndMac(ifname)
if mac != '00:00:00:00:00:00' and mac and ip and ip.startswith('169.254') is False: # Skips local interfaces & interfaces with no dhcp IPs
yield types.InterfaceInfoType(name=ifname, mac=mac, ip=ip)
def getDomainName() -> str:
return ''
def getLinuxOs() -> str:
try:
with open('/etc/os-release', 'r') as f:
data = f.read()
cfg = configparser.ConfigParser()
cfg.read_string('[os]\n' + data)
return cfg['os'].get('id', 'unknown').replace('"', '')
except Exception:
return 'unknown'
def reboot(flags: int = 0):
'''
Simple reboot using os command
'''
subprocess.call(['/sbin/shutdown', 'now', '-r'])
def loggoff() -> None:
'''
Right now restarts the machine...
'''
subprocess.call(['/usr/bin/pkill', '-u', os.environ['USER']])
# subprocess.call(['/sbin/shutdown', 'now', '-r'])
# subprocess.call(['/usr/bin/systemctl', 'reboot', '-i'])
def renameComputer(newName: str) -> bool:
'''
Changes the computer name
Returns True if reboot needed
'''
rename(newName)
return True # Always reboot right now. Not much slower but much more better
def joinDomain(domain: str, ou: str, account: str, password: str, executeInOneStep: bool = False):
pass
def changeUserPassword(user: str, oldPassword: str, newPassword: str) -> None:
'''
Simple password change for user using command line
'''
os.system('echo "{1}\n{1}" | /usr/bin/passwd {0} 2> /dev/null'.format(user, newPassword))
def initIdleDuration(atLeastSeconds: int) -> None:
xss.initIdleDuration(atLeastSeconds)
def getIdleDuration() -> float:
return xss.getIdleDuration()
def getCurrentUser() -> str:
'''
Returns current logged in user
'''
return os.environ['USER']
def getSessionType() -> str:
'''
Known values:
* Unknown -> No XDG_SESSION_TYPE environment variable
* xrdp --> xrdp session
* other types
'''
return 'xrdp' if 'XRDP_SESSION' in os.environ else os.environ.get('XDG_SESSION_TYPE', 'unknown')
def forceTimeSync() -> None:
return

View File

@@ -0,0 +1,35 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014-2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
from .common import rename
# Import packages
from . import debian, opensuse, redhat, alt

View File

@@ -0,0 +1,74 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014-2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Alexey Shabalin, shaba at altlinux dot org
'''
import os
from .common import renamers
from ...log import logger
def rename(newName: str) -> bool:
'''
ALT, ALTLinux, BaseALT Renamer
Expects new host name on newName
Host does not needs to be rebooted after renaming
'''
logger.debug('using ALT renamer')
with open('/etc/hostname', 'w') as hostname:
hostname.write(newName)
# Force system new name
os.system('/bin/hostname {}'.format(newName))
os.system('/usr/bin/hostnamectl set-hostname {}'.format(newName))
# add name to "hosts"
with open('/etc/hosts', 'r') as hosts:
lines = hosts.readlines()
with open('/etc/hosts', 'w') as hosts:
hosts.write("127.0.1.1\t{}\n".format(newName))
for l in lines:
if l[:9] != '127.0.1.1': # Skips existing 127.0.1.1. if it already exists
hosts.write(l)
with open('/etc/sysconfig/network', 'r') as net:
lines = net.readlines()
with open('/etc/sysconfig/network', 'w') as net:
net.write('HOSTNAME={}\n'.format(newName))
for l in lines:
if l[:8] != 'HOSTNAME':
net.write(l)
return True
# All names in lower case
renamers['altlinux'] = rename
renamers['alt'] = rename
renamers['basealt'] = rename

View File

@@ -1,7 +1,6 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2017 Virtual Cable S.L.
# Copyright (c) 2014-2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
@@ -26,33 +25,28 @@
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
from __future__ import unicode_literals
import random
import os
import tempfile
import string
import webbrowser
import sys
import pkgutil
import typing
TEMPLATE = '''<html>
<head>
<title>{title}</title>
</head>
<body>
<h1>{title}</h1>
<p>{message}<P>
</body>
</html>
'''
from .. import operations
from ...log import logger
def _htmlFilename():
return os.path.join(tempfile.gettempdir(), ''.join([random.choice(string.ascii_lowercase) for i in range(22)]) + '.html')
renamers: typing.MutableMapping[str, typing.Callable[[str], bool]] = {}
def message(title, message):
filename = _htmlFilename()
with open(filename, 'w') as f:
f.write(TEMPLATE.format(title=title, message=message))
# Renamers now are for IPv4 only addresses
def rename(newName: str) -> bool:
distribution = operations.getLinuxOs().lower().strip()
if distribution in renamers:
logger.info('Renaming to {}'.format(newName))
return renamers[distribution](newName)
# Try Debian renamer, simplest one
logger.info('Renamer for platform "{0}" not found, trying debian renamer'.format(distribution))
return renamers['debian'](newName)
webbrowser.open('file://' + filename, new=0, autoraise=False)

View File

@@ -1,7 +1,6 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2017 Virtual Cable S.L.
# Copyright (c) 2014-2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
@@ -26,24 +25,41 @@
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
from __future__ import unicode_literals
import sys
import time
from uds.log import logger
import os
counter = 0
from .common import renamers
from ...log import logger
def message(title, message):
sys.stderr.write("** {} **\n {}\n".format(title, message))
def question(title, message):
global counter
if counter > 100: # 5 minutes
return False
counter += 1
sys.stderr.write("** {} **\n{}\nReturning YES in 3 seconds. (counter is {})\n".format(title, message, counter))
time.sleep(3) # Wait 3 seconds before returning
def rename(newName: str) -> bool:
'''
Debian renamer
Expects new host name on newName
Host does not needs to be rebooted after renaming
'''
with open('/etc/hostname', 'w') as hostname:
hostname.write(newName)
# Force system new name
os.system('/bin/hostname {}'.format(newName))
os.system('/usr/bin/hostnamectl set-hostname {}'.format(newName))
# add name to "hosts"
with open('/etc/hosts', 'r') as hosts:
lines = hosts.readlines()
with open('/etc/hosts', 'w') as hosts:
hosts.write("127.0.1.1\t%s\n" % newName)
for l in lines:
if l[:9] == '127.0.1.1': # Skips existing 127.0.1.1. if it already exists
continue
hosts.write(l)
return True
# All names in lower case
renamers['debian'] = rename
renamers['ubuntu'] = rename

View File

@@ -0,0 +1,66 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014-2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
import os
from .common import renamers
from ...log import logger
def rename(newName: str) -> bool:
'''
RH, Centos, Fedora Renamer
Expects new host name on newName
Host does not needs to be rebooted after renaming
'''
logger.debug('using SUSE renamer')
with open('/etc/hostname', 'w') as hostname:
hostname.write(newName)
# Force system new name
os.system('/bin/hostname {}'.format(newName))
os.system('/usr/bin/hostnamectl set-hostname {}'.format(newName))
# add name to "hosts"
with open('/etc/hosts', 'r') as hosts:
lines = hosts.readlines()
with open('/etc/hosts', 'w') as hosts:
hosts.write("127.0.1.1\t{}\n".format(newName))
for l in lines:
if l[:9] != '127.0.1.1': # Skips existing 127.0.1.1. if it already exists
hosts.write(l)
return True
# All names in lower case
renamers['opensuse'] = rename
renamers['suse'] = rename
renamers['opensuse-leap'] = rename

View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2012 Virtual Cable S.L.
# Copyright (c) 2014-2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
@@ -28,36 +28,47 @@
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
from __future__ import unicode_literals
import os
__updated__ = '2015-02-28'
from django.shortcuts import render_to_response
from django.shortcuts import redirect
from django.template import RequestContext
from uds.core.auths.auth import webLoginRequired
from uds.core.managers.UserPrefsManager import UserPrefsManager
from uds.core.util.Config import GlobalConfig
from uds.core.ui import theme
from .common import renamers
from ...log import logger
import logging
logger = logging.getLogger(__name__)
@webLoginRequired(admin=False)
def prefs(request):
def rename(newName: str) -> bool:
'''
Preferences form
:param request:
RH, Centos, Fedora Renamer
Expects new host name on newName
Host does not needs to be rebooted after renaming
'''
# Redirects to index if no preferences change allowed
if GlobalConfig.PREFERENCES_ALLOWED.getBool(True) is False:
return redirect('uds.web.views.index')
if request.method == 'POST':
UserPrefsManager.manager().processRequestForUserPreferences(request.user, request.POST)
return redirect('uds.web.views.index')
prefs_form = UserPrefsManager().manager().getHtmlForUserPreferences(request.user)
return render_to_response(theme.template('prefs.html'), {'prefs_form': prefs_form}, context_instance=RequestContext(request))
logger.debug('using RH renamer')
with open('/etc/hostname', 'w') as hostname:
hostname.write(newName)
# Force system new name
os.system('/bin/hostname {}'.format(newName))
os.system('/usr/bin/hostnamectl set-hostname {}'.format(newName))
# add name to "hosts"
with open('/etc/hosts', 'r') as hosts:
lines = hosts.readlines()
with open('/etc/hosts', 'w') as hosts:
hosts.write("127.0.1.1\t{}\n".format(newName))
for l in lines:
if l[:9] != '127.0.1.1': # Skips existing 127.0.1.1. if it already exists
hosts.write(l)
with open('/etc/sysconfig/network', 'r') as net:
lines = net.readlines()
with open('/etc/sysconfig/network', 'w') as net:
net.write('HOSTNAME={}\n'.format(newName))
for l in lines:
if l[:8] != 'HOSTNAME':
net.write(l)
return True
# All names in lower case
renamers['centos linux'] = rename
renamers['centos'] = rename
renamers['fedora'] = rename

View File

@@ -0,0 +1,76 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014-2020 Virtual Cable S.L.U.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
import sys
from .. import rest
from .. import platform
from ..log import logger
from .service import UDSActorSvc
def usage():
sys.stderr.write('usage: udsactor start|stop|restart|login "username"|logout "username"\n')
sys.exit(2)
def run() -> None:
logger.setLevel(20000)
if len(sys.argv) == 3 and sys.argv[1] in ('login', 'logout'):
logger.debug('Running client udsactor')
try:
client: rest.UDSClientApi = rest.UDSClientApi()
if sys.argv[1] == 'login':
r = client.login(sys.argv[2], platform.operations.getSessionType())
print('{},{},{},{}\n'.format(r.ip, r.hostname, r.max_idle, r.dead_line or ''))
elif sys.argv[1] == 'logout':
client.logout(sys.argv[2])
except Exception as e:
logger.exception()
logger.error('Got exception while processing command: %s', e)
sys.exit(0)
elif len(sys.argv) != 2:
usage()
daemonSvr = UDSActorSvc()
if len(sys.argv) == 2:
# Daemon mode...
if sys.argv[1] == 'start':
daemonSvr.start()
elif sys.argv[1] == 'stop':
daemonSvr.stop()
elif sys.argv[1] == 'restart':
daemonSvr.restart()
elif sys.argv[1] == 'start-foreground':
daemonSvr.run() # Execute in foreground
else:
usage()
sys.exit(0)
else:
usage()

View File

@@ -0,0 +1,106 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014-2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
import signal
from . import daemon
from ..log import logger
from ..service import CommonService
try:
from prctl import set_proctitle # @UnresolvedImport
except ImportError: # Platform may not include prctl, so in case it's not available, we let the "name" as is
def set_proctitle(_):
pass
class UDSActorSvc(daemon.Daemon, CommonService):
def __init__(self) -> None:
daemon.Daemon.__init__(self, '/run/udsactor.pid')
CommonService.__init__(self)
# Captures signals so we can stop gracefully
signal.signal(signal.SIGINT, self.markForExit)
signal.signal(signal.SIGTERM, self.markForExit)
def markForExit(self, signum, frame) -> None: # pylint: disable=unused-argument
self._isAlive = False
def joinDomain( # pylint: disable=unused-argument, too-many-arguments
self,
name: str,
domain: str,
ou: str,
account: str,
password: str
) -> None:
logger.info('Join domain is not supported on linux platforms right now. Just renaming.')
self.rename(name)
def run(self) -> None:
logger.debug('Running Daemon: {}'.format(self._isAlive))
set_proctitle('UDSActorDaemon')
# Linux daemon will continue running unless something is requested to
# Unmanaged services does not initializes "on start", but rather when user logs in (because userservice does not exists "as such" before that)
if self.isManaged():
if not self.initialize():
self.finish()
return # Stop daemon if initializes told to do so
# logger.debug('Initialized, setting ready')
# Initialization is done, set machine to ready for UDS, communicate urls, etc...
self.setReady()
else:
if not self.initializeUnmanaged():
self.finish()
return
# Start listening for petitions
self.startHttpServer()
# *********************
# * Main Service loop *
# *********************
# Counter used to check ip changes only once every 10 seconds, for
# example
counter = 0
while self._isAlive:
counter += 1
try:
if counter % 5 == 0:
self.loop()
except Exception as e:
logger.error('Got exception on main loop: %s', e)
# In milliseconds, will break
self.doWait(1000)
self.finish()

View File

@@ -0,0 +1,105 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014-2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
# pylint: disable=invalid-name
import os
import configparser
import base64
import pickle
from .. import types
CONFIGFILE = '/etc/udsactor/udsactor.cfg'
def readConfig() -> types.ActorConfigurationType:
try:
cfg = configparser.ConfigParser()
cfg.read(CONFIGFILE)
uds: configparser.SectionProxy = cfg['uds']
# Extract data:
base64Config = uds.get('config', None)
config = pickle.loads(base64.b64decode(base64Config.encode())) if base64Config else None
base64Data = uds.get('data', None)
data = pickle.loads(base64.b64decode(base64Data.encode())) if base64Data else None
return types.ActorConfigurationType(
actorType=uds.get('type', types.MANAGED),
host=uds.get('host', ''),
validateCertificate=uds.getboolean('validate', fallback=False),
master_token=uds.get('master_token', None),
own_token=uds.get('own_token', None),
pre_command=uds.get('pre_command', None),
runonce_command=uds.get('runonce_command', None),
post_command=uds.get('post_command', None),
log_level=int(uds.get('log_level', '2')),
config=config,
data=data
)
except Exception:
return types.ActorConfigurationType('', False)
def writeConfig(config: types.ActorConfigurationType) -> None:
cfg = configparser.ConfigParser()
cfg.add_section('uds')
uds: configparser.SectionProxy = cfg['uds']
uds['host'] = config.host
uds['validate'] = 'yes' if config.validateCertificate else 'no'
def writeIfValue(val, name):
if val:
uds[name] = val
writeIfValue(config.actorType, 'type')
writeIfValue(config.master_token, 'master_token')
writeIfValue(config.own_token, 'own_token')
writeIfValue(config.pre_command, 'pre_command')
writeIfValue(config.post_command, 'post_command')
writeIfValue(config.runonce_command, 'runonce_command')
uds['log_level'] = str(config.log_level)
if config.config: # Special case, encoded & dumped
uds['config'] = base64.b64encode(pickle.dumps(config.config)).decode()
if config.data: # Special case, encoded & dumped
uds['data'] = base64.b64encode(pickle.dumps(config.data)).decode()
# Ensures exists destination folder
dirname = os.path.dirname(CONFIGFILE)
if not os.path.exists(dirname):
os.mkdir(dirname, mode=0o700) # Will create only if route to path already exists, for example, /etc (that must... :-))
with open(CONFIGFILE, 'w') as f:
cfg.write(f)
os.chmod(CONFIGFILE, 0o0600) # Ensure only readable by root
def useOldJoinSystem() -> bool:
return False
def invokeScriptOnLogin() -> str:
return ''

View File

@@ -0,0 +1,128 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014-2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
# pylint: disable=invalid-name
import ctypes
import ctypes.util
import subprocess
xlib = None
xss = None
display = None
xssInfo = None
initialized = False
class XScreenSaverInfo(ctypes.Structure): # pylint: disable=too-few-public-methods
_fields_ = [('window', ctypes.c_long),
('state', ctypes.c_int),
('kind', ctypes.c_int),
('til_or_since', ctypes.c_ulong),
('idle', ctypes.c_ulong),
('eventMask', ctypes.c_ulong)]
class c_ptr(ctypes.c_void_p):
pass
def _ensureInitialized():
global xlib, xss, xssInfo, display, initialized # pylint: disable=global-statement
if initialized:
return
initialized = True
try:
xlibPath = ctypes.util.find_library('X11')
xssPath = ctypes.util.find_library('Xss')
xlib = xss = None
if not xlibPath or not xssPath:
raise Exception('Library Not found!!')
xlib = ctypes.cdll.LoadLibrary(xlibPath)
xss = ctypes.cdll.LoadLibrary(xssPath)
# Fix result type to XScreenSaverInfo Structure
xss.XScreenSaverQueryExtension.restype = ctypes.c_int
xss.XScreenSaverQueryExtension.argtypes = [
ctypes.c_void_p,
ctypes.POINTER(ctypes.c_int),
ctypes.POINTER(ctypes.c_int)
]
xss.XScreenSaverAllocInfo.restype = ctypes.POINTER(XScreenSaverInfo) # Result in a XScreenSaverInfo structure
xss.XScreenSaverQueryInfo.argtypes = [
ctypes.c_void_p,
ctypes.c_void_p,
ctypes.POINTER(XScreenSaverInfo)
]
xlib.XOpenDisplay.argtypes = [ctypes.c_char_p]
xlib.XOpenDisplay.restype = c_ptr
display = xlib.XOpenDisplay(None)
if not display.value:
raise Exception('Display not found!') # Invalid display, not accesible
xssInfo = xss.XScreenSaverAllocInfo()
# Ensures screen saver extension is available
event_base = ctypes.c_int()
error_base = ctypes.c_int()
available = xss.XScreenSaverQueryExtension(display, ctypes.byref(event_base), ctypes.byref(error_base))
if available != 1:
raise Exception('ScreenSaver not available')
except Exception: # Libraries not accesible, not found or whatever..
xlib = xss = display = xssInfo = None
def initIdleDuration(atLeastSeconds: int) -> None:
_ensureInitialized()
if atLeastSeconds:
subprocess.call(['/usr/bin/xset', 's', '{}'.format(atLeastSeconds + 30)])
# And now reset it
subprocess.call(['/usr/bin/xset', 's', 'reset'])
def getIdleDuration() -> float:
'''
Returns idle duration, in seconds
'''
if not initialized or not xlib or not xss or not xssInfo:
return 0 # Libraries not available
xss.XScreenSaverQueryInfo(display, xlib.XDefaultRootWindow(display), xssInfo)
# States: 0 = off, 1 = On, 2 = Cycle, 3 = Disabled, ...?
if xssInfo.contents.state == 1: # state = 1 means "active", so idle is not a valid state
return 3600 * 100 * 1000 # If screen saver is active, return a high enough value
return xssInfo.contents.idle / 1000.0

117
actor/src/udsactor/log.py Normal file
View File

@@ -0,0 +1,117 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014-2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
# pylint: disable=invalid-name
import traceback
import sys
import typing
if sys.platform == 'win32':
from .windows.log import LocalLogger
else:
from .linux.log import LocalLogger
# Not imported at runtime, just for type checking
if typing.TYPE_CHECKING:
from . import rest
# Valid logging levels, from UDS Broker (uds.core.utils.log)
from .loglevel import OTHER, DEBUG, INFO, WARN, ERROR, FATAL
class Logger:
remoteLogger: typing.Optional['rest.UDSServerApi']
own_token: str
logLevel: int
localLogger: LocalLogger
def __init__(self) -> None:
self.logLevel = INFO
self.localLogger = LocalLogger()
self.remoteLogger = None
self.own_token = ''
def setLevel(self, level: typing.Union[str, int]) -> None:
'''
Sets log level filter (minimum level required for a log message to be processed)
:param level: Any message with a level below this will be filtered out
'''
self.logLevel = int(level) # Ensures level is an integer or fails
def setRemoteLogger(self, remoteLogger: 'rest.UDSServerApi', own_token: str) -> None:
self.remoteLogger = remoteLogger
self.own_token = own_token
def enableServiceLogger(self):
if self.localLogger.windows:
self.localLogger.serviceLogger = True
def log(self, level: typing.Union[str, int], message: str, *args) -> None:
level = int(level)
if level < self.logLevel: # Skip not wanted messages
return
msg = message % args
# If remote logger is available, notify message to it (except DEBUG messages OFC)
try:
if self.remoteLogger and level >= DEBUG:
self.remoteLogger.log(self.own_token, level, msg)
except Exception as e:
self.localLogger.log(DEBUG, 'Log to broker: {}'.format(e))
self.localLogger.log(level, msg)
def debug(self, message: str, *args) -> None:
self.log(DEBUG, message, *args)
def warn(self, message: str, *args) -> None:
self.log(WARN, message, *args)
def info(self, message: str, *args) -> None:
self.log(INFO, message, *args)
def error(self, message: str, *args) -> None:
self.log(ERROR, message, *args)
def fatal(self, message: str, *args) -> None:
self.log(FATAL, message, *args)
def exception(self) -> None:
try:
tb = traceback.format_exc()
except Exception:
tb = '(could not get traceback!)'
self.log(DEBUG, tb)
def flush(self) -> None:
pass
logger = Logger()

View File

@@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2020 Virtual Cable S.L.U.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
OTHER, DEBUG, INFO, WARN, ERROR, FATAL = (10000 * x for x in range(6))

View File

@@ -0,0 +1,37 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
import sys
name = sys.platform
if sys.platform == 'win32':
from .windows import operations, store # pylint: disable=unused-import
else:
from .linux import operations, store # pylint: disable=unused-import

401
actor/src/udsactor/rest.py Normal file
View File

@@ -0,0 +1,401 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2019-2021 Virtual Cable S.L.U.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L.U. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
# pylint: disable=invalid-name
import warnings
import json
import logging
import typing
import requests
from . import types
from .info import VERSION
# Default public listen port
LISTEN_PORT = 43910
# Default timeout
TIMEOUT = 5 # 5 seconds is more than enought
# Constants
UNKNOWN = 'unknown'
class RESTError(Exception):
ERRCODE = 0
class RESTConnectionError(RESTError):
ERRCODE = -1
# Errors ""raised"" from broker
class RESTInvalidKeyError(RESTError):
ERRCODE = 1
class RESTUnmanagedHostError(RESTError):
ERRCODE = 2
class RESTUserServiceNotFoundError(RESTError):
ERRCODE = 3
class RESTOsManagerError(RESTError):
ERRCODE = 4
# For avoid proxy on localhost connections
NO_PROXY = {
'http': None,
'https': None,
}
#
# Basic UDS Api
#
class UDSApi: # pylint: disable=too-few-public-methods
"""
Base for remote api accesses
"""
_host: str
_validateCert: bool
_url: str
def __init__(self, host: str, validateCert: bool) -> None:
self._host = host
self._validateCert = validateCert
self._url = "https://{}/uds/rest/".format(self._host)
# Disable logging requests messages except for errors, ...
logging.getLogger("requests").setLevel(logging.CRITICAL)
logging.getLogger("urllib3").setLevel(logging.ERROR)
try:
warnings.simplefilter("ignore") # Disables all warnings
except Exception:
pass
@property
def _headers(self) -> typing.MutableMapping[str, str]:
return {
'Content-Type': 'application/json',
'User-Agent': 'UDS Actor v{}'.format(VERSION)
}
def _apiURL(self, method: str) -> str:
raise NotImplementedError
def _doPost(
self,
method: str, # i.e. 'initialize', 'ready', ....
payLoad: typing.MutableMapping[str, typing.Any],
headers: typing.Optional[typing.MutableMapping[str, str]] = None,
disableProxy: bool = False
) -> typing.Any:
headers = headers or self._headers
try:
result = requests.post(
self._apiURL(method),
data=json.dumps(payLoad),
headers=headers,
verify=self._validateCert,
timeout=TIMEOUT,
proxies=NO_PROXY if disableProxy else None # if not proxies wanted, enforce it
)
if result.ok:
j = result.json()
if not j.get('error', None):
return j['result']
except requests.ConnectionError as e:
raise RESTConnectionError(str(e))
except Exception as e:
raise RESTError(str(e))
try:
data = result.json()
except Exception:
data = result.content.decode()
raise RESTError(data)
#
# UDS Broker API access
#
class UDSServerApi(UDSApi):
def _apiURL(self, method: str) -> str:
return self._url + 'actor/v3/' + method
def enumerateAuthenticators(self) -> typing.Iterable[types.AuthenticatorType]:
try:
result = requests.get(self._url + 'auth/auths', headers=self._headers, verify=self._validateCert, timeout=4)
if result.ok:
for v in sorted(result.json(), key=lambda x: x['priority']):
yield types.AuthenticatorType(
authId=v['authId'],
authSmallName=v['authSmallName'],
auth=v['auth'],
type=v['type'],
priority=v['priority'],
isCustom=v['isCustom']
)
except Exception:
pass
def register( # pylint: disable=too-many-arguments, too-many-locals
self,
auth: str,
username: str,
password: str,
hostname: str,
ip: str,
mac: str,
preCommand: str,
runOnceCommand: str,
postCommand: str,
logLevel: int
) -> str:
"""
Raises an exception if could not register, or registers and returns the "authorization token"
"""
data = {
'username': username + '@' + auth,
'hostname': hostname,
'ip': ip,
'mac': mac,
'pre_command': preCommand,
'run_once_command': runOnceCommand,
'post_command': postCommand,
'log_level': logLevel
}
# First, try to login to REST api
try:
# First, try to login
authInfo = {'auth': auth, 'username': username, 'password': password}
headers = self._headers
result = requests.post(self._url + 'auth/login', data=json.dumps(authInfo), headers=headers, verify=self._validateCert)
if not result.ok or result.json()['result'] == 'error':
raise Exception() # Invalid credentials
headers['X-Auth-Token'] = result.json()['token']
result = requests.post(self._apiURL('register'), data=json.dumps(data), headers=headers, verify=self._validateCert)
if result.ok:
return result.json()['result']
except requests.ConnectionError as e:
raise RESTConnectionError(e)
except RESTError:
raise
except Exception as e:
raise RESTError('Invalid credentials')
raise RESTError(result.content.decode())
def initialize(self, token: str, interfaces: typing.Iterable[types.InterfaceInfoType], actor_type: typing.Optional[str]) -> types.InitializationResultType:
# Generate id list from netork cards
payload = {
'type': actor_type or types.MANAGED,
'token': token,
'version': VERSION,
'id': [{'mac': i.mac, 'ip': i.ip} for i in interfaces]
}
r = self._doPost('initialize', payload)
os = r['os']
return types.InitializationResultType(
own_token=r['own_token'],
unique_id=r['unique_id'].lower() if r['unique_id'] else None,
os=types.ActorOsConfigurationType(
action=os['action'],
name=os['name'],
username=os.get('username'),
password=os.get('password'),
new_password=os.get('new_password'),
ad=os.get('ad'),
ou=os.get('ou')
) if r['os'] else None
)
def ready(self, own_token: str, secret: str, ip: str, port: int) -> types.CertificateInfoType:
payload = {
'token': own_token,
'secret': secret,
'ip': ip,
'port': port
}
result = self._doPost('ready', payload)
return types.CertificateInfoType(
private_key=result['private_key'],
server_certificate=result['server_certificate'],
password=result['password']
)
def notifyIpChange(self, own_token: str, secret: str, ip: str, port: int) -> types.CertificateInfoType:
payload = {
'token': own_token,
'secret': secret,
'ip': ip,
'port': port
}
result = self._doPost('ipchange', payload)
return types.CertificateInfoType(
private_key=result['private_key'],
server_certificate=result['server_certificate'],
password=result['password']
)
def notifyUnmanagedCallback(self, master_token: str, secret: str, interfaces: typing.Iterable[types.InterfaceInfoType], port: int) -> types.CertificateInfoType:
payload = {
'id': [{'mac': i.mac, 'ip': i.ip} for i in interfaces],
'token': master_token,
'secret': secret,
'port': port
}
result = self._doPost('unmanaged', payload)
return types.CertificateInfoType(
private_key=result['private_key'],
server_certificate=result['server_certificate'],
password=result['password']
)
def login(
self,
actor_type: typing.Optional[str],
token: str,
username: str,
sessionType: str,
interfaces: typing.Iterable[types.InterfaceInfoType],
secret: typing.Optional[str]
) -> types.LoginResultInfoType:
if not token:
return types.LoginResultInfoType(
ip='0.0.0.0',
hostname=UNKNOWN,
dead_line=None,
max_idle=None
)
payload = {
'type': actor_type or types.MANAGED,
'id': [{'mac': i.mac, 'ip': i.ip} for i in interfaces],
'token': token,
'username': username,
'session_type': sessionType,
'secret': secret or '',
}
result = self._doPost('login', payload)
return types.LoginResultInfoType(
ip=result['ip'],
hostname=result['hostname'],
dead_line=result['dead_line'],
max_idle=result['max_idle']
)
def logout(
self,
actor_type: typing.Optional[str],
token: str,
username: str,
interfaces: typing.Iterable[types.InterfaceInfoType],
secret: typing.Optional[str]
) -> None:
if not token:
return
payload = {
'type': actor_type or types.MANAGED,
'id': [{'mac': i.mac, 'ip': i.ip} for i in interfaces],
'token': token,
'username': username,
'secret': secret or ''
}
self._doPost('logout', payload)
def log(self, own_token: str, level: int, message: str) -> None:
if not own_token:
return
payLoad = {
'token': own_token,
'level': level,
'message': message
}
self._doPost('log', payLoad) # Ignores result...
def test(self, master_token: str, actorType: typing.Optional[str]) -> bool:
payLoad = {
'type': actorType or types.MANAGED,
'token': master_token,
}
return self._doPost('test', payLoad) == 'ok'
class UDSClientApi(UDSApi):
def __init__(self) -> None:
super().__init__('127.0.0.1:{}'.format(LISTEN_PORT), False)
# Override base url
self._url = "https://{}/ui/".format(self._host)
def _apiURL(self, method: str) -> str:
return self._url + method
def post(
self,
method: str, # i.e. 'initialize', 'ready', ....
payLoad: typing.MutableMapping[str, typing.Any]
) -> typing.Any:
return self._doPost(method=method, payLoad=payLoad, disableProxy=True)
def register(self, callbackUrl: str) -> None:
payLoad = {
'callback_url': callbackUrl
}
self.post('register', payLoad)
def unregister(self, callbackUrl: str) -> None:
payLoad = {
'callback_url': callbackUrl
}
self.post('unregister', payLoad)
def login(self, username: str, sessionType: typing.Optional[str] = None) -> types.LoginResultInfoType:
payLoad = {
'username': username,
'session_type': sessionType or UNKNOWN,
}
result = self.post('login', payLoad)
return types.LoginResultInfoType(
ip=result['ip'],
hostname=result['hostname'],
dead_line=result['dead_line'],
max_idle=result['max_idle']
)
def logout(self, username: str) -> None:
payLoad = {
'username': username
}
self.post('logout', payLoad)
def ping(self) -> bool:
return self.post('ping', {}) == 'pong'

View File

@@ -0,0 +1,501 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014-2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
# pylint: disable=invalid-name
import socket
import time
import secrets
import subprocess
import typing
from . import platform
from . import rest
from . import types
from .log import logger, DEBUG, INFO, ERROR, FATAL
from .http import clients_pool, server, cert
# def setup() -> None:
# cfg = platform.store.readConfig()
# if logger.logger.windows:
# # Logs will also go to windows event log for services
# logger.logger.serviceLogger = True
# if cfg.x:
# logger.setLevel(cfg.get('logLevel', 20000))
# else:
# logger.setLevel(20000)
class CommonService: # pylint: disable=too-many-instance-attributes
_isAlive: bool = True
_rebootRequested: bool = False
_loggedIn: bool = False
_initialized: bool = False
_cfg: types.ActorConfigurationType
_api: rest.UDSServerApi
_interfaces: typing.List[types.InterfaceInfoType]
_secret: str
_certificate: types.CertificateInfoType
_clientsPool: clients_pool.UDSActorClientPool
_http: typing.Optional[server.HTTPServerThread]
@staticmethod
def execute(cmdLine: str, section: str) -> bool:
try:
logger.debug('Executing command on {}: {}'.format(section, cmdLine))
res = subprocess.check_call(cmdLine, shell=True)
except Exception as e:
logger.error('Got exception executing: {} - {} - {}'.format(section, cmdLine, e))
return False
logger.debug('Result of executing cmd for {} was {}'.format(section, res))
return True
def __init__(self) -> None:
self._cfg = platform.store.readConfig()
self._interfaces = []
self._api = rest.UDSServerApi(self._cfg.host, self._cfg.validateCertificate)
self._secret = secrets.token_urlsafe(33)
self._clientsPool = clients_pool.UDSActorClientPool()
self._certificate = cert.defaultCertificate # For being used on "unmanaged" hosts only
self._http = None
# Initialzies loglevel and serviceLogger
# 0 = DEBUG, 1 = INFO, 2 = ERROR, 3 = FATAL in combobox
# BUT!!!:
# 0 = OTHER, 10000 = DEBUG, 20000 = WARN, 30000 = INFO, 40000 = ERROR, 50000 = FATAL
# So this comes:
logger.setLevel([DEBUG, INFO, ERROR, FATAL][self._cfg.log_level])
# If windows, enable service logger
logger.enableServiceLogger()
socket.setdefaulttimeout(20)
def startHttpServer(self):
# Starts the http thread
if self._http:
try:
self._http.stop()
except Exception:
pass
self._http = server.HTTPServerThread(self)
self._http.start()
def isManaged(self) -> bool:
return self._cfg.actorType != types.UNMANAGED # Only "unmanaged" hosts are unmanaged, the rest are "managed"
def serviceInterfaceInfo(self, interfaces: typing.Optional[typing.List[types.InterfaceInfoType]] = None) -> typing.Optional[types.InterfaceInfoType]:
"""
returns the inteface with unique_id mac or first interface or None if no interfaces...
"""
interfaces = interfaces or self._interfaces # Emty interfaces is like "no ip change" because cannot be notified
if self._cfg.config and interfaces:
try:
return next(x for x in interfaces if x.mac.lower() == self._cfg.config.unique_id)
except StopIteration:
return interfaces[0]
return None
def reboot(self) -> None:
# Reboot just after renaming
logger.info('Rebooting...')
self._rebootRequested = True
def setReady(self) -> None:
if not self._isAlive or not self.isManaged():
return
# Unamanged actor types does not set ready never (has no osmanagers, no needing for this)
# First, if postconfig is available, execute it and disable it
if self._cfg.post_command:
self.execute(self._cfg.post_command, 'postConfig')
self._cfg = self._cfg._replace(post_command=None)
platform.store.writeConfig(self._cfg)
if self._cfg.own_token and self._interfaces:
srvInterface = self.serviceInterfaceInfo()
if srvInterface:
# Rery while RESTConnectionError (that is, cannot connect)
counter = 60
logged = False
while self._isAlive:
counter -= 1
try:
self._certificate = self._api.ready(self._cfg.own_token, self._secret, srvInterface.ip, rest.LISTEN_PORT)
except rest.RESTConnectionError as e:
if not logged: # Only log connection problems ONCE
logged = True
logger.error('Error connecting with UDS Broker')
self.doWait(5000)
continue
except Exception as e:
logger.error('Unhandled exception while setting ready: %s', e)
if counter > 0:
self.doWait(10000) # A long wait on other error...
continue
platform.operations.reboot() # On too many errors, simply reboot
# Success or any error that is not recoverable (retunerd by UDS). if Error, service will be cleaned in a while.
break
else:
logger.error('Could not locate IP address!!!. (Not registered with UDS)')
# Do not continue if not alive...
if not self._isAlive:
return
# Cleans sensible data
if self._cfg.config:
self._cfg = self._cfg._replace(config=self._cfg.config._replace(os=None), data=None)
platform.store.writeConfig(self._cfg)
logger.info('Service ready')
def configureMachine(self) -> bool:
if not self._isAlive:
return False
if not self.isManaged():
return True
# First, if runonce is present, honor it and remove it from config
# Return values is "True" for keep service (or daemon) running, False if Stop it.
if self._cfg.runonce_command:
runOnce = self._cfg.runonce_command
self._cfg = self._cfg._replace(runonce_command=None)
platform.store.writeConfig(self._cfg)
if self.execute(runOnce, "runOnce"):
# If runonce is present, will not do anythin more
# So we have to ensure that, when runonce command is finished, reboots the machine.
# That is, the COMMAND itself has to restart the machine!
return False # If the command fails, continue with the rest of the operations...
# Retry configuration while not stop service, config in case of error 10 times, reboot vm
counter = 10
while self._isAlive:
counter -= 1
try:
if self._cfg.config and self._cfg.config.os:
osData = self._cfg.config.os
if osData.action == 'rename':
self.rename(osData.name, osData.username, osData.password, osData.new_password)
elif osData.action == 'rename_ad':
self.joinDomain(osData.name, osData.ad or '', osData.ou or '', osData.username or '', osData.password or '')
if self._rebootRequested:
try:
platform.operations.reboot()
except Exception as e:
logger.error('Exception on reboot: {}'.format(e))
return False # Stops service if reboot was requested ofc
break
except Exception as e:
logger.error('Got exception operating machine: {}'.format(e))
if counter > 0:
self.doWait(5000)
else:
platform.operations.reboot()
return False
return True
def initializeUnmanaged(self) -> bool:
# Notify UDS about my callback
self.getInterfaces() # Ensure we have interfaces
if self._cfg.master_token:
try:
self._certificate = self._api.notifyUnmanagedCallback(self._cfg.master_token, self._secret, self._interfaces, rest.LISTEN_PORT)
except Exception as e:
logger.error('Couuld not notify unmanaged callback: %s', e)
return True
def getInterfaces(self) -> None:
if self._interfaces:
return
while self._isAlive:
self._interfaces = list(platform.operations.getNetworkInfo())
if self._interfaces:
break
self.doWait(5000)
def initialize(self) -> bool:
if self._initialized or not self._cfg.host or not self._isAlive: # Not configured or not running
return False
self._initialized = True
# Force time sync, just in case...
if self.isManaged():
platform.operations.forceTimeSync()
# Wait for Broker to be ready
# Ensure we have intefaces...
self.getInterfaces()
while self._isAlive:
try:
# If master token is present, initialize and get configuration data
if self._cfg.master_token:
initResult: types.InitializationResultType = self._api.initialize(self._cfg.master_token, self._interfaces, self._cfg.actorType)
if not initResult.own_token: # Not managed
logger.debug('This host is not managed by UDS Broker (ids: {})'.format(self._interfaces))
return False
# Only removes master token for managed machines (will need it on next client execution)
master_token = None if self.isManaged() else self._cfg.master_token
self._cfg = self._cfg._replace(
master_token=master_token,
own_token=initResult.own_token,
config=types.ActorDataConfigurationType(
unique_id=initResult.unique_id,
os=initResult.os
)
)
# On first successfull initialization request, master token will dissapear for managed hosts so it will be no more available (not needed anyway)
if self.isManaged():
platform.store.writeConfig(self._cfg)
# Setup logger now
if self._cfg.own_token:
logger.setRemoteLogger(self._api, self._cfg.own_token)
break # Initial configuration done..
except rest.RESTConnectionError as e:
logger.info('Trying to inititialize connection with broker (last error: {})'.format(e))
self.doWait(5000) # Wait a bit and retry
except rest.RESTError as e: # Invalid key?
logger.error('Error validating with broker. (Invalid token?): {}'.format(e))
return False
except Exception:
logger.exception()
self.doWait(5000) # Wait a bit and retry...
return self.configureMachine()
def uninitialize(self):
self._initialized = False
self._cfg = self._cfg._replace(own_token=None) # Ensures assigned token is cleared
def finish(self) -> None:
if self._http:
self._http.stop()
# If logged in, notify UDS of logout (daemon stoped = no control = logout)
if self._loggedIn and self._cfg.own_token:
self._loggedIn = False
try:
self._api.logout(
self._cfg.actorType,
self._cfg.own_token,
'',
self._interfaces,
self._secret
)
except Exception as e:
logger.error('Error notifying final logout to UDS: %s', e)
self.notifyStop()
def checkIpsChanged(self) -> None:
if not self.isManaged():
return # Unamanaged hosts does not changes ips. (The full initialize-login-logout process is done in a row, so at login the IP is correct)
try:
if not self._cfg.own_token or not self._cfg.config or not self._cfg.config.unique_id:
# Not enouth data do check
return
currentInterfaces = list(platform.operations.getNetworkInfo())
old = self.serviceInterfaceInfo()
new = self.serviceInterfaceInfo(currentInterfaces)
if not new or not old:
raise Exception('No ip currently available for {}'.format(self._cfg.config.unique_id))
if old.ip != new.ip:
self._certificate = self._api.notifyIpChange(self._cfg.own_token, self._secret, new.ip, rest.LISTEN_PORT)
# Now store new addresses & interfaces...
self._interfaces = currentInterfaces
logger.info('Ip changed from {} to {}. Notified to UDS'.format(old.ip, new.ip))
# Stop the running HTTP Thread and start a new one, with new generated cert
self.startHttpServer()
except Exception as e:
# No ip changed, log exception for info
logger.warn('Checking ips failed: {}'.format(e))
def rename(
self,
name: str,
userName: typing.Optional[str] = None,
oldPassword: typing.Optional[str] = None,
newPassword: typing.Optional[str] = None
) -> None:
'''
Invoked when broker requests a rename action
default does nothing
'''
hostName = platform.operations.getComputerName()
if hostName.lower() == name.lower():
logger.info('Computer name is already {}'.format(hostName))
return
# Check for password change request for an user
if userName and newPassword:
logger.info('Setting password for configured user')
try:
platform.operations.changeUserPassword(userName, oldPassword or '', newPassword)
except Exception as e:
raise Exception('Could not change password for user {} (maybe invalid current password is configured at broker): {} '.format(userName, str(e)))
if platform.operations.renameComputer(name):
self.reboot()
def loop(self):
# Main common loop
try:
# Checks if ips has changed
self.checkIpsChanged()
# Now check if every registered client is already there (if logged in OFC)
if self._loggedIn and not self._clientsPool.ping():
self.logout('client_unavailable')
except Exception as e:
logger.error('Exception on main service loop: %s', e)
# ******************************************************
# Methods that can be overriden by linux & windows Actor
# ******************************************************
def joinDomain( # pylint: disable=unused-argument, too-many-arguments
self,
name: str,
domain: str,
ou: str,
account: str,
password: str
) -> None:
'''
Invoked when broker requests a "domain" action
default does nothing
'''
logger.debug('Base join invoked: {} on {}, {}'.format(name, domain, ou))
# Client notifications
def login(self, username: str, sessionType: typing.Optional[str] = None) -> types.LoginResultInfoType:
result = types.LoginResultInfoType(ip='', hostname='', dead_line=None, max_idle=None)
self._loggedIn = True
master_token = None
secret = None
# If unmanaged, do initialization now, because we don't know before this
# Also, even if not initialized, get a "login" notification token
if not self.isManaged():
self.initialize()
master_token = self._cfg.master_token
secret = self._secret
# Own token will not be set if UDS did not assigned the initialized VM to an user
# In that case, take master token (if machine is Unamanaged version)
token = self._cfg.own_token or master_token
if token:
result = self._api.login(
self._cfg.actorType,
token,
username,
sessionType or '',
self._interfaces,
secret
)
script = platform.store.invokeScriptOnLogin()
if script:
script += f'{username} {sessionType or "unknown"} {self._cfg.actorType}'
self.execute(script, 'Logon')
return result
def logout(self, username: str) -> None:
self._loggedIn = False
master_token = self._cfg.master_token if self.isManaged() else None
# Own token will not be set if UDS did not assigned the initialized VM to an user
# In that case, take master token (if machine is Unamanaged version)
token = self._cfg.own_token or master_token
if token:
self._api.logout(
self._cfg.actorType,
token,
username,
self._interfaces,
self._secret
)
self.onLogout(username)
if not self.isManaged():
self.uninitialize()
# ****************************************
# Methods that CAN BE overriden by actors
# ****************************************
def doWait(self, miliseconds: int) -> None:
'''
Invoked to wait a bit
CAN be OVERRIDEN
'''
seconds = miliseconds / 1000.0
# So it can be broken by "stop"
while self._isAlive and seconds > 1:
time.sleep(1)
seconds -= 1
time.sleep(seconds)
def notifyStop(self) -> None:
'''
Overriden to log stop (on windows, notify to service manager)
'''
logger.info('Service stopped')
def preConnect(self, userName: str, protocol: str, ip: str, hostname: str) -> str: # pylint: disable=unused-argument
'''
Invoked when received a PRE Connection request via REST
Base preconnect executes the preconnect command
'''
if self._cfg.pre_command:
self.execute(self._cfg.pre_command + ' {} {} {} {}'.format(userName.replace('"', '%22'), protocol, ip, hostname), 'preConnect')
return 'ok'
def onLogout(self, userName: str) -> None:
logger.debug('On logout invoked for {}'.format(userName))

View File

@@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
# pylint: disable=invalid-name
import threading
from udsactor.log import logger
class ScriptExecutorThread(threading.Thread):
def __init__(self, script: str) -> None:
super(ScriptExecutorThread, self).__init__()
self.script = script
def run(self) -> None:
try:
logger.debug('Executing script: {}'.format(self.script))
exec(self.script, globals(), None) # pylint: disable=exec-used
except Exception as e:
logger.error('Error executing script: {}'.format(e))
logger.exception()

View File

@@ -0,0 +1,63 @@
import typing
MANAGED = 'managed'
UNMANAGED = 'unmanaged'
class InterfaceInfoType(typing.NamedTuple):
name: str
mac: str
ip: str
class AuthenticatorType(typing.NamedTuple):
authId: str
authSmallName: str
auth: str
type: str
priority: int
isCustom: bool
class ActorOsConfigurationType(typing.NamedTuple):
action: str
name: str
username: typing.Optional[str] = None
password: typing.Optional[str] = None
new_password: typing.Optional[str] = None
ad: typing.Optional[str] = None
ou: typing.Optional[str] = None
class ActorDataConfigurationType(typing.NamedTuple):
unique_id: typing.Optional[str] = None
os: typing.Optional[ActorOsConfigurationType] = None
class ActorConfigurationType(typing.NamedTuple):
host: str
validateCertificate: bool
actorType: typing.Optional[str] = None
master_token: typing.Optional[str] = None
own_token: typing.Optional[str] = None
pre_command: typing.Optional[str] = None
runonce_command: typing.Optional[str] = None
post_command: typing.Optional[str] = None
log_level: int = 2
config: typing.Optional[ActorDataConfigurationType] = None
data: typing.Optional[typing.Dict[str, typing.Any]] = None
class InitializationResultType(typing.NamedTuple):
own_token: typing.Optional[str] = None
unique_id: typing.Optional[str] = None
os: typing.Optional[ActorOsConfigurationType] = None
class LoginResultInfoType(typing.NamedTuple):
ip: str
hostname: str
dead_line: typing.Optional[int]
max_idle: typing.Optional[int] # Not provided by broker
class CertificateInfoType(typing.NamedTuple):
private_key: str
server_certificate: str
password: str

View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014 Virtual Cable S.L.
# Copyright (c) 2014-2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
@@ -25,10 +25,7 @@
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
from __future__ import unicode_literals
from .usage import usage
from .users import users

View File

@@ -0,0 +1,82 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
# pylint: disable=invalid-name
import logging
import os
import tempfile
import typing
import servicemanager # pylint: disable=import-error
# Valid logging levels, from UDS Broker (uds.core.utils.log).
from .. import loglevel
class LocalLogger: # pylint: disable=too-few-public-methods
linux = False
windows = True
logger: typing.Optional[logging.Logger]
def __init__(self):
# tempdir is different for "user application" and "service"
# service wil get c:\windows\temp, while user will get c:\users\XXX\temp
try:
logging.basicConfig(
filename=os.path.join(tempfile.gettempdir(), 'udsactor.log'),
filemode='a',
format='%(levelname)s %(asctime)s %(message)s',
level=logging.DEBUG
)
except Exception:
logging.basicConfig() # basic init
self.logger = logging.getLogger('udsactor')
self.serviceLogger = False
def log(self, level: int, message: str) -> None:
# Debug messages are logged to a file
# our loglevels are 0 (other), 10000 (debug), ....
# logging levels are 10 (debug), 20 (info)
# OTHER = logging.NOTSET
if self.logger:
self.logger.log(int(level / 1000), message)
if level < loglevel.ERROR or self.serviceLogger is False: # Only information and above will be on event log
return
# In fact, we have restricted level in windows event log to ERROR or FATAL
# but left the code for just a case in the future...
if level < loglevel.WARN: # Info
servicemanager.LogInfoMsg(message)
elif level < loglevel.ERROR: # WARN
servicemanager.LogWarningMsg(message)
else: # Error & Fatal
servicemanager.LogErrorMsg(message)

View File

@@ -0,0 +1,251 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014-2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
# pylint: disable=invalid-name
import os
import subprocess
import ctypes
from ctypes.wintypes import DWORD, LPCWSTR
import typing
import win32com.client
from win32com.shell import shell # pylint: disable=no-name-in-module,import-error
import win32net
import win32security
import win32api
import win32con
from .. import types
from ..log import logger
def checkPermissions() -> bool:
return shell.IsUserAnAdmin()
def getErrorMessage(resultCode: int = 0) -> str:
# sys_fs_enc = sys.getfilesystemencoding() or 'mbcs'
msg = win32api.FormatMessage(resultCode)
return msg
def getComputerName() -> str:
return win32api.GetComputerNameEx(win32con.ComputerNamePhysicalDnsHostname)
def getNetworkInfo() -> typing.Iterator[types.InterfaceInfoType]:
obj = win32com.client.Dispatch("WbemScripting.SWbemLocator")
wmobj = obj.ConnectServer("localhost", "root\\cimv2")
adapters = wmobj.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IpEnabled=True")
try:
for obj in adapters:
for ip in obj.IPAddress:
if ':' in ip: # Is IPV6, skip this
continue
if ip is None or ip == '' or ip.startswith('169.254') or ip.startswith('0.'): # If single link ip, or no ip
continue
yield types.InterfaceInfoType(name=obj.Caption, mac=obj.MACAddress, ip=ip)
except Exception:
return
def getDomainName() -> str:
'''
Will return the domain name if we belong a domain, else None
(if part of a network group, will also return None)
'''
# Status:
# 0 = Unknown
# 1 = Unjoined
# 2 = Workgroup
# 3 = Domain
domain, status = win32net.NetGetJoinInformation()
if status != 3:
domain = None
return domain
def getWindowsVersion() -> typing.Tuple[int, int, int, int, str]:
return win32api.GetVersionEx()
EWX_LOGOFF = 0x00000000
EWX_SHUTDOWN = 0x00000001
EWX_REBOOT = 0x00000002
EWX_FORCE = 0x00000004
EWX_POWEROFF = 0x00000008
EWX_FORCEIFHUNG = 0x00000010
def reboot(flags: int = EWX_FORCEIFHUNG | EWX_REBOOT) -> None:
hproc = win32api.GetCurrentProcess()
htok = win32security.OpenProcessToken(hproc, win32security.TOKEN_ADJUST_PRIVILEGES | win32security.TOKEN_QUERY)
privs = ((win32security.LookupPrivilegeValue(None, win32security.SE_SHUTDOWN_NAME), win32security.SE_PRIVILEGE_ENABLED),)
win32security.AdjustTokenPrivileges(htok, 0, privs)
win32api.ExitWindowsEx(flags, 0)
def loggoff() -> None:
win32api.ExitWindowsEx(EWX_LOGOFF)
def renameComputer(newName: str) -> bool:
'''
Changes the computer name
Returns True if reboot needed
'''
# Needs admin privileges to work
if ctypes.windll.kernel32.SetComputerNameExW(DWORD(win32con.ComputerNamePhysicalDnsHostname), LPCWSTR(newName)) == 0: # @UndefinedVariable
# win32api.FormatMessage -> returns error string
# win32api.GetLastError -> returns error code
# (just put this comment here to remember to log this when logger is available)
error = getErrorMessage()
computerName = win32api.GetComputerNameEx(win32con.ComputerNamePhysicalDnsHostname)
raise Exception('Error renaming computer from {} to {}: {}'.format(computerName, newName, error))
return True
NETSETUP_JOIN_DOMAIN = 0x00000001
NETSETUP_ACCT_CREATE = 0x00000002
NETSETUP_ACCT_DELETE = 0x00000004
NETSETUP_WIN9X_UPGRADE = 0x00000010
NETSETUP_DOMAIN_JOIN_IF_JOINED = 0x00000020
NETSETUP_JOIN_UNSECURE = 0x00000040
NETSETUP_MACHINE_PWD_PASSED = 0x00000080
NETSETUP_JOIN_WITH_NEW_NAME = 0x00000400
NETSETUP_DEFER_SPN_SET = 0x1000000
def joinDomain(domain: str, ou: str, account: str, password: str, executeInOneStep: bool = False) -> None:
'''
Joins machine to a windows domain
:param domain: Domain to join to
:param ou: Ou that will hold machine
:param account: Account used to join domain
:param password: Password of account used to join domain
:param executeInOneStep: If true, means that this machine has been renamed and wants to add NETSETUP_JOIN_WITH_NEW_NAME to request so we can do rename/join in one step.
'''
# If account do not have domain, include it
if '@' not in account and '\\' not in account:
if '.' in domain:
account = account + '@' + domain
else:
account = domain + '\\' + account
# Do log
flags: typing.Any = NETSETUP_ACCT_CREATE | NETSETUP_DOMAIN_JOIN_IF_JOINED | NETSETUP_JOIN_DOMAIN
if executeInOneStep:
flags |= NETSETUP_JOIN_WITH_NEW_NAME
flags = DWORD(flags)
lpDomain = LPCWSTR(domain)
# Must be in format "ou=.., ..., dc=...,"
lpOu = LPCWSTR(ou) if ou is not None and ou != '' else None
lpAccount = LPCWSTR(account)
lpPassword = LPCWSTR(password)
res = ctypes.windll.netapi32.NetJoinDomain(None, lpDomain, lpOu, lpAccount, lpPassword, flags)
# Machine found in another ou, use it and warn this on log
if res == 2224:
flags = DWORD(NETSETUP_DOMAIN_JOIN_IF_JOINED | NETSETUP_JOIN_DOMAIN)
res = ctypes.windll.netapi32.NetJoinDomain(None, lpDomain, None, lpAccount, lpPassword, flags)
if res:
# Log the error
error = getErrorMessage(res)
if res == 1355:
error = "DC Is not reachable"
logger.error('Error joining domain: {}, {}'.format(error, res))
raise Exception('Error joining domain {}, with credentials {}/*****{}: {}, {}'.format(domain, account, ', under OU {}'.format(ou) if ou is not None else '', res, error))
def changeUserPassword(user: str, oldPassword: str, newPassword: str) -> None:
# lpUser = LPCWSTR(user)
# lpOldPassword = LPCWSTR(oldPassword)
# lpNewPassword = LPCWSTR(newPassword)
# res = ctypes.windll.netapi32.NetUserChangePassword(None, lpUser, lpOldPassword, lpNewPassword)
# Try to set new password "a las bravas", ignoring old one. This will not work with domain users
res = win32net.NetUserSetInfo(None, user, 1003, {'password': newPassword})
if res:
# Log the error, and raise exception to parent
error = getErrorMessage(res)
raise Exception('Error changing password for user {}: {} {}'.format(user, res, error))
class LASTINPUTINFO(ctypes.Structure): # pylint: disable=too-few-public-methods
_fields_ = [
('cbSize', ctypes.c_uint),
('dwTime', ctypes.c_uint),
]
def initIdleDuration(atLeastSeconds: int): # pylint: disable=unused-argument
'''
In windows, there is no need to set screensaver
'''
return
def getIdleDuration() -> float:
try:
lastInputInfo = LASTINPUTINFO()
lastInputInfo.cbSize = ctypes.sizeof(lastInputInfo) # pylint: disable=attribute-defined-outside-init
if ctypes.windll.user32.GetLastInputInfo(ctypes.byref(lastInputInfo)) == 0:
return 0
current = ctypes.c_uint(ctypes.windll.kernel32.GetTickCount()).value
if current < lastInputInfo.dwTime:
current += 4294967296 # If current has "rolled" to zero, adjust it so it is greater than lastInputInfo
millis = current - lastInputInfo.dwTime # @UndefinedVariable
return millis / 1000.0
except Exception as e:
logger.error('Getting idle duration: {}'.format(e))
return 0
def getCurrentUser() -> str:
'''
Returns current logged in username
'''
return os.environ['USERNAME']
def getSessionType() -> str:
'''
Known values:
* Unknown -> No SESSIONNAME environment variable
* Console -> Local session
* RDP-Tcp#[0-9]+ -> RDP Session
'''
return os.environ.get('SESSIONNAME', 'unknown')
def writeToPipe(pipeName: str, bytesPayload: bytes, waitForResponse: bool) -> typing.Optional[bytes]:
# (str, bytes, bool) -> Optional[bytes]
try:
with open(pipeName, 'r+b', 0) as f:
f.write(bytesPayload)
# f.seek(0) # As recommended on intenet, but seems to work fin without thos
if waitForResponse:
return f.read()
return b'ok'
except Exception:
return None
def forceTimeSync() -> None:
try:
subprocess.call([r'c:\WINDOWS\System32\w32tm.exe', ' /resync']) # , '/rediscover'])
except Exception as e:
logger.error('Error invoking time sync command: %s', e)

View File

@@ -0,0 +1,73 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2019 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
# pylint: disable=invalid-name
import sys
import win32service
import win32serviceutil
import servicemanager
import win32timezone # pylint: disable=unused-import
from .service import UDSActorSvc
def setupRecoverService():
svc_name = UDSActorSvc._svc_name_ # pylint: disable=protected-access
try:
hscm = win32service.OpenSCManager(None, None, win32service.SC_MANAGER_ALL_ACCESS)
try:
hs = win32serviceutil.SmartOpenService(hscm, svc_name, win32service.SERVICE_ALL_ACCESS)
service_failure_actions = {
'ResetPeriod': 864000, # Time in ms after which to reset the failure count to zero.
'RebootMsg': u'', # Not using reboot option
'Command': u'', # Not using run-command option
'Actions': [
(win32service.SC_ACTION_RESTART, 5000), # action, delay in ms
(win32service.SC_ACTION_RESTART, 5000)
]
}
win32service.ChangeServiceConfig2(hs, win32service.SERVICE_CONFIG_FAILURE_ACTIONS, service_failure_actions)
finally:
win32service.CloseServiceHandle(hs)
finally:
win32service.CloseServiceHandle(hscm)
def run() -> None:
if len(sys.argv) == 1:
servicemanager.Initialize()
servicemanager.PrepareToHostSingle(UDSActorSvc)
servicemanager.StartServiceCtrlDispatcher()
elif sys.argv[1] == '--setup-recovery':
setupRecoverService()
else:
win32serviceutil.HandleCommandLine(UDSActorSvc)

View File

@@ -0,0 +1,276 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
# pylint: disable=invalid-name
import struct
import typing
import win32serviceutil
import win32service
import win32security
import win32net
import win32event
import pythoncom
import servicemanager
import winreg as wreg
from . import operations
from . import store
from ..service import CommonService
from ..log import logger
REMOTE_USERS_SID = 'S-1-5-32-555' # Well nown sid for remote desktop users
class UDSActorSvc(win32serviceutil.ServiceFramework, CommonService):
'''
This class represents a Windows Service for managing actor interactions
with UDS Broker and Machine
'''
# ServiceeFramework related
_svc_name_ = "UDSActorNG"
_svc_display_name_ = "UDS Actor Service"
_svc_description_ = "UDS Actor Management Service"
_svc_deps_ = ['EventLog']
_user: typing.Optional[str]
_hWaitStop: typing.Any
def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
CommonService.__init__(self)
self._hWaitStop = win32event.CreateEvent(None, 1, 0, None)
self._user = None
def SvcStop(self) -> None:
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
self._isAlive = False
win32event.SetEvent(self._hWaitStop)
SvcShutdown = SvcStop
def notifyStop(self) -> None:
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, servicemanager.PYS_SERVICE_STOPPED, (self._svc_name_, ''))
super().notifyStop()
def doWait(self, miliseconds: int) -> None:
win32event.WaitForSingleObject(self._hWaitStop, miliseconds)
# On windows, and while on tasks, ensure that our app processes waiting messages on "wait times"
pythoncom.PumpWaitingMessages() # pylint: disable=no-member
def oneStepJoin(self, name: str, domain: str, ou: str, account: str, password: str) -> None: # pylint: disable=too-many-arguments
'''
Ejecutes the join domain in exactly one step
'''
currName = operations.getComputerName()
# If name is desired, simply execute multiStepJoin, because computer
# name will not change
if currName.lower() == name.lower():
self.multiStepJoin(name, domain, ou, account, password)
return
operations.renameComputer(name)
logger.debug('Computer renamed to {} without reboot'.format(name))
operations.joinDomain(domain, ou, account, password, executeInOneStep=True)
logger.debug('Requested join domain {} without errors'.format(domain))
self.reboot()
def multiStepJoin(self, name: str, domain: str, ou: str, account: str, password: str) -> None: # pylint: disable=too-many-arguments
currName = operations.getComputerName()
if currName.lower() == name.lower():
currDomain = operations.getDomainName()
if currDomain:
# logger.debug('Name: "{}" vs "{}", Domain: "{}" vs "{}"'.format(currName.lower(), name.lower(), currDomain.lower(), domain.lower()))
logger.debug('Machine {} is part of domain {}'.format(name, domain))
self.setReady()
else:
operations.joinDomain(domain, ou, account, password, executeInOneStep=False)
self.reboot()
else:
operations.renameComputer(name)
logger.info('Rebooting computer for activating new name {}'.format(name))
self.reboot()
def joinDomain( # pylint: disable=unused-argument, too-many-arguments
self,
name: str,
domain: str,
ou: str,
account: str,
password: str
) -> None:
versionData = operations.getWindowsVersion()
versionInt = versionData[0] * 10 + versionData[1]
logger.debug('Starting joining domain {} with name {} (detected operating version: {})'.format(domain, name, versionData))
# Accepts one step joinDomain, also remember XP is no more supported by
# microsoft, but this also must works with it because will do a "multi
# step" join
if versionInt >= 60 and not store.useOldJoinSystem():
self.oneStepJoin(name, domain, ou, account, password)
else:
logger.info('Using multiple step join because configuration requests to do so')
self.multiStepJoin(name, domain, ou, account, password)
def preConnect(self, userName: str, protocol: str, ip: str, hostname: str) -> str:
logger.debug('Pre connect invoked')
if protocol == 'rdp': # If connection is not using rdp, skip adding user
# Well known SSID for Remote Desktop Users
groupName = win32security.LookupAccountSid(None, win32security.GetBinarySid(REMOTE_USERS_SID))[0]
useraAlreadyInGroup = False
resumeHandle = 0
while True:
users, _, resumeHandle = win32net.NetLocalGroupGetMembers(None, groupName, 1, resumeHandle, 32768)
if userName.lower() in [u['name'].lower() for u in users]:
useraAlreadyInGroup = True
break
if resumeHandle == 0:
break
if not useraAlreadyInGroup:
logger.debug('User not in group, adding it')
self._user = userName
try:
userSSID = win32security.LookupAccountName(None, userName)[0]
win32net.NetLocalGroupAddMembers(None, groupName, 0, [{'sid': userSSID}])
except Exception as e:
logger.error('Exception adding user to Remote Desktop Users: {}'.format(e))
else:
self._user = None
logger.debug('User {} already in group'.format(userName))
return super().preConnect(userName, protocol, ip, hostname)
def ovLogon(self, username: str, password: str) -> str:
"""
Logon on oVirt agent
currently not used.
"""
# Compose packet for ov
usernameBytes = username.encode()
passwordBytes = password.encode()
packet = struct.pack('!I', len(usernameBytes)) + usernameBytes + struct.pack('!I', len(passwordBytes)) + passwordBytes
# Send packet with username/password to ov pipe
operations.writeToPipe("\\\\.\\pipe\\VDSMDPipe", packet, True)
return 'done'
def onLogout(self, userName) -> None:
logger.debug('Windows onLogout invoked: {}, {}'.format(userName, self._user))
try:
p = win32security.GetBinarySid(REMOTE_USERS_SID)
groupName = win32security.LookupAccountSid(None, p)[0]
except Exception:
logger.error('Exception getting Windows Group')
return
if self._user:
try:
win32net.NetLocalGroupDelMembers(None, groupName, [self._user])
except Exception as e:
logger.error('Exception removing user from Remote Desktop Users: {}'.format(e))
def isInstallationRunning(self):
'''
Detect if windows is installing anything, so we can delay the execution of Service
'''
try:
key = wreg.OpenKey(wreg.HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\State')
data, _ = wreg.QueryValueEx(key, 'ImageState')
logger.debug('State: %s', data)
return data != 'IMAGE_STATE_COMPLETE' # If ImageState is different of ImageStateComplete, there is something running on installation
except Exception: # If not found, means that no installation is running
return False
def SvcDoRun(self) -> None: # pylint: disable=too-many-statements, too-many-branches
'''
Main service loop
'''
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, servicemanager.PYS_SERVICE_STARTED, (self._svc_name_, ''))
# call the CoInitialize to allow the registration to run in an other
# thread
logger.debug('Initializing coms')
pythoncom.CoInitialize() # pylint: disable=no-member
# Check if some install is running on windows before proceeding
while self._isAlive:
if self.isInstallationRunning():
win32event.WaitForSingleObject(self._hWaitStop, 1000) # Wait a bit, and check again
continue
break
if not self._isAlive: # Has been stopped while waiting windows installations
self.finish()
return
# Unmanaged services does not initializes "on start", but rather when user logs in (because userservice does not exists "as such" before that)
if self.isManaged():
if not self.initialize():
logger.info('Service stopped due to init')
self.finish()
win32event.WaitForSingleObject(self._hWaitStop, 5000)
return # Stop daemon if initializes told to do so
# Initialization is done, set machine to ready for UDS, communicate urls, etc...
self.setReady()
else:
if not self.initializeUnmanaged():
self.finish()
return
# Start listening for petitions
self.startHttpServer()
# *********************
# * Main Service loop *
# *********************
# Counter used to check ip changes only once every 10 seconds
counter = 0
while self._isAlive:
counter += 1
try:
pythoncom.PumpWaitingMessages() # pylint: disable=no-member
if counter % 5 == 0: # Once every 5 seconds
self.loop()
except Exception as e:
logger.error('Got exception on main loop: %s', e)
# Continue after a while...
# In milliseconds, will break if event hWaitStop is set
win32event.WaitForSingleObject(self._hWaitStop, 1000)
logger.debug('Exited main loop')
self.finish()

View File

@@ -0,0 +1,109 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
# pylint: disable=invalid-name
import pickle
import winreg as wreg
import win32security
from .. import types
PATH = 'Software\\UDSActor'
BASEKEY = wreg.HKEY_LOCAL_MACHINE
def fixRegistryPermissions(handle) -> None:
# Fix permissions so users can't read this key
v = win32security.GetSecurityInfo(handle, win32security.SE_REGISTRY_KEY, win32security.DACL_SECURITY_INFORMATION)
dacl = v.GetSecurityDescriptorDacl()
n = 0
# Remove all normal users access permissions to the registry key
while n < dacl.GetAceCount():
if str(dacl.GetAce(n)[2]) == 'PySID:S-1-5-32-545': # Whell known Users SID
dacl.DeleteAce(n)
else:
n += 1
win32security.SetSecurityInfo(
handle,
win32security.SE_REGISTRY_KEY,
win32security.DACL_SECURITY_INFORMATION | win32security.PROTECTED_DACL_SECURITY_INFORMATION,
None,
None,
dacl,
None
)
def readConfig() -> types.ActorConfigurationType:
try:
key = wreg.OpenKey(BASEKEY, PATH, 0, wreg.KEY_QUERY_VALUE)
data, _ = wreg.QueryValueEx(key, '')
wreg.CloseKey(key)
return pickle.loads(data)
except Exception:
return types.ActorConfigurationType('', False)
def writeConfig(config: types.ActorConfigurationType) -> None:
try:
key = wreg.OpenKey(BASEKEY, PATH, 0, wreg.KEY_ALL_ACCESS)
except Exception:
key = wreg.CreateKeyEx(BASEKEY, PATH, 0, wreg.KEY_ALL_ACCESS)
fixRegistryPermissions(key.handle) # type: ignore
wreg.SetValueEx(key, "", 0, wreg.REG_BINARY, pickle.dumps(config)) # type: ignore
wreg.CloseKey(key)
def useOldJoinSystem() -> bool:
try:
key = wreg.OpenKey(BASEKEY, PATH, 0, wreg.KEY_QUERY_VALUE)
try:
data, _ = wreg.QueryValueEx(key, 'join')
except Exception:
data = ''
wreg.CloseKey(key)
except Exception:
data = ''
return data == 'old'
def invokeScriptOnLogin() -> str:
try:
key = wreg.OpenKey(BASEKEY, PATH, 0, wreg.KEY_QUERY_VALUE)
try:
data, _ = wreg.QueryValueEx(key, 'logonScript')
except Exception:
data = ''
wreg.CloseKey(key)
except Exception:
data = ''
return data

View File

@@ -0,0 +1,248 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'setup-dialog.ui'
#
# Created by: PyQt5 UI code generator 5.13.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_UdsActorSetupDialog(object):
def setupUi(self, UdsActorSetupDialog):
UdsActorSetupDialog.setObjectName("UdsActorSetupDialog")
UdsActorSetupDialog.setWindowModality(QtCore.Qt.WindowModal)
UdsActorSetupDialog.resize(590, 307)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(UdsActorSetupDialog.sizePolicy().hasHeightForWidth())
UdsActorSetupDialog.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Verdana")
font.setPointSize(9)
UdsActorSetupDialog.setFont(font)
UdsActorSetupDialog.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/img/img/uds-icon.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
UdsActorSetupDialog.setWindowIcon(icon)
UdsActorSetupDialog.setAutoFillBackground(False)
UdsActorSetupDialog.setLocale(QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates))
UdsActorSetupDialog.setSizeGripEnabled(False)
UdsActorSetupDialog.setModal(True)
self.registerButton = QtWidgets.QPushButton(UdsActorSetupDialog)
self.registerButton.setEnabled(False)
self.registerButton.setGeometry(QtCore.QRect(10, 270, 181, 23))
self.registerButton.setMinimumSize(QtCore.QSize(181, 0))
self.registerButton.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
self.registerButton.setObjectName("registerButton")
self.closeButton = QtWidgets.QPushButton(UdsActorSetupDialog)
self.closeButton.setGeometry(QtCore.QRect(410, 270, 171, 23))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.closeButton.sizePolicy().hasHeightForWidth())
self.closeButton.setSizePolicy(sizePolicy)
self.closeButton.setMinimumSize(QtCore.QSize(171, 0))
self.closeButton.setObjectName("closeButton")
self.tabWidget = QtWidgets.QTabWidget(UdsActorSetupDialog)
self.tabWidget.setGeometry(QtCore.QRect(10, 10, 571, 241))
self.tabWidget.setObjectName("tabWidget")
self.tab_uds = QtWidgets.QWidget()
self.tab_uds.setObjectName("tab_uds")
self.layoutWidget = QtWidgets.QWidget(self.tab_uds)
self.layoutWidget.setGeometry(QtCore.QRect(10, 10, 551, 191))
self.layoutWidget.setObjectName("layoutWidget")
self.formLayout = QtWidgets.QFormLayout(self.layoutWidget)
self.formLayout.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint)
self.formLayout.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow)
self.formLayout.setContentsMargins(0, 0, 0, 0)
self.formLayout.setVerticalSpacing(16)
self.formLayout.setObjectName("formLayout")
self.label_host = QtWidgets.QLabel(self.layoutWidget)
self.label_host.setObjectName("label_host")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_host)
self.host = QtWidgets.QLineEdit(self.layoutWidget)
self.host.setAcceptDrops(False)
self.host.setObjectName("host")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.host)
self.label_auth = QtWidgets.QLabel(self.layoutWidget)
self.label_auth.setObjectName("label_auth")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_auth)
self.authenticators = QtWidgets.QComboBox(self.layoutWidget)
self.authenticators.setObjectName("authenticators")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.authenticators)
self.label_username = QtWidgets.QLabel(self.layoutWidget)
self.label_username.setObjectName("label_username")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_username)
self.username = QtWidgets.QLineEdit(self.layoutWidget)
self.username.setObjectName("username")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.username)
self.label_password = QtWidgets.QLabel(self.layoutWidget)
self.label_password.setObjectName("label_password")
self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_password)
self.password = QtWidgets.QLineEdit(self.layoutWidget)
self.password.setEchoMode(QtWidgets.QLineEdit.Password)
self.password.setObjectName("password")
self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.password)
self.validateCertificate = QtWidgets.QComboBox(self.layoutWidget)
self.validateCertificate.setObjectName("validateCertificate")
self.validateCertificate.addItem("")
self.validateCertificate.addItem("")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.validateCertificate)
self.label_security = QtWidgets.QLabel(self.layoutWidget)
self.label_security.setObjectName("label_security")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_security)
self.label_host.raise_()
self.host.raise_()
self.label_auth.raise_()
self.label_username.raise_()
self.username.raise_()
self.label_password.raise_()
self.password.raise_()
self.validateCertificate.raise_()
self.label_security.raise_()
self.authenticators.raise_()
self.tabWidget.addTab(self.tab_uds, "")
self.tab_advanced = QtWidgets.QWidget()
self.tab_advanced.setObjectName("tab_advanced")
self.layoutWidget_2 = QtWidgets.QWidget(self.tab_advanced)
self.layoutWidget_2.setGeometry(QtCore.QRect(10, 10, 551, 161))
self.layoutWidget_2.setObjectName("layoutWidget_2")
self.formLayout_2 = QtWidgets.QFormLayout(self.layoutWidget_2)
self.formLayout_2.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow)
self.formLayout_2.setContentsMargins(0, 0, 0, 0)
self.formLayout_2.setVerticalSpacing(16)
self.formLayout_2.setObjectName("formLayout_2")
self.label_host_2 = QtWidgets.QLabel(self.layoutWidget_2)
self.label_host_2.setObjectName("label_host_2")
self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_host_2)
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setContentsMargins(-1, 0, -1, -1)
self.horizontalLayout.setSpacing(4)
self.horizontalLayout.setObjectName("horizontalLayout")
self.preCommand = QtWidgets.QLineEdit(self.layoutWidget_2)
self.preCommand.setAcceptDrops(False)
self.preCommand.setWhatsThis("")
self.preCommand.setObjectName("preCommand")
self.horizontalLayout.addWidget(self.preCommand)
self.browsePreconnectButton = QtWidgets.QPushButton(self.layoutWidget_2)
self.browsePreconnectButton.setAutoDefault(False)
self.browsePreconnectButton.setFlat(False)
self.browsePreconnectButton.setObjectName("browsePreconnectButton")
self.horizontalLayout.addWidget(self.browsePreconnectButton)
self.formLayout_2.setLayout(0, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout)
self.label_username_2 = QtWidgets.QLabel(self.layoutWidget_2)
self.label_username_2.setObjectName("label_username_2")
self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_username_2)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setContentsMargins(-1, 0, -1, -1)
self.horizontalLayout_2.setSpacing(4)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.runonceCommand = QtWidgets.QLineEdit(self.layoutWidget_2)
self.runonceCommand.setWhatsThis("")
self.runonceCommand.setObjectName("runonceCommand")
self.horizontalLayout_2.addWidget(self.runonceCommand)
self.browseRunOnceButton = QtWidgets.QPushButton(self.layoutWidget_2)
self.browseRunOnceButton.setAutoDefault(False)
self.browseRunOnceButton.setObjectName("browseRunOnceButton")
self.horizontalLayout_2.addWidget(self.browseRunOnceButton)
self.formLayout_2.setLayout(1, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout_2)
self.label_password_2 = QtWidgets.QLabel(self.layoutWidget_2)
self.label_password_2.setObjectName("label_password_2")
self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_password_2)
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
self.horizontalLayout_3.setContentsMargins(-1, 0, -1, -1)
self.horizontalLayout_3.setSpacing(4)
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.postConfigCommand = QtWidgets.QLineEdit(self.layoutWidget_2)
self.postConfigCommand.setWhatsThis("")
self.postConfigCommand.setEchoMode(QtWidgets.QLineEdit.Normal)
self.postConfigCommand.setObjectName("postConfigCommand")
self.horizontalLayout_3.addWidget(self.postConfigCommand)
self.browsePostConfigButton = QtWidgets.QPushButton(self.layoutWidget_2)
self.browsePostConfigButton.setAutoDefault(False)
self.browsePostConfigButton.setObjectName("browsePostConfigButton")
self.horizontalLayout_3.addWidget(self.browsePostConfigButton)
self.formLayout_2.setLayout(2, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout_3)
self.label_loglevel = QtWidgets.QLabel(self.layoutWidget_2)
self.label_loglevel.setObjectName("label_loglevel")
self.formLayout_2.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_loglevel)
self.logLevelComboBox = QtWidgets.QComboBox(self.layoutWidget_2)
self.logLevelComboBox.setFrame(True)
self.logLevelComboBox.setObjectName("logLevelComboBox")
self.logLevelComboBox.addItem("")
self.logLevelComboBox.setItemText(0, "DEBUG")
self.logLevelComboBox.addItem("")
self.logLevelComboBox.setItemText(1, "INFO")
self.logLevelComboBox.addItem("")
self.logLevelComboBox.setItemText(2, "ERROR")
self.logLevelComboBox.addItem("")
self.logLevelComboBox.setItemText(3, "FATAL")
self.formLayout_2.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.logLevelComboBox)
self.tabWidget.addTab(self.tab_advanced, "")
self.testButton = QtWidgets.QPushButton(UdsActorSetupDialog)
self.testButton.setEnabled(False)
self.testButton.setGeometry(QtCore.QRect(210, 270, 181, 23))
self.testButton.setMinimumSize(QtCore.QSize(181, 0))
self.testButton.setObjectName("testButton")
self.retranslateUi(UdsActorSetupDialog)
self.tabWidget.setCurrentIndex(0)
self.logLevelComboBox.setCurrentIndex(1)
self.closeButton.clicked.connect(UdsActorSetupDialog.finish)
self.registerButton.clicked.connect(UdsActorSetupDialog.registerWithUDS)
self.host.textChanged['QString'].connect(UdsActorSetupDialog.textChanged)
self.username.textChanged['QString'].connect(UdsActorSetupDialog.textChanged)
self.password.textChanged['QString'].connect(UdsActorSetupDialog.textChanged)
self.browsePreconnectButton.clicked.connect(UdsActorSetupDialog.browsePreconnect)
self.browsePostConfigButton.clicked.connect(UdsActorSetupDialog.browsePostConfig)
self.browseRunOnceButton.clicked.connect(UdsActorSetupDialog.browseRunOnce)
self.host.editingFinished.connect(UdsActorSetupDialog.updateAuthenticators)
self.authenticators.currentTextChanged['QString'].connect(UdsActorSetupDialog.textChanged)
self.testButton.clicked.connect(UdsActorSetupDialog.testUDSServer)
QtCore.QMetaObject.connectSlotsByName(UdsActorSetupDialog)
def retranslateUi(self, UdsActorSetupDialog):
_translate = QtCore.QCoreApplication.translate
UdsActorSetupDialog.setWindowTitle(_translate("UdsActorSetupDialog", "UDS Actor Configuration Tool"))
self.registerButton.setToolTip(_translate("UdsActorSetupDialog", "Click to register Actor with UDS Broker"))
self.registerButton.setWhatsThis(_translate("UdsActorSetupDialog", "<html><head/><body><p>Click on this button to register Actor with UDS Broker.</p></body></html>"))
self.registerButton.setText(_translate("UdsActorSetupDialog", "Register with UDS"))
self.closeButton.setToolTip(_translate("UdsActorSetupDialog", "Closes UDS Actor Configuration (discard pending changes if any)"))
self.closeButton.setWhatsThis(_translate("UdsActorSetupDialog", "<html><head/><body><p>Exits the UDS Actor Configuration Tool</p></body></html>"))
self.closeButton.setText(_translate("UdsActorSetupDialog", "Close"))
self.label_host.setText(_translate("UdsActorSetupDialog", "UDS Server"))
self.host.setToolTip(_translate("UdsActorSetupDialog", "Uds Broker Server Addres. Use IP or FQDN"))
self.host.setWhatsThis(_translate("UdsActorSetupDialog", "Enter here the UDS Broker Addres using either its IP address or its FQDN address"))
self.label_auth.setText(_translate("UdsActorSetupDialog", "Authenticator"))
self.authenticators.setWhatsThis(_translate("UdsActorSetupDialog", "<html><head/><body><p>Select the UDS Broker authenticator for credentials validation</p></body></html>"))
self.label_username.setText(_translate("UdsActorSetupDialog", "Username"))
self.username.setToolTip(_translate("UdsActorSetupDialog", "UDS user with administration rights (Will not be stored on template)"))
self.username.setWhatsThis(_translate("UdsActorSetupDialog", "<html><head/><body><p>Administrator user on UDS Server.</p><p>Note: This credential will not be stored on client. Will be used to obtain an unique token for this image.</p></body></html>"))
self.label_password.setText(_translate("UdsActorSetupDialog", "Password"))
self.password.setToolTip(_translate("UdsActorSetupDialog", "Password for user (Will not be stored on template)"))
self.password.setWhatsThis(_translate("UdsActorSetupDialog", "<html><head/><body><p>Administrator password for the user on UDS Server.</p><p>Note: This credential will not be stored on client. Will be used to obtain an unique key for this image.</p></body></html>"))
self.validateCertificate.setToolTip(_translate("UdsActorSetupDialog", "Select communication security with broker"))
self.validateCertificate.setWhatsThis(_translate("UdsActorSetupDialog", "<html><head/><body><p>Select the security for communications with UDS Broker.</p><p>The recommended method of communication is <span style=\" font-weight:600;\">Use SSL</span>, but selection needs to be acording to your broker configuration.</p></body></html>"))
self.validateCertificate.setItemText(0, _translate("UdsActorSetupDialog", "Ignore certificate"))
self.validateCertificate.setItemText(1, _translate("UdsActorSetupDialog", "Verify certificate"))
self.label_security.setText(_translate("UdsActorSetupDialog", "SSL Validation"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_uds), _translate("UdsActorSetupDialog", "UDS Server"))
self.label_host_2.setText(_translate("UdsActorSetupDialog", "Preconnect"))
self.preCommand.setToolTip(_translate("UdsActorSetupDialog", "Pre connection command. Executed just before the user is connected to machine."))
self.browsePreconnectButton.setText(_translate("UdsActorSetupDialog", "Browse"))
self.label_username_2.setText(_translate("UdsActorSetupDialog", "Runonce"))
self.runonceCommand.setToolTip(_translate("UdsActorSetupDialog", "Run once command. Executed on first boot, just before UDS does anything."))
self.browseRunOnceButton.setText(_translate("UdsActorSetupDialog", "Browse"))
self.label_password_2.setText(_translate("UdsActorSetupDialog", "Postconfig"))
self.postConfigCommand.setToolTip(_translate("UdsActorSetupDialog", "Command to execute after UDS finalizes the VM configuration."))
self.browsePostConfigButton.setText(_translate("UdsActorSetupDialog", "Browse"))
self.label_loglevel.setText(_translate("UdsActorSetupDialog", "Log Level"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_advanced), _translate("UdsActorSetupDialog", "Advanced"))
self.testButton.setToolTip(_translate("UdsActorSetupDialog", "Click to test existing configuration (disabled if no config found)"))
self.testButton.setWhatsThis(_translate("UdsActorSetupDialog", "<html><head/><body><p>Click on this button to test the server host and assigned toen.</p></body></html>"))
self.testButton.setText(_translate("UdsActorSetupDialog", "Test configuration"))
from ui import uds_rc

View File

@@ -0,0 +1,142 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'setup-dialog-unmanaged.ui'
#
# Created by: PyQt5 UI code generator 5.13.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_UdsActorSetupDialog(object):
def setupUi(self, UdsActorSetupDialog):
UdsActorSetupDialog.setObjectName("UdsActorSetupDialog")
UdsActorSetupDialog.setWindowModality(QtCore.Qt.WindowModal)
UdsActorSetupDialog.resize(595, 220)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(UdsActorSetupDialog.sizePolicy().hasHeightForWidth())
UdsActorSetupDialog.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Verdana")
font.setPointSize(9)
UdsActorSetupDialog.setFont(font)
UdsActorSetupDialog.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/img/img/uds-icon.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
UdsActorSetupDialog.setWindowIcon(icon)
UdsActorSetupDialog.setAutoFillBackground(False)
UdsActorSetupDialog.setLocale(QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates))
UdsActorSetupDialog.setSizeGripEnabled(False)
UdsActorSetupDialog.setModal(True)
self.saveButton = QtWidgets.QPushButton(UdsActorSetupDialog)
self.saveButton.setEnabled(True)
self.saveButton.setGeometry(QtCore.QRect(10, 180, 181, 23))
self.saveButton.setMinimumSize(QtCore.QSize(181, 0))
self.saveButton.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
self.saveButton.setObjectName("saveButton")
self.closeButton = QtWidgets.QPushButton(UdsActorSetupDialog)
self.closeButton.setGeometry(QtCore.QRect(410, 180, 171, 23))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.closeButton.sizePolicy().hasHeightForWidth())
self.closeButton.setSizePolicy(sizePolicy)
self.closeButton.setMinimumSize(QtCore.QSize(171, 0))
self.closeButton.setObjectName("closeButton")
self.testButton = QtWidgets.QPushButton(UdsActorSetupDialog)
self.testButton.setEnabled(False)
self.testButton.setGeometry(QtCore.QRect(210, 180, 181, 23))
self.testButton.setMinimumSize(QtCore.QSize(181, 0))
self.testButton.setObjectName("testButton")
self.layoutWidget = QtWidgets.QWidget(UdsActorSetupDialog)
self.layoutWidget.setGeometry(QtCore.QRect(10, 10, 571, 161))
self.layoutWidget.setObjectName("layoutWidget")
self.formLayout = QtWidgets.QFormLayout(self.layoutWidget)
self.formLayout.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint)
self.formLayout.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow)
self.formLayout.setContentsMargins(0, 0, 0, 0)
self.formLayout.setVerticalSpacing(16)
self.formLayout.setObjectName("formLayout")
self.label_security = QtWidgets.QLabel(self.layoutWidget)
self.label_security.setObjectName("label_security")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_security)
self.validateCertificate = QtWidgets.QComboBox(self.layoutWidget)
self.validateCertificate.setObjectName("validateCertificate")
self.validateCertificate.addItem("")
self.validateCertificate.addItem("")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.validateCertificate)
self.label_host = QtWidgets.QLabel(self.layoutWidget)
self.label_host.setObjectName("label_host")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_host)
self.host = QtWidgets.QLineEdit(self.layoutWidget)
self.host.setAcceptDrops(False)
self.host.setObjectName("host")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.host)
self.label_serviceToken = QtWidgets.QLabel(self.layoutWidget)
self.label_serviceToken.setObjectName("label_serviceToken")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_serviceToken)
self.serviceToken = QtWidgets.QLineEdit(self.layoutWidget)
self.serviceToken.setObjectName("serviceToken")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.serviceToken)
self.label_loglevel = QtWidgets.QLabel(self.layoutWidget)
self.label_loglevel.setObjectName("label_loglevel")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_loglevel)
self.logLevelComboBox = QtWidgets.QComboBox(self.layoutWidget)
self.logLevelComboBox.setFrame(True)
self.logLevelComboBox.setObjectName("logLevelComboBox")
self.logLevelComboBox.addItem("")
self.logLevelComboBox.setItemText(0, "DEBUG")
self.logLevelComboBox.addItem("")
self.logLevelComboBox.setItemText(1, "INFO")
self.logLevelComboBox.addItem("")
self.logLevelComboBox.setItemText(2, "ERROR")
self.logLevelComboBox.addItem("")
self.logLevelComboBox.setItemText(3, "FATAL")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.logLevelComboBox)
self.label_host.raise_()
self.host.raise_()
self.label_serviceToken.raise_()
self.serviceToken.raise_()
self.validateCertificate.raise_()
self.label_security.raise_()
self.label_loglevel.raise_()
self.logLevelComboBox.raise_()
self.retranslateUi(UdsActorSetupDialog)
self.logLevelComboBox.setCurrentIndex(1)
self.closeButton.clicked.connect(UdsActorSetupDialog.finish)
self.testButton.clicked.connect(UdsActorSetupDialog.testUDSServer)
self.saveButton.clicked.connect(UdsActorSetupDialog.saveConfig)
self.host.textChanged['QString'].connect(UdsActorSetupDialog.configChanged)
self.serviceToken.textChanged['QString'].connect(UdsActorSetupDialog.configChanged)
QtCore.QMetaObject.connectSlotsByName(UdsActorSetupDialog)
def retranslateUi(self, UdsActorSetupDialog):
_translate = QtCore.QCoreApplication.translate
UdsActorSetupDialog.setWindowTitle(_translate("UdsActorSetupDialog", "UDS Actor Configuration Tool"))
self.saveButton.setToolTip(_translate("UdsActorSetupDialog", "Click to register Actor with UDS Broker"))
self.saveButton.setWhatsThis(_translate("UdsActorSetupDialog", "<html><head/><body><p>Click on this button to register Actor with UDS Broker.</p></body></html>"))
self.saveButton.setText(_translate("UdsActorSetupDialog", "Save Configuration"))
self.closeButton.setToolTip(_translate("UdsActorSetupDialog", "Closes UDS Actor Configuration (discard pending changes if any)"))
self.closeButton.setWhatsThis(_translate("UdsActorSetupDialog", "<html><head/><body><p>Exits the UDS Actor Configuration Tool</p></body></html>"))
self.closeButton.setText(_translate("UdsActorSetupDialog", "Close"))
self.testButton.setToolTip(_translate("UdsActorSetupDialog", "Click to test existing configuration (disabled if no config found)"))
self.testButton.setWhatsThis(_translate("UdsActorSetupDialog", "<html><head/><body><p>Click on this button to test the server host and assigned toen.</p></body></html>"))
self.testButton.setText(_translate("UdsActorSetupDialog", "Test configuration"))
self.label_security.setText(_translate("UdsActorSetupDialog", "SSL Validation"))
self.validateCertificate.setToolTip(_translate("UdsActorSetupDialog", "Select communication security with broker"))
self.validateCertificate.setWhatsThis(_translate("UdsActorSetupDialog", "<html><head/><body><p>Select the security for communications with UDS Broker.</p><p>The recommended method of communication is <span style=\" font-weight:600;\">Use SSL</span>, but selection needs to be acording to your broker configuration.</p></body></html>"))
self.validateCertificate.setItemText(0, _translate("UdsActorSetupDialog", "Ignore certificate"))
self.validateCertificate.setItemText(1, _translate("UdsActorSetupDialog", "Verify certificate"))
self.label_host.setText(_translate("UdsActorSetupDialog", "UDS Server"))
self.host.setToolTip(_translate("UdsActorSetupDialog", "Uds Broker Server Addres. Use IP or FQDN"))
self.host.setWhatsThis(_translate("UdsActorSetupDialog", "Enter here the UDS Broker Addres using either its IP address or its FQDN address"))
self.label_serviceToken.setText(_translate("UdsActorSetupDialog", "Service Token"))
self.serviceToken.setToolTip(_translate("UdsActorSetupDialog", "UDS user with administration rights (Will not be stored on template)"))
self.serviceToken.setWhatsThis(_translate("UdsActorSetupDialog", "<html><head/><body><p>Administrator user on UDS Server.</p><p>Note: This credential will not be stored on client. Will be used to obtain an unique token for this image.</p></body></html>"))
self.label_loglevel.setText(_translate("UdsActorSetupDialog", "Log Level"))
from ui import uds_rc

195
actor/src/ui/uds_rc.py Normal file
View File

@@ -0,0 +1,195 @@
# -*- coding: utf-8 -*-
# Resource object code
#
# Created by: The Resource Compiler for PyQt5 (Qt v5.13.2)
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore
qt_resource_data = b"\
\x00\x00\x08\x7c\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\
\x01\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\xe2\x0a\
\x04\x07\x27\x0a\x6d\xd5\xd2\x21\x00\x00\x08\x1b\x49\x44\x41\x54\
\x68\xde\xed\x9a\x6d\x8c\x54\xd5\x19\xc7\x7f\xe7\xbe\xee\x2e\xfb\
\xbe\x3a\x60\x2d\x52\xd6\x62\xac\x52\x23\x68\xc7\x97\xb4\x46\x8c\
\xca\x04\x6c\x2d\xad\x56\x4d\x5d\x5a\x9b\x5a\x8d\xfd\x60\xd2\x12\
\x9b\x94\x56\xb4\x76\xc4\xa6\x68\xda\x68\xb5\x04\x62\x90\xd1\xb8\
\xc1\x12\xab\x06\x98\x6a\x33\x60\x41\x83\x53\x17\x50\x16\x10\xa5\
\xb2\x14\xd4\x65\x16\x96\x65\x67\x77\xe6\xce\x7d\x3b\xfd\xb0\xb3\
\xeb\xec\xee\xec\xb0\xb3\x77\xfa\xa1\x49\xff\xc9\x64\x66\xce\xb9\
\xf7\x9e\xe7\xbf\xcf\xcb\x79\xce\x7f\x16\xfe\xc7\x21\x2a\xfd\xc0\
\x78\x32\xa4\x01\x9a\xa2\xa0\x9d\xdf\xaa\x29\x5f\x68\xd2\x94\x23\
\xdd\x8e\x78\x27\xe9\xf0\xc1\x87\x0e\xdd\x3d\x3e\x5d\x47\x1c\x5f\
\x0c\xad\xec\x00\xd9\x44\xbb\x25\xff\xeb\x04\xe2\xc9\x90\x02\xa8\
\x80\x96\x7f\x3f\x07\x58\x04\x2c\x00\xae\x04\xa6\x0f\x5f\xeb\x79\
\xe0\x38\x92\x5d\x7b\x6c\xf6\x76\x3a\x9c\xea\xf3\xc9\x1b\x3c\xf2\
\x5e\x04\x27\x80\x38\x10\x03\x76\x00\x1e\x60\x9f\x89\x9c\x98\x84\
\xe1\x17\x00\xeb\x81\x56\xa0\x2e\x4f\x40\x2b\x76\xad\x94\xb0\x7a\
\x6d\x9a\xf4\x80\x44\x4a\x80\xe1\xb5\x25\x82\xcf\xed\x90\x88\x31\
\x4b\x17\x35\xc3\x06\xfa\x81\x87\x13\xed\xd6\x53\x65\x11\x88\x27\
\x43\x73\x81\x35\xc0\x45\x40\xfd\x64\x3c\x34\x38\x28\xf9\xd3\xea\
\x34\x00\x86\xb4\x38\x6a\xdc\x43\xbf\x3a\x1f\x57\x34\xe2\x63\x22\
\x45\x01\x67\xcf\xc6\x6c\xa8\x47\xaf\x56\x51\xdc\x5e\x0c\xb7\x9b\
\xba\x81\xd7\x69\xe8\x7f\x05\x09\x78\xaa\x39\xd6\xb4\xd3\xc0\xef\
\x12\xed\xd6\xca\x33\x12\x88\x27\x43\x6b\x80\x1f\x97\x1b\x8b\x07\
\x3e\x70\x78\x6d\xd3\x20\xbd\xfa\xcd\x74\x99\x0f\x20\x51\x11\xb8\
\x05\x5e\x18\x0e\x21\x81\x7e\xf6\x2c\x14\x73\x1a\x79\x37\x21\x51\
\x90\x8a\x81\x14\x1a\xd5\xd6\x01\x6a\x32\x6f\x51\x3b\x98\xa0\xb9\
\xef\x45\xdc\xd1\x64\xfe\x96\x68\xb7\x22\x13\x12\x88\x27\x43\xcf\
\x02\x77\x4d\x25\x99\x8e\xa7\x3c\x9e\x59\x57\xc5\xfe\x86\x2d\x28\
\x64\x8b\xbb\x5b\xd3\x30\x67\xcc\x99\x54\x6a\x4a\x61\x20\xa4\xc7\
\x79\x9f\xdc\x49\x5d\xfa\x15\xa4\xd0\x87\x27\xb7\x27\xda\xad\x6b\
\x86\xbf\xa8\xc3\x1f\x36\x6e\x3b\xcb\x30\x74\xf1\x62\xe1\x58\x39\
\x68\x6e\x52\x39\xd1\xdf\xc4\xbe\x53\xdf\x42\x88\xf1\x79\x27\x84\
\x82\x79\xee\x85\xe3\x3c\x32\x31\x05\x0f\xf0\xe9\x6b\xb8\x15\x44\
\x15\xb5\x99\x04\xa0\x00\xcc\x9a\x3d\x57\x7b\xfe\x70\xa7\x7b\x8a\
\xe1\x11\x80\xf5\x2f\x9f\x52\xb3\x96\xaf\x4c\xb5\x9c\xd9\xb6\xe4\
\x96\x85\x29\x66\x36\x1d\x2d\x3a\x6f\x9c\x7b\x01\x48\xbf\xfc\x32\
\x29\x1d\x52\x67\xfd\x9c\xbe\x86\xa5\x85\xc3\xef\x0f\x7f\x18\x31\
\xb8\xbe\x56\x91\x1b\xe3\xa7\xa5\xe7\x4d\xb9\x24\xe3\x49\x85\x55\
\xb7\xdd\x4b\x8d\x6e\x15\xd6\x26\xb4\xda\x66\x44\x80\x2d\x47\xc8\
\x1c\x3d\x2d\xcb\x50\xbd\x91\xe7\xd6\x5c\x77\x7b\x55\xf3\x28\x02\
\x40\x4e\x08\x78\x7d\xc7\x00\x9a\x16\x64\x7f\x93\xac\xfe\xc1\x9d\
\x05\x61\x24\xd0\x1a\xa7\x07\xde\x6f\x2d\xf3\x2b\xf8\x8a\x39\x2a\
\x6a\x47\x11\x88\x45\x1d\x09\x2c\x3c\x79\xca\x65\x57\x67\x06\x3d\
\x00\x09\x5d\xcd\xb1\x72\xc9\x32\x6c\xd7\x44\x28\x0a\x28\x0a\xc1\
\xe1\x63\x9b\x5f\x2e\x1c\x30\xc7\x7a\x80\x58\xd4\xd9\x2a\x04\xbb\
\x3a\x3a\xb3\x7c\x7c\xd4\x0e\xb4\xdc\xec\xd0\x41\xee\xbf\x7e\x15\
\x96\x63\x80\x2f\xa9\x04\x14\x3f\x33\x7e\x6c\xec\x40\x2c\xea\x5c\
\x66\xe8\x22\xb7\x75\x67\x1a\xcf\x0b\x10\x48\x52\x70\xc3\xc5\xaf\
\x71\xfb\xfc\x17\xf0\x5c\xb7\x12\xe6\x53\x65\x1d\x2e\x1c\xc8\x16\
\x25\x90\xc7\x52\x55\x11\xbc\xfc\x7a\x1f\x6a\x00\xef\xdb\xae\x49\
\xdb\xd7\x57\x73\x51\x55\x3c\xb0\xf9\x86\x7b\x6c\x6c\x01\xee\x9f\
\x90\x40\x2c\xea\x6c\x00\x7e\x9f\xb3\x25\x7f\xd9\xd2\x17\x68\x61\
\xdb\x35\xf9\xe5\xc2\xfb\x69\xa9\x3e\x1e\xa8\x30\xe8\xf6\x11\x0a\
\x8a\xbc\x5f\x92\x40\x9e\xc4\x03\xc0\xa7\x19\x4b\xf2\xee\xde\x6c\
\xa0\x3c\x94\xc0\x13\xd7\x5d\x4d\xad\xde\x3f\x75\x0f\xd8\x87\x0a\
\xab\x50\x6f\xa2\xdd\xb2\x4b\x12\xc8\xe3\x72\x80\x03\x87\x2c\x3e\
\x3d\xee\xa0\x88\x20\x24\x04\x4f\x2f\xbc\x94\x46\xf3\x64\xbe\x1b\
\x2d\xe7\x5e\x0d\xd3\x3e\x54\xd8\xf9\xfc\x71\xc2\x24\x1e\xe3\x85\
\xcf\x80\x9b\x14\x05\x36\x6f\x4b\xd3\x3f\xe0\x05\x2b\x84\x52\xe5\
\xa9\x1b\x2f\xa3\xb5\x7e\x3f\xae\xaf\x3b\x93\xdf\x06\x34\x4c\xfb\
\xa3\xc2\x91\xc9\x11\xc8\x93\xd8\x54\x6d\xea\x47\x4c\x43\xb0\xf9\
\xcd\x34\xaa\x4a\xa0\x58\x76\x7d\x8d\xe8\xb5\xd7\xf3\xdc\xa2\xd6\
\x27\xbb\x0f\xd6\x4d\xcb\x9f\x33\x6e\x03\x36\x03\x5d\x45\xef\x12\
\x2a\xc6\xe7\x04\x9c\xfc\xab\xf4\x81\x66\xdf\x91\xc5\x0a\x30\x0f\
\x78\xd1\x30\xb4\x39\xab\xd6\xfe\x9d\x8c\x65\x13\x6a\xd1\x58\x78\
\x4d\x1d\xbe\x4f\x25\xf0\x78\x24\x9c\x5a\x36\x76\x70\xc6\x8a\xfe\
\x5b\x80\x47\x81\x39\x00\xbe\x52\xcb\xdc\x03\xf5\x80\x0b\x30\x00\
\x34\x24\xda\x2d\x7f\x42\x02\xfb\x8e\x2c\x5e\x01\xfc\xaa\xf0\xe4\
\x65\xdb\x69\x1e\x5b\xf3\x36\xba\x26\x68\x9d\x69\x70\xf5\x65\xd3\
\x2a\x75\x8c\xfe\x75\x24\x9c\xfa\x6d\xb1\x89\x19\x2b\xfa\xeb\x80\
\xcf\x84\x94\xd3\xbe\xba\xbf\x01\x57\xab\x02\xd8\x9d\x68\xb7\xe6\
\x4f\x18\x42\x3f\x7c\xd0\x4c\xbe\xd5\xf1\xf1\x43\x9a\xaa\x68\x02\
\x1f\x01\x6c\xda\x7b\x1f\x8f\xbe\x91\x40\x34\xaf\x44\x08\x87\x8f\
\x8f\xda\x9c\xec\xf3\x2a\x45\xe0\x91\x78\x32\x74\x47\xb1\x89\xee\
\x87\xeb\xd3\x9a\x7b\xac\xb9\x36\xb3\xd5\x2d\x28\xa1\xb1\x92\x27\
\xb2\xb6\xe5\xfa\x33\x9e\xe7\xdf\x5b\x53\x05\xad\x97\x6e\xa0\xe3\
\xd8\x77\xf0\x25\x28\x02\xa4\x80\xaa\x93\xb7\xa2\xe6\x5e\x45\x4a\
\xc9\x1d\xdf\x6c\x44\x55\x2b\x26\x6c\xcc\x8f\x84\x53\xbb\x8b\x4d\
\x5c\x75\xd7\x37\xb6\x54\x67\xdf\x89\x80\x42\xa2\xdd\x12\x25\x5b\
\x09\x60\xad\xaa\x2a\xe4\x6c\x8f\xdd\x5d\xf3\x86\x2e\x1a\x56\x14\
\x24\xe4\x9a\xd6\x01\x43\x2a\xc3\xc6\xf8\xe9\x4a\x2a\x32\xbb\xe2\
\xc9\xd0\xf4\x78\x32\x34\xee\x2f\x52\x9d\x4d\xda\x79\x53\x8f\x4d\
\xa6\x17\xea\x18\x99\x74\xde\x2a\x52\xd2\xa6\x91\x0d\x75\x81\x74\
\x70\x5c\xc9\x3b\x7b\x32\x01\x2b\xd3\x28\xec\x8d\x84\x53\xb2\x68\
\x1d\x85\x34\xb0\x7d\x52\xaa\x44\xdb\x72\xfd\x3d\xf0\x2f\xf1\xaa\
\x96\x90\x6b\x7a\xa9\xa8\x96\xa1\xa7\x9f\x40\x4f\xff\x02\x5f\x0a\
\xae\x9a\x57\xc3\x9c\x59\x26\x95\xe9\x39\xd9\x10\x09\xa7\x6e\x9b\
\x7c\x8b\x57\x1c\x3b\x41\x41\x78\x5d\x13\xf6\x06\x4e\xed\xcf\x90\
\xea\x6c\x14\x21\xf9\x47\x72\x90\x8c\xe5\x57\xca\x0b\xdf\x8b\x27\
\x43\x37\x04\x25\xf0\x18\x80\xe2\x1e\x2a\x29\x7d\x65\xa7\x7f\x08\
\xa2\x1e\xd3\x10\x6c\xde\xd6\x1f\xe8\x10\x34\x06\x7f\x0e\x44\x20\
\x16\x75\x0e\x03\x5b\xf1\xfb\xd0\x06\xd7\x95\xec\xd2\xac\x96\x37\
\x11\xd2\x21\x6b\x49\x36\x6f\xeb\xaf\xcc\xe1\x0b\x5a\xe3\xc9\xd0\
\x45\x41\x3c\x00\xf0\x07\x84\x8e\x71\xfa\xbe\xbc\x4c\x39\x41\x7f\
\xa3\xcf\xc5\xae\x7b\x08\x21\x1c\x8e\x9f\x70\xf9\xa8\xcb\xae\x94\
\x17\xa2\x81\x08\xc4\xa2\xce\xab\x40\x0f\x38\xa8\xb9\x1d\xa5\x7b\
\xfe\x86\x15\xf8\xfa\xd7\x10\x02\xde\xee\x18\xc0\xb6\x2b\x92\xce\
\x97\x07\xf5\x00\xc0\xb5\x20\x30\x4f\x5c\x8b\x90\x13\xf7\xf2\xc2\
\x87\x5c\xcb\x1b\x20\x1d\x14\x45\xf0\xd2\x96\xbe\x52\x2a\xf4\x64\
\x51\x5f\x6c\x4f\x28\x8b\x40\x2c\xea\xec\x07\xb6\xa2\xe8\x18\x7d\
\x3f\x2d\x99\xd0\x52\x34\x90\x0d\x75\x0e\x37\x5c\x74\x74\x66\x83\
\xe6\xc3\xbf\x8a\xef\x09\xe5\x79\x00\xe0\x46\xc0\x57\xb3\xcf\xa3\
\x65\x5e\x28\xdd\x2c\x6b\x17\xe3\xd6\x3e\x0a\x48\x3a\x0f\x66\xe9\
\x4e\x05\x3a\xcc\x3f\x3d\x39\xc5\x68\x12\x68\x5b\xae\x5f\x02\xbc\
\x07\x0e\x56\xcb\x4e\x7c\x23\x3c\xe1\xad\x52\x40\xcd\xf1\xf3\x11\
\xde\xbf\x51\x55\x85\x3b\xbf\xdd\x84\xeb\x96\x9d\x13\x27\x23\xe1\
\xd4\x59\x95\xc8\x81\xe1\x50\x7a\x1f\xf8\x0d\x18\x54\xf5\x46\x10\
\xde\x67\x25\x64\x40\xb0\xce\xfe\x10\x30\x70\x5d\x49\xe2\xed\xf4\
\x54\x42\x29\xf0\x46\x56\x8c\xc4\x0a\x90\x1b\x90\x19\xaa\x7b\x2e\
\x44\xc8\x74\x89\x7c\x50\xc9\x35\xc5\x10\x38\x74\x7d\xe2\xd0\x7b\
\xba\xac\xd6\x7b\x29\xb0\x67\xf2\xa2\x63\x99\x68\x5b\xae\xef\x04\
\xae\x40\xba\x64\xcf\xe9\x47\x8a\xda\x09\xaf\x35\x7b\xbf\x8b\x9a\
\x7b\x0d\x5d\x17\xdc\x71\x53\x23\xde\x99\xbb\x8d\x45\x91\x70\x6a\
\x4b\x79\x72\x57\x99\x88\x45\x9d\x2b\x81\x83\x08\x8d\xea\xee\x46\
\x84\xdf\x3d\xe1\xb5\x4e\xc3\xe3\x20\x1d\x6c\x5b\x72\xf8\xcc\x52\
\xe5\xc5\xe5\x1a\x3f\x25\x02\x79\x12\x17\x0e\x1d\xc2\x15\xaa\x8f\
\xb7\xa2\x59\x7f\x2d\xea\x4b\x4f\xff\x12\xd2\x18\xda\xe0\xb6\xbf\
\x3b\x58\xca\xdd\x33\x23\xe1\xd4\xfe\xa9\x09\x8e\x53\x44\x2c\xea\
\x2c\x06\x1e\x01\x17\xa3\x77\x09\x46\xdf\xdd\xe3\x9e\x26\x7c\x70\
\xcd\xdb\x47\xbe\x0f\x64\xc6\xc5\xd0\x1e\xa0\x36\x12\x4e\x1d\x9b\
\xba\x62\x1a\x00\xb1\xa8\xf3\x20\xf0\x13\x84\xee\x68\x99\x67\xa9\
\xf9\xa4\x0e\xd5\xda\x34\xe2\x0d\xa9\x80\xe2\x6c\xfd\x5c\xcc\x1c\
\xad\x2b\xad\x8b\x84\x53\xf3\x22\xe1\xd4\x60\x10\x1b\x2a\xd2\xff\
\xb6\x2d\xd7\x67\x00\xff\x04\xbe\x38\x24\xd9\xd4\x90\x6b\x8c\xa1\
\x59\xaf\xa2\x5a\xcf\x01\x43\x3f\xd0\x2d\x5e\x50\x4f\x63\xbd\x6a\
\x03\x77\x47\xc2\xa9\xf5\x95\x58\xbb\xa2\xff\x6a\xd0\xb6\x5c\x5f\
\x0a\xac\x1d\xb1\x78\xcc\x42\xdf\xbf\xb9\xd9\xf1\xa4\xdf\xb8\xe8\
\x8a\x9e\x4c\xa5\xd6\x54\x2a\x49\x20\x16\x75\xd6\x33\xf4\x6b\xfe\
\x8f\x46\x19\x2f\x60\xf1\x82\xfa\x65\xaa\x46\x75\x25\x8d\xaf\xb8\
\x07\xc6\x78\x43\x07\xce\x93\x12\xf3\xfc\x59\x46\xcf\xc3\xf7\x0c\
\xf6\xf0\x7f\x8c\xc7\x7f\x00\xf4\xc5\x17\xbc\x3a\x13\xef\x97\x00\
\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
"
qt_resource_name = b"\
\x00\x03\
\x00\x00\x70\x37\
\x00\x69\
\x00\x6d\x00\x67\
\x00\x0c\
\x09\x57\x90\xa7\
\x00\x75\
\x00\x64\x00\x73\x00\x2d\x00\x69\x00\x63\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\
"
qt_resource_struct_v1 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\
\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
"
qt_resource_struct_v2 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
\x00\x00\x01\x6e\x86\x31\xef\xa3\
"
qt_version = [int(v) for v in QtCore.qVersion().split('.')]
if qt_version < [5, 8, 0]:
rcc_version = 1
qt_resource_struct = qt_resource_struct_v1
else:
rcc_version = 2
qt_resource_struct = qt_resource_struct_v2
def qInitResources():
QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
def qCleanupResources():
QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
qInitResources()

View File

@@ -1,31 +0,0 @@
Source: udsactor
Section: admin
Priority: optional
Maintainer: Adolfo Gómez García <agomez@virtualcable.es>
Build-Depends: debhelper (>= 7), po-debconf
Standards-Version: 3.9.2
Homepage: http://www.virtualcable.es
Package: udsactor
Section: admin
Priority: optional
Architecture: all
Depends: policykit-1(>=0.100), python-requests (>=0.8.2), python-qt4 (>=4.9), python-six(>=1.1), python-prctl(>=1.1.1), python (>=2.7), libxss1, ${misc:Depends}
Description: Actor for Universal Desktop Services (UDS) Broker
This package provides the required components to allow this machine to work on an environment managed by UDS Broker.
Package: udsactor-xrdp
Section: x11
Priority: optional
Architecture: all
Depends: xrdp (>= 0.5.0), udsactor (>= ${binary:Version}), libpam-modules-bin (>=1.0), ${misc:Depends}
Description: UDS Actor component for xrdp
This package provides connection between uds actor and xrdp
Package: udsactor-nx
Section: x11
Priority: optional
Architecture: all
Depends: nxnode (>= 3.5.0), udsactor (>= ${binary:Version}), ${misc:Depends}
Description: UDS Actor component for nx
This package provides connection between uds actor and nx

View File

@@ -1,2 +0,0 @@
#!/bin/sh
pkexec "/usr/sbin/UDSActorConfig" "$@"

2
client-py3/full/.env Normal file
View File

@@ -0,0 +1,2 @@
PYTHONPATH=./src:${PYTHONPATH}

View File

@@ -1,4 +1,4 @@
/bin
/udsclient_*
/udsclient*
/udsclient-*.tar.gz
/*.rpm

Some files were not shown because too many files have changed in this diff Show More