Skip to content

Commit 71daa4e

Browse files
authored
Merge branch 'master' into crypto
2 parents 1e821e6 + 76c466c commit 71daa4e

File tree

8 files changed

+286
-17
lines changed

8 files changed

+286
-17
lines changed

Diff for: .github/workflows/android.yml

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
on: [push, pull_request]
2+
name: Android
3+
jobs:
4+
Integration:
5+
strategy:
6+
matrix:
7+
os:
8+
- 'ubuntu-latest'
9+
runs-on: ${{ matrix.os }}
10+
steps:
11+
- name: Setup python
12+
uses: actions/setup-python@v2
13+
with:
14+
python-version: 3.8
15+
- uses: actions/checkout@v2
16+
- uses: actions/cache@v2
17+
with:
18+
path: |
19+
~/.buildozer
20+
.buildozer
21+
key: ${{ hashFiles('buildozer.spec') }}
22+
23+
- name: Setup environment
24+
run: |
25+
pip install buildozer
26+
pip install Cython
27+
- run: buildozer --help
28+
- name: SDK, NDK and p4a download
29+
run: |
30+
sed -i.bak "s/# android.accept_sdk_license = False/android.accept_sdk_license = True/" buildozer.spec
31+
buildozer android p4a -- --help
32+
- name: Install Linux dependencies
33+
if: matrix.os == 'ubuntu-latest'
34+
run: sudo apt -y install automake
35+
- name: buildozer android debug
36+
run: |
37+
touch main.py
38+
buildozer android debug
39+
- uses: actions/upload-artifact@v2
40+
with:
41+
path: bin/*.apk
42+

Diff for: .gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.buildozer
2+
bin

Diff for: buildozer.spec

+8-4
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,21 @@ version.regex = __version__ = '(.*)'
1818
version.filename = %(source.dir)s/main.py
1919

2020
# requirements of the app
21-
requirements = hostpython2,android,cryptography,pyasn1,pyjnius,pycrypto,twisted,kivy,docutils,pygments,cffi
21+
requirements = android,cryptography,pyasn1,pyjnius,bcrypt,pycrypto,attrs,twisted,kivy,docutils,pygments,cffi
2222

2323
# android specific
24-
android.permissions = INTERNET, WAKE_LOCK, CAMERA, VIBRATE, ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION, SEND_SMS, CALL_PRIVILEGED, CALL_PHONE
24+
android.permissions = INTERNET, WAKE_LOCK, CAMERA, VIBRATE, ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION, SEND_SMS, CALL_PRIVILEGED, CALL_PHONE, BLUETOOTH
2525

2626
#android.sdk=21
2727

2828
#android.api=22
29-
29+
android.accept_sdk_license=True
3030
android.wakelock=True
31-
#orientation=all
31+
orientation=portrait
32+
fullscreen=True
33+
p4a.branch = develop
34+
35+
#presplash.filename=
3236

3337
# (str) Android logcat filters to use
3438
android.logcat_filters = *:S python:D

Diff for: main.py

+90-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
__version__ = '0.1'
1+
__version__ = '0.2'
22

33
# install_twisted_rector must be called before importing and using the reactor
44
from kivy.support import install_twisted_reactor
@@ -10,6 +10,7 @@
1010
from twisted.internet import reactor
1111
from twisted.cred import portal, checkers
1212
from twisted.conch import manhole, manhole_ssh
13+
from twisted.conch.ssh import keys
1314
from kivy.lang import Builder
1415
from kivy.uix.floatlayout import FloatLayout
1516
from kivy.properties import StringProperty
@@ -19,16 +20,97 @@
1920
from kivy.uix.screenmanager import Screen
2021
app = None
2122

23+
#+---[RSA 3072]----+
24+
#|E .o o=.o.=.. |
25+
#|o...=**=o= = |
26+
#|o.o.+*++= + . . |
27+
#|o+ . ....+ . o +.|
28+
#| o ..S. . . +|
29+
#| o .. |
30+
#| . . |
31+
#| . . |
32+
#| .. |
33+
#+----[SHA256]-----+
34+
private_rsa="""-----BEGIN OPENSSH PRIVATE KEY-----
35+
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
71+
-----END OPENSSH PRIVATE KEY-----
72+
"""
2273

23-
def getManholeFactory(namespace, **passwords):
74+
public_rsa="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCu2YF61scgIo8RABiwTvhZLmb0k2cdWaSKMn6yGdVbpAYtwbqZ6i9ZxOISrROLz+vtiPmg2DuCF42MoRyTlAlAkQs0iJVBDyIwM5mvACDCkvEqdCJhb5fgSgiqSVE9C+eDdIv24nZHPlD1OLfncivUIEPkn0SmwhSRjQt+IBeMB0yAzM4waci96m364SdJBHQ6YxjF2lFVMtWfqYFu80JZeklM+bmSwGAZ+QvLIt0sg4hcGci4voWu1EIf2SFbbxzHyjFyyzPl4Q4QRjZZXoJG5P6GmKdME9DPOpANtyRN80ZWpQs+VzjR4X1LBref1isolEvfY/1srfVlQZZYm7PLpdJnQP9Z2tkQb4NPMd7hB7yWLY5/sMrR1Fi8+PnrhAlYtG9AjOlSCMD/CRsCMmrWTILNlJ3ZZjFDPXvlQ1nNPuwdFcYeriSHs6hrnuj15tl/TESt6nXvyU6Dgwhys6UrkBmncclXweR8VDk/RQtVQA1zXnSmMKQ1fQCcbNYqTQM="
75+
76+
class PythonManhole(manhole.ColoredManhole):
77+
def __init__(self):
78+
glob = {
79+
'__name__':'__main__',
80+
'__doc__':None,
81+
'__package__':None,
82+
'__spec__':None,
83+
'__annotations__':{},
84+
'__builtins__':__builtins__
85+
}
86+
87+
super().__init__(glob)
88+
89+
def makeConnection(self, cxt):
90+
self.transport = cxt.transport
91+
return super().makeConnection(cxt)
92+
93+
def lineReceived(self, *args):
94+
# Catch exit()
95+
try:
96+
return super().lineReceived(*args)
97+
except SystemExit:
98+
self.transport.loseConnection()
99+
100+
101+
def getManholeFactory(**users):
102+
# Create a terminal
24103
realm = manhole_ssh.TerminalRealm()
25-
def getManhole(_):
26-
return manhole.ColoredManhole(namespace)
27-
realm.chainedProtocolFactory.protocolFactory = getManhole
104+
realm.chainedProtocolFactory.protocolFactory = PythonManhole
105+
users = {key: value.encode() for key, value in users.items()}
28106
p = portal.Portal(realm)
29107
p.registerChecker(
30-
checkers.InMemoryUsernamePasswordDatabaseDontUse(**passwords))
108+
checkers.InMemoryUsernamePasswordDatabaseDontUse(**users))
109+
110+
# Create a factory
31111
f = manhole_ssh.ConchFactory(p)
112+
f.publicKeys[b'ssh-rsa'] = keys.Key.fromString(public_rsa)
113+
f.privateKeys[b'ssh-rsa'] = keys.Key.fromString(private_rsa)
32114
return f
33115

34116

@@ -55,7 +137,7 @@ def get_interface_ip(self, ifname):
55137
return socket.inet_ntoa(fcntl.ioctl(
56138
s.fileno(),
57139
0x8915, # SIOCGIFADDR
58-
struct.pack('256s', ifname[:15])
140+
struct.pack('256s', ifname[:15].encode('utf-8'))
59141
)[20:24])
60142

61143

@@ -64,7 +146,7 @@ def build(self):
64146
global app
65147
app = self
66148
self.connection = reactor.listenTCP(8000,
67-
getManholeFactory(globals(), admin='kivy'))
149+
getManholeFactory(admin='kivy'))
68150

69151
def on_pause(self):
70152
return True

Diff for: plyer_command_list.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ Example::
160160

161161
from plyer import accelerometer
162162
accelerometer.enable()
163-
accelerator.acceleration
163+
accelerometer.acceleration
164164

165165
Battery
166166
--------

Diff for: remotekivy.kv

+2-2
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ NavigationDrawer
6969
id: manager
7070
MainScreen
7171
name: 'remote'
72-
CommandScreen
73-
name: 'plyer'
72+
# CommandScreen
73+
# name: 'plyer'
7474
ShellScreen
7575
name: 'console'
7676

Diff for: requirements.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ Kivy-Garden==0.1.4
44
pyasn1==0.1.9
55
pycrypto==2.6.1
66
requests==2.11.1
7-
Twisted==15.4.0
8-
zope.interface==4.3.2
7+
Twisted==20.3.0
8+
#zope.interface==4.3.2

Diff for: test.py

+139
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
__version__ = '0.2'
2+
3+
import socket
4+
import fcntl
5+
import struct
6+
from twisted.internet import reactor
7+
from twisted.cred import portal, checkers
8+
from twisted.conch import manhole, manhole_ssh
9+
from twisted.conch.ssh import keys
10+
from twisted.conch.insults import insults
11+
12+
app = None
13+
14+
#+---[RSA 3072]----+
15+
#|E .o o=.o.=.. |
16+
#|o...=**=o= = |
17+
#|o.o.+*++= + . . |
18+
#|o+ . ....+ . o +.|
19+
#| o ..S. . . +|
20+
#| o .. |
21+
#| . . |
22+
#| . . |
23+
#| .. |
24+
#+----[SHA256]-----+
25+
private_rsa="""-----BEGIN OPENSSH PRIVATE KEY-----
26+
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
62+
-----END OPENSSH PRIVATE KEY-----
63+
"""
64+
65+
public_rsa="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCu2YF61scgIo8RABiwTvhZLmb0k2cdWaSKMn6yGdVbpAYtwbqZ6i9ZxOISrROLz+vtiPmg2DuCF42MoRyTlAlAkQs0iJVBDyIwM5mvACDCkvEqdCJhb5fgSgiqSVE9C+eDdIv24nZHPlD1OLfncivUIEPkn0SmwhSRjQt+IBeMB0yAzM4waci96m364SdJBHQ6YxjF2lFVMtWfqYFu80JZeklM+bmSwGAZ+QvLIt0sg4hcGci4voWu1EIf2SFbbxzHyjFyyzPl4Q4QRjZZXoJG5P6GmKdME9DPOpANtyRN80ZWpQs+VzjR4X1LBref1isolEvfY/1srfVlQZZYm7PLpdJnQP9Z2tkQb4NPMd7hB7yWLY5/sMrR1Fi8+PnrhAlYtG9AjOlSCMD/CRsCMmrWTILNlJ3ZZjFDPXvlQ1nNPuwdFcYeriSHs6hrnuj15tl/TESt6nXvyU6Dgwhys6UrkBmncclXweR8VDk/RQtVQA1zXnSmMKQ1fQCcbNYqTQM="
66+
67+
class PythonManhole(manhole.ColoredManhole):
68+
def __init__(self):
69+
glob = {
70+
'__name__':'__main__',
71+
'__doc__':None,
72+
'__package__':None,
73+
'__spec__':None,
74+
'__annotations__':{},
75+
'__builtins__':__builtins__
76+
}
77+
78+
super().__init__(glob)
79+
80+
def makeConnection(self, cxt):
81+
self.transport = cxt.transport
82+
return super().makeConnection(cxt)
83+
84+
def lineReceived(self, *args):
85+
# Catch exit()
86+
try:
87+
return super().lineReceived(*args)
88+
except SystemExit:
89+
self.transport.loseConnection()
90+
91+
92+
def getManholeFactory(**users):
93+
# Create a terminal
94+
realm = manhole_ssh.TerminalRealm()
95+
realm.chainedProtocolFactory.protocolFactory = PythonManhole
96+
users = {key: value.encode() for key, value in users.items()}
97+
p = portal.Portal(realm)
98+
p.registerChecker(
99+
checkers.InMemoryUsernamePasswordDatabaseDontUse(**users))
100+
101+
# Create a factory
102+
f = manhole_ssh.ConchFactory(p)
103+
f.publicKeys[b'ssh-rsa'] = keys.Key.fromString(public_rsa)
104+
f.privateKeys[b'ssh-rsa'] = keys.Key.fromString(private_rsa)
105+
return f
106+
107+
108+
#class MainScreen:
109+
#
110+
# def __init__(self, **kwargs):
111+
# ip = socket.gethostbyname(socket.gethostname())
112+
# if ip.startswith('127.'):
113+
# interfaces = ['eth0', 'eth1', 'eth2', 'wlan0', 'wlan1', 'wifi0',
114+
# 'tiwlan0', 'tiwlan1', 'ath0', 'ath1', 'ppp0']
115+
# for ifname in interfaces:
116+
# try:
117+
# ip = self.get_interface_ip(ifname)
118+
# break
119+
# except IOError:
120+
# pass
121+
# self.lan_ip = ip
122+
#
123+
# def get_interface_ip(self, ifname):
124+
# s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
125+
# return socket.inet_ntoa(fcntl.ioctl(
126+
# s.fileno(),
127+
# 0x8915, # SIOCGIFADDR
128+
# struct.pack('256s', ifname[:15].encode('utf-8'))
129+
# )[20:24])
130+
#
131+
#
132+
#
133+
# def on_pause(self):
134+
# return True
135+
136+
if __name__ == '__main__':
137+
# Define the local variables
138+
connection = reactor.listenTCP(8001, getManholeFactory(admin='kivy'))
139+
reactor.run()

0 commit comments

Comments
 (0)