can parse api key

This commit is contained in:
B.J. Dweck 2021-01-28 12:56:11 +02:00
parent 32799b65d5
commit 3c0eece311
15 changed files with 261 additions and 52 deletions

7
.env Normal file
View File

@ -0,0 +1,7 @@
SYNCTHING_VERSION=latest
PUID=1001
PGID=1001
TZ=Europe/London
SYNC_LISTEN_PORT=22000
SYNC1_LISTEN_PORT=22100
SYNC2_LISTEN_PORT=22101

View File

@ -1,12 +1,10 @@
FROM python:2.7
FROM python:3.9
WORKDIR /app
ADD requirements.txt /app/requirements.txt
RUN pip install -r requirements.txt
ADD app.py /app/app.py
ADD syncthing_monitor /app/syncthing_monitor
EXPOSE 80
CMD ["python", "app.py"]
CMD ["python", "-m", "syncthing_monitor"]

16
app.py
View File

@ -1,16 +0,0 @@
from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host="redis")
@app.route("/")
def hello():
visits = redis.incr('counter')
html = "<h3>Hello World!</h3>" \
"<b>Visits:</b> {visits}" \
"<br/>"
return html.format(visits=visits)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=80)

View File

@ -1,12 +1,66 @@
sut:
build: .
dockerfile: Dockerfile.test
links:
- web
web:
build: .
dockerfile: Dockerfile
links:
- redis
redis:
image: redis
---
version: "2.1"
services:
test:
build: integrationtest
links:
- sync1
- sync2
volumes:
- sync1data:/data1
- sync2data:/data2
sut1:
build: .
links:
- sync1
volumes:
- sync1config:/config:ro
sync1:
image: ghcr.io/linuxserver/syncthing:${SYNCTHING_VERSION}
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- sync1config:/config
- sync1data:/data
ports:
- ${SYNC1_LISTEN_PORT}:22000
sut2:
build: .
links:
- sync2
volumes:
- sync2config:/config:ro
sync2:
image: ghcr.io/linuxserver/syncthing:${SYNCTHING_VERSION}
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- sync2config:/config
- sync2data:/data
ports:
- ${SYNC2_LISTEN_PORT}:22000
etcd:
image: quay.io/coreos/etcd
command: /usr/local/bin/etcd --data-dir=/etcd-data
ports:
- 2379:2379
- 2380:2380
volumes:
- etcd-data:/etcd-data
volumes:
sync1data:
sync1config:
sync2data:
sync2config:
etcd-data:

View File

@ -1,9 +1,29 @@
web:
build: .
dockerfile: Dockerfile
links:
- redis
ports:
- "80:80"
redis:
image: redis
---
version: "2.1"
services:
syncmon:
build: .
links:
- sync
volumes:
- syncconfig:/config
- syncdata:/data
sync:
image: ghcr.io/linuxserver/syncthing:${SYNCTHING_VERSION}
container_name: syncthing
hostname: syncthing
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- syncconfig:/config
- syncdata:/data
ports:
- ${SYNC_LISTEN_PORT}:22000
volumes:
syncconfig:
syncdata:

12
integrationtest/test.sh Normal file
View File

@ -0,0 +1,12 @@
sleep 5
echo "test string" > /sync1/testfile
echo /sync1/testfile
echo /sync2/testfile
#if curl web | grep -q '<b>Visits:</b> '; then
# echo "Tests passed!"
# exit 0
#else
# echo "Tests failed!"
# exit 1
#fi

View File

@ -1,2 +0,0 @@
Flask
Redis

View File

View File

@ -0,0 +1,10 @@
from syncthing_monitor.config_xml import parse_api_key
def loop():
api_key = parse_api_key()
print("Found API Key: {0}".format(api_key))
if __name__ == "__main__":
loop()

View File

@ -0,0 +1,10 @@
from xml.etree import ElementTree as elementTree
def parse_api_key(xml_path='/config/config.xml'):
root = elementTree.parse(xml_path).getroot()
api_key = ''
for gui in root.findall('gui'):
# noinspection SpellCheckingInspection
api_key = gui.find('apikey').text
return api_key

View File

@ -1,8 +0,0 @@
sleep 5
if curl web | grep -q '<b>Visits:</b> '; then
echo "Tests passed!"
exit 0
else
echo "Tests failed!"
exit 1
fi

0
test/__init__.py Normal file
View File

View File

@ -0,0 +1,114 @@
<configuration version="32">
<folder id="data" label="Data" path="/data" type="sendreceive" rescanIntervalS="3600" fsWatcherEnabled="true" fsWatcherDelayS="10" ignorePerms="false" autoNormalize="true">
<filesystemType>basic</filesystemType>
<device id="MKXXCDW-3YWBXU4-PWJZU5P-VFOPIMT-22L7BAY-7GZY4I5-TQMLIYY-JSILEQC" introducedBy="">
<encryptionPassword></encryptionPassword>
</device>
<device id="OSRS6BZ-WRXI67N-55XSQSH-X64E4CL-52D7BGZ-7X2CPEX-OMUZ42H-F52URAI" introducedBy="">
<encryptionPassword></encryptionPassword>
</device>
<minDiskFree unit="%">1</minDiskFree>
<versioning>
<cleanupIntervalS>0</cleanupIntervalS>
</versioning>
<copiers>0</copiers>
<pullerMaxPendingKiB>0</pullerMaxPendingKiB>
<hashers>0</hashers>
<order>random</order>
<ignoreDelete>false</ignoreDelete>
<scanProgressIntervalS>0</scanProgressIntervalS>
<pullerPauseS>0</pullerPauseS>
<maxConflicts>10</maxConflicts>
<disableSparseFiles>false</disableSparseFiles>
<disableTempIndexes>false</disableTempIndexes>
<paused>false</paused>
<weakHashThresholdPct>25</weakHashThresholdPct>
<markerName>.stfolder</markerName>
<copyOwnershipFromParent>false</copyOwnershipFromParent>
<modTimeWindowS>0</modTimeWindowS>
<maxConcurrentWrites>2</maxConcurrentWrites>
<disableFsync>false</disableFsync>
<blockPullOrder>standard</blockPullOrder>
<copyRangeMethod>standard</copyRangeMethod>
<caseSensitiveFS>false</caseSensitiveFS>
<junctionsAsDirs>false</junctionsAsDirs>
</folder>
<device id="MKXXCDW-3YWBXU4-PWJZU5P-VFOPIMT-22L7BAY-7GZY4I5-TQMLIYY-JSILEQC" name="honeydew" compression="metadata" introducer="false" skipIntroductionRemovals="false" introducedBy="">
<address>dynamic</address>
<paused>false</paused>
<allowedNetwork>10.122.122.0/24</allowedNetwork>
<autoAcceptFolders>false</autoAcceptFolders>
<maxSendKbps>0</maxSendKbps>
<maxRecvKbps>0</maxRecvKbps>
<maxRequestKiB>0</maxRequestKiB>
<untrusted>false</untrusted>
<remoteGUIPort>0</remoteGUIPort>
</device>
<device id="OSRS6BZ-WRXI67N-55XSQSH-X64E4CL-52D7BGZ-7X2CPEX-OMUZ42H-F52URAI" name="blackberry" compression="metadata" introducer="false" skipIntroductionRemovals="false" introducedBy="">
<address>tcp://blackberry</address>
<paused>false</paused>
<allowedNetwork>10.122.122.0/24</allowedNetwork>
<autoAcceptFolders>false</autoAcceptFolders>
<maxSendKbps>0</maxSendKbps>
<maxRecvKbps>0</maxRecvKbps>
<maxRequestKiB>0</maxRequestKiB>
<untrusted>false</untrusted>
<remoteGUIPort>0</remoteGUIPort>
</device>
<gui enabled="true" tls="false" debugging="true">
<address>127.0.0.1:8384</address>
<user>syncadmin</user>
<password>$2a$10$.nzDwmF2w9gWfPFWto1wmOOek4RzEF/MlolVyzOLsOCXL733IleVC</password>
<apikey>dFoLNEaqEZFSP62EFVGC2Ds5juuTmvH2</apikey>
<theme>default</theme>
</gui>
<ldap></ldap>
<options>
<listenAddress>default</listenAddress>
<globalAnnounceServer>default</globalAnnounceServer>
<globalAnnounceEnabled>false</globalAnnounceEnabled>
<localAnnounceEnabled>false</localAnnounceEnabled>
<localAnnouncePort>21027</localAnnouncePort>
<localAnnounceMCAddr>[ff12::8384]:21027</localAnnounceMCAddr>
<maxSendKbps>0</maxSendKbps>
<maxRecvKbps>0</maxRecvKbps>
<reconnectionIntervalS>60</reconnectionIntervalS>
<relaysEnabled>false</relaysEnabled>
<relayReconnectIntervalM>10</relayReconnectIntervalM>
<startBrowser>true</startBrowser>
<natEnabled>false</natEnabled>
<natLeaseMinutes>60</natLeaseMinutes>
<natRenewalMinutes>30</natRenewalMinutes>
<natTimeoutSeconds>10</natTimeoutSeconds>
<urAccepted>-1</urAccepted>
<urSeen>3</urSeen>
<urUniqueID></urUniqueID>
<urURL>https://data.syncthing.net/newdata</urURL>
<urPostInsecurely>false</urPostInsecurely>
<urInitialDelayS>1800</urInitialDelayS>
<restartOnWakeup>true</restartOnWakeup>
<autoUpgradeIntervalH>12</autoUpgradeIntervalH>
<upgradeToPreReleases>false</upgradeToPreReleases>
<keepTemporariesH>24</keepTemporariesH>
<cacheIgnoredFiles>false</cacheIgnoredFiles>
<progressUpdateIntervalS>5</progressUpdateIntervalS>
<limitBandwidthInLan>false</limitBandwidthInLan>
<minHomeDiskFree unit="%">1</minHomeDiskFree>
<releasesURL>https://upgrades.syncthing.net/meta.json</releasesURL>
<overwriteRemoteDeviceNamesOnConnect>false</overwriteRemoteDeviceNamesOnConnect>
<tempIndexMinBlocks>10</tempIndexMinBlocks>
<trafficClass>0</trafficClass>
<defaultFolderPath>~</defaultFolderPath>
<setLowPriority>true</setLowPriority>
<maxFolderConcurrency>0</maxFolderConcurrency>
<crashReportingURL>https://crash.syncthing.net/newcrash</crashReportingURL>
<crashReportingEnabled>false</crashReportingEnabled>
<stunKeepaliveStartS>180</stunKeepaliveStartS>
<stunKeepaliveMinS>20</stunKeepaliveMinS>
<stunServer>default</stunServer>
<databaseTuning>auto</databaseTuning>
<maxConcurrentIncomingRequestKiB>0</maxConcurrentIncomingRequestKiB>
<announceLANAddresses>false</announceLANAddresses>
<sendFullIndexOnUpgrade>false</sendFullIndexOnUpgrade>
</options>
</configuration>

10
test/test_config.py Normal file
View File

@ -0,0 +1,10 @@
import unittest
from syncthing_monitor.config_xml import parse_api_key
class ConfigTests(unittest.TestCase):
def test_can_parse_api_key(self):
# noinspection SpellCheckingInspection
self.assertEqual(parse_api_key('test/test-syncthing-config.xml'), "dFoLNEaqEZFSP62EFVGC2Ds5juuTmvH2")