Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
CIRCLE
/
client
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
2
Merge Requests
0
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
35d1570e
authored
Sep 03, 2014
by
Csók Tamás
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
client: pythonw.exe instead of python.exe
parent
2f746a10
Show whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
200 additions
and
160 deletions
+200
-160
src/iss/installer/OrderedDict.py
+1
-0
src/iss/installer/cloud.py
+5
-7
src/iss/installer/cloud_connect_from_windows.py
+16
-9
src/iss/installer/get-pip.py
+1
-0
src/iss/installer/nx_client_installer.py
+7
-7
src/iss/installer/nxkey.py
+10
-11
src/iss/installer/pywin_installer.py
+0
-0
src/iss/installer/win_install.py
+33
-25
src/iss/installer/windowsclasses.py
+27
-21
src/iss/installer/windowsclasses.pyc
+0
-0
src/python/OrderedDict.py
+1
-0
src/python/cloud.py
+5
-7
src/python/cloud_connect_from_windows.py
+16
-9
src/python/get-pip.py
+1
-0
src/python/nx_client_installer.py
+7
-7
src/python/nxkey.py
+10
-11
src/python/pywin_installer.py
+0
-0
src/python/win_install.py
+33
-25
src/python/windowsclasses.py
+27
-21
No files found.
src/iss/installer/OrderedDict.py
View file @
35d1570e
# Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy.
# Passes Python2.7's test suite and incorporates all the latest updates.
# flake8: noqa
try
:
from
thread
import
get_ident
as
_get_ident
...
...
src/iss/installer/cloud.py
View file @
35d1570e
...
...
@@ -8,8 +8,6 @@ The Client job is to help the ease of use of the cloud system.
import
platform
import
argparse
import
sys
import
time
try
:
from
selenium
import
webdriver
from
selenium.webdriver.common.by
import
By
...
...
@@ -49,13 +47,14 @@ def parse_arguments():
parser
.
add_argument
(
"-p"
,
"--password"
,
type
=
str
)
parser
.
add_argument
(
"-d"
,
"--driver"
,
help
=
"Select webdriver. Aside from Firefox, you have to install "
+
help
=
"Select webdriver. Aside from Firefox, you have to install "
+
"first the proper driver."
,
type
=
str
,
choices
=
[
'firefox'
,
'chrome'
,
'ie'
,
'opera'
],
default
=
"firefox"
)
choices
=
[
'firefox'
,
'chrome'
,
'ie'
,
'opera'
],
default
=
"firefox"
)
args
=
parser
.
parse_args
()
return
args
class
Browser
:
"""
Browser initialisation
...
...
@@ -92,7 +91,6 @@ class Browser:
driver
.
find_element_by_css_selector
(
"input[type='submit']"
)
.
click
()
def
main
(
self
):
"""
Use of the https://cloud.bme.hu/
...
...
@@ -142,7 +140,7 @@ def main():
args
=
parse_arguments
()
if
args
.
uri
is
not
None
:
vm
=
Struct
()
vm
.
protocol
,
vm
.
user
,
vm
.
password
,
vm
.
host
,
vm
.
port
=
\
vm
.
protocol
,
vm
.
user
,
vm
.
password
,
vm
.
host
,
vm
.
port
=
\
args
.
uri
.
split
(
':'
,
4
)
vm
.
protocol
=
vm
.
protocol
.
upper
()
vm
.
state
=
"RUN"
...
...
src/iss/installer/cloud_connect_from_windows.py
View file @
35d1570e
...
...
@@ -29,8 +29,9 @@ def connect(vm):
vm.password -- Password used for the connection
"""
if
vm
.
protocol
==
"SSH"
:
arguments
=
"-ssh -P
%
s -pw
%
s
%
s@
%
s"
%
(
vm
.
port
,
vm
.
password
,
vm
.
user
,
vm
.
host
)
subprocess
.
Popen
(
"putty.exe "
+
arguments
,
shell
=
True
)
arguments
=
(
"-ssh -P
%
s -pw
%
s"
%
(
vm
.
port
,
vm
.
password
)
+
"
%
s@
%
s"
%
(
vm
.
user
,
vm
.
host
))
subprocess
.
Popen
(
"putty.exe "
+
arguments
,
shell
=
True
)
elif
vm
.
protocol
==
"NX"
:
listdir
=
os
.
path
.
expanduser
(
"~
\\
.nx
\\
config
\\
*.nxs"
)
found
=
False
...
...
@@ -43,13 +44,15 @@ def connect(vm):
found
=
True
break
if
not
found
:
config_file
=
"
%
s
%
s
%
s"
%
(
os
.
path
.
expanduser
(
"~
\\
.nx
\\
config
\\
"
),
str
(
int
(
time
.
time
()
*
1000
)),
".nxs"
)
config_file
=
"
%
s
%
s
%
s"
%
(
os
.
path
.
expanduser
(
"~
\\
.nx
\\
config
\\
"
),
str
(
int
(
time
.
time
()
*
1000
)),
".nxs"
)
password
=
nxkey
.
NXKeyGen
(
vm
.
password
)
.
getEncrypted
()
config
=
NX_template
%
{
'USERNAME'
:
vm
.
user
,
'PASSWORD'
:
password
,
'HOST'
:
vm
.
host
,
'PORT'
:
vm
.
port
}
config
=
NX_template
%
{
'USERNAME'
:
vm
.
user
,
'PASSWORD'
:
password
,
'HOST'
:
vm
.
host
,
'PORT'
:
vm
.
port
}
f
=
open
(
config_file
,
'w'
)
f
.
write
(
config
)
f
.
close
()
subprocess
.
Popen
(
config_file
,
shell
=
True
)
subprocess
.
Popen
(
config_file
,
shell
=
True
)
elif
vm
.
protocol
==
"RDP"
:
listdir
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
+
"
\\
.rdp
\\
*.rdp"
found
=
False
...
...
@@ -62,13 +65,17 @@ def connect(vm):
found
=
True
break
if
not
found
:
config_file
=
"
%
s
%
s
%
s"
%
(
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
+
"
\\
.rdp
\\
"
,
str
(
int
(
time
.
time
()
*
1000
)),
".rdp"
)
password
=
binascii
.
hexlify
(
win32crypt
.
CryptProtectData
(
u"
%
s"
%
vm
.
password
,
u'psw'
,
None
,
None
,
None
,
0
))
config
=
RPD_template
%
{
'USERNAME'
:
vm
.
user
,
'PASSWORD'
:
password
,
'HOST'
:
vm
.
host
,
'PORT'
:
vm
.
port
}
config_file
=
"
%
s
%
s
%
s"
%
((
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
+
"
\\
.rdp
\\
"
),
str
(
int
(
time
.
time
()
*
1000
)),
".rdp"
)
password
=
binascii
.
hexlify
(
win32crypt
.
CryptProtectData
(
u"
%
s"
%
vm
.
password
,
u'psw'
,
None
,
None
,
None
,
0
))
config
=
RPD_template
%
{
'USERNAME'
:
vm
.
user
,
'PASSWORD'
:
password
,
'HOST'
:
vm
.
host
,
'PORT'
:
vm
.
port
}
f
=
open
(
config_file
,
'w'
)
f
.
write
(
config
)
f
.
close
()
subprocess
.
Popen
(
config_file
,
shell
=
True
)
subprocess
.
Popen
(
config_file
,
shell
=
True
)
NX_template
=
"""<!DOCTYPE NXClientSettings>
...
...
src/iss/installer/get-pip.py
View file @
35d1570e
...
...
@@ -18,6 +18,7 @@
#
# If you're wondering how this is created, the secret is
# "contrib/build-installer" from the pip repository.
# flake8: noqa
ZIPFILE
=
b
"""
UEsDBBQAAAAIAHeDxEQMVWtseQwAAOokAAAPAAAAcGlwL19faW5pdF9fLnB5pRprb+M28rt/BTdp
src/iss/installer/nx_client_installer.py
View file @
35d1570e
...
...
@@ -24,10 +24,10 @@ def parse_arguments():
parser
=
argparse
.
ArgumentParser
()
if
windowsclasses
.
DecideArchitecture
.
Is64Windows
():
local_default
=
(
windowsclasses
.
DecideArchitecture
.
GetProgramFiles64
()
+
"
\\
CIRCLE
\\
"
)
+
"
\\
CIRCLE
\\
"
)
else
:
local_default
=
(
windowsclasses
.
DecideArchitecture
.
GetProgramFiles32
()
+
"
\\
CIRCLE
\\
"
)
+
"
\\
CIRCLE
\\
"
)
if
(
not
os
.
path
.
exists
(
local_default
[:
-
1
])
and
os
.
path
.
exists
(
os
.
environ
[
'APPDATA'
]
+
"
\\
CIRCLE"
)):
local_default
=
os
.
environ
[
'APPDATA'
]
+
"
\\
CIRCLE
\\
"
...
...
@@ -38,17 +38,17 @@ def parse_arguments():
args
=
parser
.
parse_args
()
return
args
def
main
():
try
:
args
=
parse_arguments
()
nx_install_location
=
None
while
nx_install_location
is
None
:
print
"Checking whether NX Client for Windows is installed"
handler
=
windowsclasses
.
RegistryHandler
()
try
:
nx_install_location
=
handler
.
get_key_value
(
"SOFTWARE
\\
Microsoft
\\
Windows
\\
CurrentVersion
\\
"
+
"Uninstall
\\
nxclient_is1"
,
"SOFTWARE
\\
Microsoft
\\
Windows
\\
CurrentVersion
\\
"
+
"Uninstall
\\
nxclient_is1"
,
"InstallLocation"
,
"key"
)
print
(
"NX Client for Windows is found at "
"'
%
s'"
%
nx_install_location
)
...
...
@@ -60,8 +60,8 @@ def main():
print
"NX Client for Windows isn't installed on the system."
print
"
\t
Commencing the install"
subprocess
.
Popen
(
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
+
"
\\
nxclient-3.5.0-9.exe"
)
.
wait
()
os
.
path
.
realpath
(
__file__
))
+
"
\\
nxclient-3.5.0-9.exe"
)
.
wait
()
except
:
pass
...
...
src/iss/installer/nxkey.py
View file @
35d1570e
...
...
@@ -8,9 +8,9 @@ https://www.nomachine.com/AR01C00125
import
sys
import
random
import
re
from
xml.sax.saxutils
import
escape
class
NXKeyGen
:
"""
NXKeyGen class
...
...
@@ -18,6 +18,7 @@ class NXKeyGen:
"""
numValidCharList
=
85
dummyString
=
"{{{{"
def
__init__
(
self
,
password
):
"""
Initialize the class
...
...
@@ -53,8 +54,7 @@ class NXKeyGen:
"X"
,
"Y"
,
"Z"
,
"["
,
"]"
,
"_"
,
"a"
,
"b"
,
"c"
,
"d"
,
"e"
,
"f"
,
"g"
,
"h"
,
"i"
,
"j"
,
"k"
,
"l"
,
"m"
,
"n"
,
"o"
,
"p"
,
"q"
,
"r"
,
"s"
,
"t"
,
"u"
,
"v"
,
"w"
,
"x"
,
"y"
,
"z"
,
"{"
,
"|"
,
"}"
]
"y"
,
"z"
,
"{"
,
"|"
,
"}"
]
return
validcharlist
[
pos
]
def
encodePassword
(
self
,
p
):
...
...
@@ -71,7 +71,7 @@ class NXKeyGen:
for
i
in
range
(
len
(
p
)):
c
=
p
[
i
:
i
+
1
]
a
=
ord
(
c
)
sTmp
=
str
(
a
+
i
+
1
)
+
":"
sTmp
=
str
(
a
+
i
+
1
)
+
":"
sPass
+=
sTmp
sTmp
=
""
return
sPass
...
...
@@ -86,7 +86,7 @@ class NXKeyGen:
"""
i
=
-
1
for
j
in
range
(
self
.
numValidCharList
):
randchar
=
self
.
getvalidCharList
(
j
)
;
randchar
=
self
.
getvalidCharList
(
j
)
if
randchar
==
c
:
i
=
j
return
i
...
...
@@ -99,7 +99,7 @@ class NXKeyGen:
Keyword arguments:
@return char -- Valid character placed 0-60 in the valid list
"""
return
self
.
getvalidCharList
(
random
.
randint
(
0
,
60
))
return
self
.
getvalidCharList
(
random
.
randint
(
0
,
60
))
def
scrambleString
(
self
,
s
):
"""
...
...
@@ -124,13 +124,13 @@ class NXKeyGen:
l
=
k
+
len
(
sRet
)
-
2
sRet
=
app
+
sRet
for
i1
in
range
(
1
,
len
(
sRet
)):
app2
=
sRet
[
i1
:
i1
+
1
]
app2
=
sRet
[
i1
:
i1
+
1
]
j
=
self
.
findCharInList
(
app2
)
if
j
==
-
1
:
return
sRet
i
=
(
j
+
l
*
(
i1
+
1
))
%
self
.
numValidCharList
car
=
self
.
getvalidCharList
(
i
)
sRet
=
self
.
substr_replace
(
sRet
,
car
,
i1
,
1
)
sRet
=
self
.
substr_replace
(
sRet
,
car
,
i1
,
1
)
c
=
(
ord
(
self
.
getRandomValidCharFromList
()))
+
2
c2
=
chr
(
c
)
sRet
=
sRet
+
c2
...
...
@@ -141,8 +141,8 @@ class NXKeyGen:
Replace a character at a special position
"""
clist
=
list
(
in_str
)
count
=
0
;
tmp_str
=
''
;
count
=
0
tmp_str
=
''
for
key
in
clist
:
if
count
!=
pos
:
tmp_str
+=
key
...
...
@@ -156,4 +156,3 @@ if __name__ == "__main__":
NXPass
=
NXKeyGen
(
sys
.
argv
[
1
])
print
NXPass
.
password
print
NXPass
.
getEncrypted
()
src/iss/installer/pywin_installer.py
View file @
35d1570e
src/iss/installer/win_install.py
View file @
35d1570e
...
...
@@ -13,11 +13,9 @@ import shutil
from
win32com.shell
import
shell
,
shellcon
import
windowsclasses
try
:
from
collections
import
*
from
collections
import
*
# noqa
except
ImportError
:
from
OrderedDict
import
*
from
OrderedDict
import
*
# noqa
def
parse_arguments
():
"""
...
...
@@ -35,13 +33,13 @@ def parse_arguments():
'iexplore'
,
'opera'
])
if
windowsclasses
.
DecideArchitecture
.
Is64Windows
():
local_default
=
(
windowsclasses
.
DecideArchitecture
.
GetProgramFiles64
()
+
"
\\
CIRCLE
\\
"
)
+
"
\\
CIRCLE
\\
"
)
else
:
local_default
=
(
windowsclasses
.
DecideArchitecture
.
GetProgramFiles32
()
+
"
\\
CIRCLE
\\
"
)
if
(
not
os
.
path
.
exists
(
local_default
[:
-
1
])
and
os
.
path
.
exists
(
os
.
environ
[
'APPDATA'
]
+
"
\\
CIRCLE"
)):
local_default
=
os
.
environ
[
'APPDATA'
]
+
"
\\
CIRCLE
\\
"
+
"
\\
CIRCLE
\\
"
)
if
(
not
os
.
path
.
exists
(
local_default
[:
-
1
])
and
os
.
path
.
exists
(
os
.
environ
[
'APPDATA'
]
+
"
\\
CIRCLE"
)):
local_default
=
os
.
environ
[
'APPDATA'
]
+
"
\\
CIRCLE
\\
"
parser
.
add_argument
(
"-l"
,
"--location"
,
help
=
"Location of the client files in the system"
,
default
=
local_default
,
required
=
False
)
...
...
@@ -60,6 +58,7 @@ def parse_arguments():
args
=
parser
.
parse_args
()
return
args
def
custom_protocol_register
(
custom_protocol
):
"""
Custom protocol register based on RegistryHandler module
...
...
@@ -92,13 +91,13 @@ def main():
"""
try
:
args
=
parse_arguments
()
shortcut
=
pythoncom
.
CoCreateInstance
(
shortcut
=
pythoncom
.
CoCreateInstance
(
shell
.
CLSID_ShellLink
,
None
,
pythoncom
.
CLSCTX_INPROC_SERVER
,
shell
.
IID_IShellLink
)
desktop_path
=
shell
.
SHGetFolderPath
(
desktop_path
=
shell
.
SHGetFolderPath
(
0
,
shellcon
.
CSIDL_DESKTOP
,
0
,
0
)
if
args
.
remove
:
location
=
os
.
path
.
join
(
desktop_path
,
"Cloud GUI"
)
...
...
@@ -117,15 +116,15 @@ def main():
shortcut
.
write
(
'URL='
+
args
.
target
)
shortcut
.
close
()
else
:
shortcut
.
SetPath
(
args
.
location
+
"cloud.py"
)
shortcut
.
SetPath
(
args
.
location
+
"cloud.py"
)
if
args
.
driver
==
"chrome"
:
shortcut
.
SetArguments
(
"-d chrome"
)
elif
args
.
driver
==
"iexplore"
:
shortcut
.
SetArguments
(
"-d ie"
)
elif
args
.
driver
==
"opera"
:
shortcut
.
SetArguments
(
"-d opera"
)
shortcut
.
SetDescription
(
"Tool to use CIRCLE Cloud"
)
shortcut
.
SetIconLocation
(
args
.
location
+
"cloud.ico"
,
0
)
shortcut
.
SetDescription
(
"Tool to use CIRCLE Cloud"
)
shortcut
.
SetIconLocation
(
args
.
location
+
"cloud.ico"
,
0
)
desktop_path
=
shell
.
SHGetFolderPath
(
0
,
shellcon
.
CSIDL_DESKTOP
,
0
,
0
)
persist_file
=
shortcut
.
QueryInterface
(
...
...
@@ -137,28 +136,37 @@ def main():
print
"Creating custom URL protocol handlers"
try
:
custom_ssh
=
OrderedDict
(
[(
'ssh'
,
[
"default"
,
"URL:ssh Protocol"
,
"URL Protocol"
,
""
]),
[(
'ssh'
,
[
"default"
,
"URL:ssh Protocol"
,
"URL Protocol"
,
""
]),
(
'ssh
\\
URL Protocol'
,
""
),
(
'ssh
\\
DefaultIcon'
,
args
.
location
+
"cloud.ico"
),
(
'ssh
\\
shell'
,
{
'open'
:
{
'command'
:
"
\"
python
.exe
\"
\"
%
s"
%
args
.
location
+
"cloud.py
\"
\"
%1
\"
"
}})])
'command'
:
"
\"
python
w.exe
\"
\"
%
s"
%
args
.
location
+
"cloud.py
\"
\"
%1
\"
"
}})])
custom_protocol_register
(
custom_ssh
)
custom_rdp
=
OrderedDict
(
[(
'rdp'
,
[
"default"
,
"URL:rdp Protocol"
,
"URL Protocol"
,
""
]),
[(
'rdp'
,
[
"default"
,
"URL:rdp Protocol"
,
"URL Protocol"
,
""
]),
(
'rdp
\\
URL Protocol'
,
""
),
(
'rdp
\\
DefaultIcon'
,
args
.
location
+
"cloud.ico"
),
(
'rdp
\\
DefaultIcon'
,
args
.
location
+
"cloud.ico"
),
(
'rdp
\\
shell'
,
{
'open'
:
{
'command'
:
"
\"
python
.exe
\"
\"
%
s"
%
args
.
location
+
"cloud.py
\"
\"
%1
\"
"
}})])
'command'
:
"
\"
python
w.exe
\"
\"
%
s"
%
args
.
location
+
"cloud.py
\"
\"
%1
\"
"
}})])
custom_protocol_register
(
custom_rdp
)
custom_nx
=
OrderedDict
(
[(
'nx'
,
[
"default"
,
"URL:nx Protocol"
,
"URL Protocol"
,
""
]),
[(
'nx'
,
[
"default"
,
"URL:nx Protocol"
,
"URL Protocol"
,
""
]),
(
'nx
\\
URL Protocol'
,
""
),
(
'nx
\\
DefaultIcon'
,
args
.
location
+
"cloud.ico"
),
(
'nx
\\
DefaultIcon'
,
args
.
location
+
"cloud.ico"
),
(
'nx
\\
shell'
,
{
'open'
:
{
'command'
:
"
\"
python
.exe
\"
\"
%
s"
%
args
.
location
+
"cloud.py
\"
\"
%1
\"
"
}})])
'command'
:
"
\"
python
w.exe
\"
\"
%
s"
%
args
.
location
+
"cloud.py
\"
\"
%1
\"
"
}})])
custom_protocol_register
(
custom_nx
)
except
:
print
"Error! URL Protocol handler installation aborted!"
...
...
src/iss/installer/windowsclasses.py
View file @
35d1570e
...
...
@@ -11,11 +11,12 @@ Currently here:
import
os
import
argparse
import
errno
from
_winreg
import
*
from
_winreg
import
*
# noqa
try
:
from
collections
import
*
from
collections
import
*
# noqa
except
ImporError
:
from
OrderedDict
import
*
from
OrderedDict
import
*
# noqa
def
parse_arguments
():
"""
...
...
@@ -41,9 +42,11 @@ def parse_arguments():
args
=
parser
.
parse_args
()
return
args
def
main
():
return
RegistryHandler
(
parse_arguments
())
class
Struct
:
"""
Parameter bypassing struct
...
...
@@ -59,7 +62,7 @@ class RegistryHandler:
differently (default)
"""
def
__init__
(
self
,
args
=
None
):
def
__init__
(
self
,
args
=
None
):
"""Initialise RegistryHandler
Keyword arguments:
...
...
@@ -96,7 +99,7 @@ class RegistryHandler:
elif
self
.
args
.
registry
==
"HKCC"
:
self
.
args
.
registry
=
HKEY_CURRENT_CONFIG
else
:
#print "Non supported registry type"
#
print "Non supported registry type"
raise
AttributeError
def
connect_registry
(
self
):
...
...
@@ -107,11 +110,11 @@ class RegistryHandler:
@return connected_registy -- Reference to the newly opened
registry
"""
return
ConnectRegistry
(
None
,
self
.
args
.
registry
)
return
ConnectRegistry
(
None
,
self
.
args
.
registry
)
def
create_registry_from_dict_chain
(
self
,
dict_chain
,
both
=
False
,
architect
=
KEY_WOW64_64KEY
,
needed_rights
=
KEY_ALL_ACCESS
):
self
,
dict_chain
,
both
=
False
,
architect
=
KEY_WOW64_64KEY
,
needed_rights
=
KEY_ALL_ACCESS
):
""""
Create registry key and value multilevel tree by chained
dictionaries.
...
...
@@ -208,8 +211,8 @@ class RegistryHandler:
return
[
key
,
architect
]
def
get_key_values
(
self
,
key_name
,
subkey_list
,
subroutine
=
False
,
depth
=
"subkeys"
):
self
,
key_name
,
subkey_list
,
subroutine
=
False
,
depth
=
"subkeys"
):
"""
Getting registry subkeys value by it's key's name and subkeys
name
...
...
@@ -243,9 +246,9 @@ class RegistryHandler:
key
=
key_and_architect
[
0
]
architect
=
key_and_architect
[
1
]
except
KeyError
:
#print "%s doesn't exist in the registry" % key_name
#
print "%s doesn't exist in the registry" % key_name
raise
LookupError
#print "%s found in the registry" % key_name
#
print "%s found in the registry" % key_name
results
=
{}
if
int_depth
>=
1
:
for
i
in
xrange
(
0
,
QueryInfoKey
(
key
)[
0
]
-
1
):
...
...
@@ -261,7 +264,7 @@ class RegistryHandler:
skey
,
subkey_name
)[
0
]
except
OSError
as
e
:
if
e
.
errno
==
errno
.
ENOENT
:
#print ("%s doesn't exist in this" % subkey_name
#
print ("%s doesn't exist in this" % subkey_name
# " subkey")
pass
skey
.
Close
()
...
...
@@ -273,12 +276,12 @@ class RegistryHandler:
pass
key
.
Close
()
if
len
(
results
)
!=
len
(
subkey_list
):
#print "We are missing important variables"
#
print "We are missing important variables"
raise
LookupError
return
results
def
get_key_value
(
self
,
key_name
,
subkey_name
,
subroutine
=
None
,
depth
=
None
):
self
,
key_name
,
subkey_name
,
subroutine
=
None
,
depth
=
None
):
"""
This is a wrapper for the get_key_values to be easier to use
for single subkeys.
...
...
@@ -296,14 +299,14 @@ class RegistryHandler:
"""
try
:
if
subroutine
is
None
:
return
self
.
get_key_values
(
key_name
,
[
subkey_name
])[
subkey_name
]
return
self
.
get_key_values
(
key_name
,
[
subkey_name
])[
subkey_name
]
elif
depth
is
None
:
return
self
.
get_key_values
(
key_name
,
[
subkey_name
],
subroutine
)[
subkey_name
]
return
self
.
get_key_values
(
key_name
,
[
subkey_name
],
subroutine
)[
subkey_name
]
else
:
return
self
.
get_key_values
(
key_name
,
[
subkey_name
],
subroutine
,
depth
)[
subkey_name
]
return
self
.
get_key_values
(
key_name
,
[
subkey_name
],
subroutine
,
depth
)[
subkey_name
]
except
:
raise
...
...
@@ -313,15 +316,18 @@ class DecideArchitecture:
Helper class to get the true ProgramFiles directory.
This class doesn't depend on Phyton or Windows architecture.
"""
@staticmethod
def
Is64Windows
():
return
'PROGRAMFILES(X86)'
in
os
.
environ
@staticmethod
def
GetProgramFiles32
():
if
DecideArchitecture
.
Is64Windows
():
return
os
.
environ
[
'PROGRAMFILES(X86)'
]
else
:
return
os
.
environ
[
'PROGRAMFILES'
]
@staticmethod
def
GetProgramFiles64
():
if
DecideArchitecture
.
Is64Windows
():
...
...
src/iss/installer/windowsclasses.pyc
deleted
100644 → 0
View file @
2f746a10
File deleted
src/python/OrderedDict.py
View file @
35d1570e
# Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy.
# Passes Python2.7's test suite and incorporates all the latest updates.
# flake8: noqa
try
:
from
thread
import
get_ident
as
_get_ident
...
...
src/python/cloud.py
View file @
35d1570e
...
...
@@ -8,8 +8,6 @@ The Client job is to help the ease of use of the cloud system.
import
platform
import
argparse
import
sys
import
time
try
:
from
selenium
import
webdriver
from
selenium.webdriver.common.by
import
By
...
...
@@ -49,13 +47,14 @@ def parse_arguments():
parser
.
add_argument
(
"-p"
,
"--password"
,
type
=
str
)
parser
.
add_argument
(
"-d"
,
"--driver"
,
help
=
"Select webdriver. Aside from Firefox, you have to install "
+
help
=
"Select webdriver. Aside from Firefox, you have to install "
+
"first the proper driver."
,
type
=
str
,
choices
=
[
'firefox'
,
'chrome'
,
'ie'
,
'opera'
],
default
=
"firefox"
)
choices
=
[
'firefox'
,
'chrome'
,
'ie'
,
'opera'
],
default
=
"firefox"
)
args
=
parser
.
parse_args
()
return
args
class
Browser
:
"""
Browser initialisation
...
...
@@ -92,7 +91,6 @@ class Browser:
driver
.
find_element_by_css_selector
(
"input[type='submit']"
)
.
click
()
def
main
(
self
):
"""
Use of the https://cloud.bme.hu/
...
...
@@ -142,7 +140,7 @@ def main():
args
=
parse_arguments
()
if
args
.
uri
is
not
None
:
vm
=
Struct
()
vm
.
protocol
,
vm
.
user
,
vm
.
password
,
vm
.
host
,
vm
.
port
=
\
vm
.
protocol
,
vm
.
user
,
vm
.
password
,
vm
.
host
,
vm
.
port
=
\
args
.
uri
.
split
(
':'
,
4
)
vm
.
protocol
=
vm
.
protocol
.
upper
()
vm
.
state
=
"RUN"
...
...
src/python/cloud_connect_from_windows.py
View file @
35d1570e
...
...
@@ -29,8 +29,9 @@ def connect(vm):
vm.password -- Password used for the connection
"""
if
vm
.
protocol
==
"SSH"
:
arguments
=
"-ssh -P
%
s -pw
%
s
%
s@
%
s"
%
(
vm
.
port
,
vm
.
password
,
vm
.
user
,
vm
.
host
)
subprocess
.
Popen
(
"putty.exe "
+
arguments
,
shell
=
True
)
arguments
=
(
"-ssh -P
%
s -pw
%
s"
%
(
vm
.
port
,
vm
.
password
)
+
"
%
s@
%
s"
%
(
vm
.
user
,
vm
.
host
))
subprocess
.
Popen
(
"putty.exe "
+
arguments
,
shell
=
True
)
elif
vm
.
protocol
==
"NX"
:
listdir
=
os
.
path
.
expanduser
(
"~
\\
.nx
\\
config
\\
*.nxs"
)
found
=
False
...
...
@@ -43,13 +44,15 @@ def connect(vm):
found
=
True
break
if
not
found
:
config_file
=
"
%
s
%
s
%
s"
%
(
os
.
path
.
expanduser
(
"~
\\
.nx
\\
config
\\
"
),
str
(
int
(
time
.
time
()
*
1000
)),
".nxs"
)
config_file
=
"
%
s
%
s
%
s"
%
(
os
.
path
.
expanduser
(
"~
\\
.nx
\\
config
\\
"
),
str
(
int
(
time
.
time
()
*
1000
)),
".nxs"
)
password
=
nxkey
.
NXKeyGen
(
vm
.
password
)
.
getEncrypted
()
config
=
NX_template
%
{
'USERNAME'
:
vm
.
user
,
'PASSWORD'
:
password
,
'HOST'
:
vm
.
host
,
'PORT'
:
vm
.
port
}
config
=
NX_template
%
{
'USERNAME'
:
vm
.
user
,
'PASSWORD'
:
password
,
'HOST'
:
vm
.
host
,
'PORT'
:
vm
.
port
}
f
=
open
(
config_file
,
'w'
)
f
.
write
(
config
)
f
.
close
()
subprocess
.
Popen
(
config_file
,
shell
=
True
)
subprocess
.
Popen
(
config_file
,
shell
=
True
)
elif
vm
.
protocol
==
"RDP"
:
listdir
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
+
"
\\
.rdp
\\
*.rdp"
found
=
False
...
...
@@ -62,13 +65,17 @@ def connect(vm):
found
=
True
break
if
not
found
:
config_file
=
"
%
s
%
s
%
s"
%
(
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
+
"
\\
.rdp
\\
"
,
str
(
int
(
time
.
time
()
*
1000
)),
".rdp"
)
password
=
binascii
.
hexlify
(
win32crypt
.
CryptProtectData
(
u"
%
s"
%
vm
.
password
,
u'psw'
,
None
,
None
,
None
,
0
))
config
=
RPD_template
%
{
'USERNAME'
:
vm
.
user
,
'PASSWORD'
:
password
,
'HOST'
:
vm
.
host
,
'PORT'
:
vm
.
port
}
config_file
=
"
%
s
%
s
%
s"
%
((
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
+
"
\\
.rdp
\\
"
),
str
(
int
(
time
.
time
()
*
1000
)),
".rdp"
)
password
=
binascii
.
hexlify
(
win32crypt
.
CryptProtectData
(
u"
%
s"
%
vm
.
password
,
u'psw'
,
None
,
None
,
None
,
0
))
config
=
RPD_template
%
{
'USERNAME'
:
vm
.
user
,
'PASSWORD'
:
password
,
'HOST'
:
vm
.
host
,
'PORT'
:
vm
.
port
}
f
=
open
(
config_file
,
'w'
)
f
.
write
(
config
)
f
.
close
()
subprocess
.
Popen
(
config_file
,
shell
=
True
)
subprocess
.
Popen
(
config_file
,
shell
=
True
)
NX_template
=
"""<!DOCTYPE NXClientSettings>
...
...
src/python/get-pip.py
View file @
35d1570e
...
...
@@ -18,6 +18,7 @@
#
# If you're wondering how this is created, the secret is
# "contrib/build-installer" from the pip repository.
# flake8: noqa
ZIPFILE
=
b
"""
UEsDBBQAAAAIAHeDxEQMVWtseQwAAOokAAAPAAAAcGlwL19faW5pdF9fLnB5pRprb+M28rt/BTdp
src/python/nx_client_installer.py
View file @
35d1570e
...
...
@@ -24,10 +24,10 @@ def parse_arguments():
parser
=
argparse
.
ArgumentParser
()
if
windowsclasses
.
DecideArchitecture
.
Is64Windows
():
local_default
=
(
windowsclasses
.
DecideArchitecture
.
GetProgramFiles64
()
+
"
\\
CIRCLE
\\
"
)
+
"
\\
CIRCLE
\\
"
)
else
:
local_default
=
(
windowsclasses
.
DecideArchitecture
.
GetProgramFiles32
()
+
"
\\
CIRCLE
\\
"
)
+
"
\\
CIRCLE
\\
"
)
if
(
not
os
.
path
.
exists
(
local_default
[:
-
1
])
and
os
.
path
.
exists
(
os
.
environ
[
'APPDATA'
]
+
"
\\
CIRCLE"
)):
local_default
=
os
.
environ
[
'APPDATA'
]
+
"
\\
CIRCLE
\\
"
...
...
@@ -38,17 +38,17 @@ def parse_arguments():
args
=
parser
.
parse_args
()
return
args
def
main
():
try
:
args
=
parse_arguments
()
nx_install_location
=
None
while
nx_install_location
is
None
:
print
"Checking whether NX Client for Windows is installed"
handler
=
windowsclasses
.
RegistryHandler
()
try
:
nx_install_location
=
handler
.
get_key_value
(
"SOFTWARE
\\
Microsoft
\\
Windows
\\
CurrentVersion
\\
"
+
"Uninstall
\\
nxclient_is1"
,
"SOFTWARE
\\
Microsoft
\\
Windows
\\
CurrentVersion
\\
"
+
"Uninstall
\\
nxclient_is1"
,
"InstallLocation"
,
"key"
)
print
(
"NX Client for Windows is found at "
"'
%
s'"
%
nx_install_location
)
...
...
@@ -60,8 +60,8 @@ def main():
print
"NX Client for Windows isn't installed on the system."
print
"
\t
Commencing the install"
subprocess
.
Popen
(
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
+
"
\\
nxclient-3.5.0-9.exe"
)
.
wait
()
os
.
path
.
realpath
(
__file__
))
+
"
\\
nxclient-3.5.0-9.exe"
)
.
wait
()
except
:
pass
...
...
src/python/nxkey.py
View file @
35d1570e
...
...
@@ -8,9 +8,9 @@ https://www.nomachine.com/AR01C00125
import
sys
import
random
import
re
from
xml.sax.saxutils
import
escape
class
NXKeyGen
:
"""
NXKeyGen class
...
...
@@ -18,6 +18,7 @@ class NXKeyGen:
"""
numValidCharList
=
85
dummyString
=
"{{{{"
def
__init__
(
self
,
password
):
"""
Initialize the class
...
...
@@ -53,8 +54,7 @@ class NXKeyGen:
"X"
,
"Y"
,
"Z"
,
"["
,
"]"
,
"_"
,
"a"
,
"b"
,
"c"
,
"d"
,
"e"
,
"f"
,
"g"
,
"h"
,
"i"
,
"j"
,
"k"
,
"l"
,
"m"
,
"n"
,
"o"
,
"p"
,
"q"
,
"r"
,
"s"
,
"t"
,
"u"
,
"v"
,
"w"
,
"x"
,
"y"
,
"z"
,
"{"
,
"|"
,
"}"
]
"y"
,
"z"
,
"{"
,
"|"
,
"}"
]
return
validcharlist
[
pos
]
def
encodePassword
(
self
,
p
):
...
...
@@ -71,7 +71,7 @@ class NXKeyGen:
for
i
in
range
(
len
(
p
)):
c
=
p
[
i
:
i
+
1
]
a
=
ord
(
c
)
sTmp
=
str
(
a
+
i
+
1
)
+
":"
sTmp
=
str
(
a
+
i
+
1
)
+
":"
sPass
+=
sTmp
sTmp
=
""
return
sPass
...
...
@@ -86,7 +86,7 @@ class NXKeyGen:
"""
i
=
-
1
for
j
in
range
(
self
.
numValidCharList
):
randchar
=
self
.
getvalidCharList
(
j
)
;
randchar
=
self
.
getvalidCharList
(
j
)
if
randchar
==
c
:
i
=
j
return
i
...
...
@@ -99,7 +99,7 @@ class NXKeyGen:
Keyword arguments:
@return char -- Valid character placed 0-60 in the valid list
"""
return
self
.
getvalidCharList
(
random
.
randint
(
0
,
60
))
return
self
.
getvalidCharList
(
random
.
randint
(
0
,
60
))
def
scrambleString
(
self
,
s
):
"""
...
...
@@ -124,13 +124,13 @@ class NXKeyGen:
l
=
k
+
len
(
sRet
)
-
2
sRet
=
app
+
sRet
for
i1
in
range
(
1
,
len
(
sRet
)):
app2
=
sRet
[
i1
:
i1
+
1
]
app2
=
sRet
[
i1
:
i1
+
1
]
j
=
self
.
findCharInList
(
app2
)
if
j
==
-
1
:
return
sRet
i
=
(
j
+
l
*
(
i1
+
1
))
%
self
.
numValidCharList
car
=
self
.
getvalidCharList
(
i
)
sRet
=
self
.
substr_replace
(
sRet
,
car
,
i1
,
1
)
sRet
=
self
.
substr_replace
(
sRet
,
car
,
i1
,
1
)
c
=
(
ord
(
self
.
getRandomValidCharFromList
()))
+
2
c2
=
chr
(
c
)
sRet
=
sRet
+
c2
...
...
@@ -141,8 +141,8 @@ class NXKeyGen:
Replace a character at a special position
"""
clist
=
list
(
in_str
)
count
=
0
;
tmp_str
=
''
;
count
=
0
tmp_str
=
''
for
key
in
clist
:
if
count
!=
pos
:
tmp_str
+=
key
...
...
@@ -156,4 +156,3 @@ if __name__ == "__main__":
NXPass
=
NXKeyGen
(
sys
.
argv
[
1
])
print
NXPass
.
password
print
NXPass
.
getEncrypted
()
src/python/pywin_installer.py
View file @
35d1570e
src/python/win_install.py
View file @
35d1570e
...
...
@@ -13,11 +13,9 @@ import shutil
from
win32com.shell
import
shell
,
shellcon
import
windowsclasses
try
:
from
collections
import
*
from
collections
import
*
# noqa
except
ImportError
:
from
OrderedDict
import
*
from
OrderedDict
import
*
# noqa
def
parse_arguments
():
"""
...
...
@@ -35,13 +33,13 @@ def parse_arguments():
'iexplore'
,
'opera'
])
if
windowsclasses
.
DecideArchitecture
.
Is64Windows
():
local_default
=
(
windowsclasses
.
DecideArchitecture
.
GetProgramFiles64
()
+
"
\\
CIRCLE
\\
"
)
+
"
\\
CIRCLE
\\
"
)
else
:
local_default
=
(
windowsclasses
.
DecideArchitecture
.
GetProgramFiles32
()
+
"
\\
CIRCLE
\\
"
)
if
(
not
os
.
path
.
exists
(
local_default
[:
-
1
])
and
os
.
path
.
exists
(
os
.
environ
[
'APPDATA'
]
+
"
\\
CIRCLE"
)):
local_default
=
os
.
environ
[
'APPDATA'
]
+
"
\\
CIRCLE
\\
"
+
"
\\
CIRCLE
\\
"
)
if
(
not
os
.
path
.
exists
(
local_default
[:
-
1
])
and
os
.
path
.
exists
(
os
.
environ
[
'APPDATA'
]
+
"
\\
CIRCLE"
)):
local_default
=
os
.
environ
[
'APPDATA'
]
+
"
\\
CIRCLE
\\
"
parser
.
add_argument
(
"-l"
,
"--location"
,
help
=
"Location of the client files in the system"
,
default
=
local_default
,
required
=
False
)
...
...
@@ -60,6 +58,7 @@ def parse_arguments():
args
=
parser
.
parse_args
()
return
args
def
custom_protocol_register
(
custom_protocol
):
"""
Custom protocol register based on RegistryHandler module
...
...
@@ -92,13 +91,13 @@ def main():
"""
try
:
args
=
parse_arguments
()
shortcut
=
pythoncom
.
CoCreateInstance
(
shortcut
=
pythoncom
.
CoCreateInstance
(
shell
.
CLSID_ShellLink
,
None
,
pythoncom
.
CLSCTX_INPROC_SERVER
,
shell
.
IID_IShellLink
)
desktop_path
=
shell
.
SHGetFolderPath
(
desktop_path
=
shell
.
SHGetFolderPath
(
0
,
shellcon
.
CSIDL_DESKTOP
,
0
,
0
)
if
args
.
remove
:
location
=
os
.
path
.
join
(
desktop_path
,
"Cloud GUI"
)
...
...
@@ -117,15 +116,15 @@ def main():
shortcut
.
write
(
'URL='
+
args
.
target
)
shortcut
.
close
()
else
:
shortcut
.
SetPath
(
args
.
location
+
"cloud.py"
)
shortcut
.
SetPath
(
args
.
location
+
"cloud.py"
)
if
args
.
driver
==
"chrome"
:
shortcut
.
SetArguments
(
"-d chrome"
)
elif
args
.
driver
==
"iexplore"
:
shortcut
.
SetArguments
(
"-d ie"
)
elif
args
.
driver
==
"opera"
:
shortcut
.
SetArguments
(
"-d opera"
)
shortcut
.
SetDescription
(
"Tool to use CIRCLE Cloud"
)
shortcut
.
SetIconLocation
(
args
.
location
+
"cloud.ico"
,
0
)
shortcut
.
SetDescription
(
"Tool to use CIRCLE Cloud"
)
shortcut
.
SetIconLocation
(
args
.
location
+
"cloud.ico"
,
0
)
desktop_path
=
shell
.
SHGetFolderPath
(
0
,
shellcon
.
CSIDL_DESKTOP
,
0
,
0
)
persist_file
=
shortcut
.
QueryInterface
(
...
...
@@ -137,28 +136,37 @@ def main():
print
"Creating custom URL protocol handlers"
try
:
custom_ssh
=
OrderedDict
(
[(
'ssh'
,
[
"default"
,
"URL:ssh Protocol"
,
"URL Protocol"
,
""
]),
[(
'ssh'
,
[
"default"
,
"URL:ssh Protocol"
,
"URL Protocol"
,
""
]),
(
'ssh
\\
URL Protocol'
,
""
),
(
'ssh
\\
DefaultIcon'
,
args
.
location
+
"cloud.ico"
),
(
'ssh
\\
shell'
,
{
'open'
:
{
'command'
:
"
\"
python
.exe
\"
\"
%
s"
%
args
.
location
+
"cloud.py
\"
\"
%1
\"
"
}})])
'command'
:
"
\"
python
w.exe
\"
\"
%
s"
%
args
.
location
+
"cloud.py
\"
\"
%1
\"
"
}})])
custom_protocol_register
(
custom_ssh
)
custom_rdp
=
OrderedDict
(
[(
'rdp'
,
[
"default"
,
"URL:rdp Protocol"
,
"URL Protocol"
,
""
]),
[(
'rdp'
,
[
"default"
,
"URL:rdp Protocol"
,
"URL Protocol"
,
""
]),
(
'rdp
\\
URL Protocol'
,
""
),
(
'rdp
\\
DefaultIcon'
,
args
.
location
+
"cloud.ico"
),
(
'rdp
\\
DefaultIcon'
,
args
.
location
+
"cloud.ico"
),
(
'rdp
\\
shell'
,
{
'open'
:
{
'command'
:
"
\"
python
.exe
\"
\"
%
s"
%
args
.
location
+
"cloud.py
\"
\"
%1
\"
"
}})])
'command'
:
"
\"
python
w.exe
\"
\"
%
s"
%
args
.
location
+
"cloud.py
\"
\"
%1
\"
"
}})])
custom_protocol_register
(
custom_rdp
)
custom_nx
=
OrderedDict
(
[(
'nx'
,
[
"default"
,
"URL:nx Protocol"
,
"URL Protocol"
,
""
]),
[(
'nx'
,
[
"default"
,
"URL:nx Protocol"
,
"URL Protocol"
,
""
]),
(
'nx
\\
URL Protocol'
,
""
),
(
'nx
\\
DefaultIcon'
,
args
.
location
+
"cloud.ico"
),
(
'nx
\\
DefaultIcon'
,
args
.
location
+
"cloud.ico"
),
(
'nx
\\
shell'
,
{
'open'
:
{
'command'
:
"
\"
python
.exe
\"
\"
%
s"
%
args
.
location
+
"cloud.py
\"
\"
%1
\"
"
}})])
'command'
:
"
\"
python
w.exe
\"
\"
%
s"
%
args
.
location
+
"cloud.py
\"
\"
%1
\"
"
}})])
custom_protocol_register
(
custom_nx
)
except
:
print
"Error! URL Protocol handler installation aborted!"
...
...
src/python/windowsclasses.py
View file @
35d1570e
...
...
@@ -11,11 +11,12 @@ Currently here:
import
os
import
argparse
import
errno
from
_winreg
import
*
from
_winreg
import
*
# noqa
try
:
from
collections
import
*
from
collections
import
*
# noqa
except
ImporError
:
from
OrderedDict
import
*
from
OrderedDict
import
*
# noqa
def
parse_arguments
():
"""
...
...
@@ -41,9 +42,11 @@ def parse_arguments():
args
=
parser
.
parse_args
()
return
args
def
main
():
return
RegistryHandler
(
parse_arguments
())
class
Struct
:
"""
Parameter bypassing struct
...
...
@@ -59,7 +62,7 @@ class RegistryHandler:
differently (default)
"""
def
__init__
(
self
,
args
=
None
):
def
__init__
(
self
,
args
=
None
):
"""Initialise RegistryHandler
Keyword arguments:
...
...
@@ -96,7 +99,7 @@ class RegistryHandler:
elif
self
.
args
.
registry
==
"HKCC"
:
self
.
args
.
registry
=
HKEY_CURRENT_CONFIG
else
:
#print "Non supported registry type"
#
print "Non supported registry type"
raise
AttributeError
def
connect_registry
(
self
):
...
...
@@ -107,11 +110,11 @@ class RegistryHandler:
@return connected_registy -- Reference to the newly opened
registry
"""
return
ConnectRegistry
(
None
,
self
.
args
.
registry
)
return
ConnectRegistry
(
None
,
self
.
args
.
registry
)
def
create_registry_from_dict_chain
(
self
,
dict_chain
,
both
=
False
,
architect
=
KEY_WOW64_64KEY
,
needed_rights
=
KEY_ALL_ACCESS
):
self
,
dict_chain
,
both
=
False
,
architect
=
KEY_WOW64_64KEY
,
needed_rights
=
KEY_ALL_ACCESS
):
""""
Create registry key and value multilevel tree by chained
dictionaries.
...
...
@@ -208,8 +211,8 @@ class RegistryHandler:
return
[
key
,
architect
]
def
get_key_values
(
self
,
key_name
,
subkey_list
,
subroutine
=
False
,
depth
=
"subkeys"
):
self
,
key_name
,
subkey_list
,
subroutine
=
False
,
depth
=
"subkeys"
):
"""
Getting registry subkeys value by it's key's name and subkeys
name
...
...
@@ -243,9 +246,9 @@ class RegistryHandler:
key
=
key_and_architect
[
0
]
architect
=
key_and_architect
[
1
]
except
KeyError
:
#print "%s doesn't exist in the registry" % key_name
#
print "%s doesn't exist in the registry" % key_name
raise
LookupError
#print "%s found in the registry" % key_name
#
print "%s found in the registry" % key_name
results
=
{}
if
int_depth
>=
1
:
for
i
in
xrange
(
0
,
QueryInfoKey
(
key
)[
0
]
-
1
):
...
...
@@ -261,7 +264,7 @@ class RegistryHandler:
skey
,
subkey_name
)[
0
]
except
OSError
as
e
:
if
e
.
errno
==
errno
.
ENOENT
:
#print ("%s doesn't exist in this" % subkey_name
#
print ("%s doesn't exist in this" % subkey_name
# " subkey")
pass
skey
.
Close
()
...
...
@@ -273,12 +276,12 @@ class RegistryHandler:
pass
key
.
Close
()
if
len
(
results
)
!=
len
(
subkey_list
):
#print "We are missing important variables"
#
print "We are missing important variables"
raise
LookupError
return
results
def
get_key_value
(
self
,
key_name
,
subkey_name
,
subroutine
=
None
,
depth
=
None
):
self
,
key_name
,
subkey_name
,
subroutine
=
None
,
depth
=
None
):
"""
This is a wrapper for the get_key_values to be easier to use
for single subkeys.
...
...
@@ -296,14 +299,14 @@ class RegistryHandler:
"""
try
:
if
subroutine
is
None
:
return
self
.
get_key_values
(
key_name
,
[
subkey_name
])[
subkey_name
]
return
self
.
get_key_values
(
key_name
,
[
subkey_name
])[
subkey_name
]
elif
depth
is
None
:
return
self
.
get_key_values
(
key_name
,
[
subkey_name
],
subroutine
)[
subkey_name
]
return
self
.
get_key_values
(
key_name
,
[
subkey_name
],
subroutine
)[
subkey_name
]
else
:
return
self
.
get_key_values
(
key_name
,
[
subkey_name
],
subroutine
,
depth
)[
subkey_name
]
return
self
.
get_key_values
(
key_name
,
[
subkey_name
],
subroutine
,
depth
)[
subkey_name
]
except
:
raise
...
...
@@ -313,15 +316,18 @@ class DecideArchitecture:
Helper class to get the true ProgramFiles directory.
This class doesn't depend on Phyton or Windows architecture.
"""
@staticmethod
def
Is64Windows
():
return
'PROGRAMFILES(X86)'
in
os
.
environ
@staticmethod
def
GetProgramFiles32
():
if
DecideArchitecture
.
Is64Windows
():
return
os
.
environ
[
'PROGRAMFILES(X86)'
]
else
:
return
os
.
environ
[
'PROGRAMFILES'
]
@staticmethod
def
GetProgramFiles64
():
if
DecideArchitecture
.
Is64Windows
():
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment