Create script to create NC app token
This commit is contained in:
parent
c54ea796af
commit
7117042fd0
32
scripts/nc-cal-sync/calendar_synchronizer/__init__.py
Normal file
32
scripts/nc-cal-sync/calendar_synchronizer/__init__.py
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
from . import cli
|
||||||
|
|
||||||
|
from . import login, sync
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
_logMap = {
|
||||||
|
0: logging.WARNING,
|
||||||
|
1: logging.INFO,
|
||||||
|
2: logging.DEBUG
|
||||||
|
}
|
||||||
|
|
||||||
|
_runMap = {
|
||||||
|
'login': login.run,
|
||||||
|
'sync': sync.run,
|
||||||
|
}
|
||||||
|
|
||||||
|
def main():
|
||||||
|
args = cli.getArgs(
|
||||||
|
loginSpCb=login.buildSubparser,
|
||||||
|
syncSpCb=sync.buildSubparser
|
||||||
|
)
|
||||||
|
logging.basicConfig()
|
||||||
|
_l = logging.getLogger(__name__)
|
||||||
|
_l.setLevel(_logMap.get(args.verbose, logging.DEBUG))
|
||||||
|
|
||||||
|
_l.debug('Parameters %s', args)
|
||||||
|
if args.mode in _runMap:
|
||||||
|
_runMap[args.mode](args)
|
||||||
|
else:
|
||||||
|
_l.error('Unknown mode %s', args.mode)
|
||||||
|
|
3
scripts/nc-cal-sync/calendar_synchronizer/__main__.py
Normal file
3
scripts/nc-cal-sync/calendar_synchronizer/__main__.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
import calendar_synchronizer
|
||||||
|
|
||||||
|
calendar_synchronizer.main()
|
16
scripts/nc-cal-sync/calendar_synchronizer/cli.py
Normal file
16
scripts/nc-cal-sync/calendar_synchronizer/cli.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import argparse
|
||||||
|
|
||||||
|
def getArgs(loginSpCb, syncSpCb):
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('-v', '--verbose', action='count', default=0, help='Increase the verbosity')
|
||||||
|
|
||||||
|
subparsers = parser.add_subparsers(dest='mode')
|
||||||
|
|
||||||
|
loginSubparser = subparsers.add_parser('login')
|
||||||
|
loginSpCb(loginSubparser)
|
||||||
|
|
||||||
|
syncSubparser = subparsers.add_parser('sync')
|
||||||
|
syncSpCb(syncSubparser)
|
||||||
|
|
||||||
|
# parser.add_argument("url", help="The URL to try and cache")
|
||||||
|
return parser.parse_args()
|
61
scripts/nc-cal-sync/calendar_synchronizer/login.py
Normal file
61
scripts/nc-cal-sync/calendar_synchronizer/login.py
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
import os
|
||||||
|
import requests
|
||||||
|
import logging
|
||||||
|
import json
|
||||||
|
|
||||||
|
def buildSubparser(subparser):
|
||||||
|
subparser.add_argument('--url', default='https://cloud.tsc-vfl.de')
|
||||||
|
|
||||||
|
def run(args):
|
||||||
|
l = logging.getLogger(__name__)
|
||||||
|
l.debug('Login to %s', args.url)
|
||||||
|
|
||||||
|
url = f'{args.url}/index.php/login/v2'
|
||||||
|
l.debug('Using login url %s', url)
|
||||||
|
|
||||||
|
startRequest = requests.post(url)
|
||||||
|
startRequest.raise_for_status()
|
||||||
|
|
||||||
|
data = startRequest.json()
|
||||||
|
|
||||||
|
print('You need to login in the browser now to validate the login token.')
|
||||||
|
print('Please visit the following url:')
|
||||||
|
print(data['login'])
|
||||||
|
print()
|
||||||
|
print('After you have logged in, press enter to continue.')
|
||||||
|
|
||||||
|
input()
|
||||||
|
|
||||||
|
l.debug('Logging in')
|
||||||
|
intermediateToken = data['poll']['token']
|
||||||
|
pollUrl = data['poll']['endpoint']
|
||||||
|
|
||||||
|
loginRequest = requests.post(pollUrl, data={'token': intermediateToken})
|
||||||
|
loginRequest.raise_for_status()
|
||||||
|
|
||||||
|
data = loginRequest.json()
|
||||||
|
|
||||||
|
loginName = data['loginName']
|
||||||
|
appPassword = data['appPassword']
|
||||||
|
data = {
|
||||||
|
'loginName': loginName,
|
||||||
|
'appPassword': appPassword,
|
||||||
|
'base': data['server']
|
||||||
|
}
|
||||||
|
|
||||||
|
with open('login.json', 'w') as f:
|
||||||
|
json.dump(data, f)
|
||||||
|
|
||||||
|
l.info('Login successful')
|
||||||
|
|
||||||
|
class LoginData:
|
||||||
|
def __init__(self, loginName, appPassword):
|
||||||
|
self.loginName = loginName
|
||||||
|
self.appPassword = appPassword
|
||||||
|
|
||||||
|
def loadLoginData():
|
||||||
|
with open('login.json', 'r') as f:
|
||||||
|
data = json.load(f)
|
||||||
|
|
||||||
|
return LoginData(data['loginName'], data['appPassword'])
|
||||||
|
|
22
scripts/nc-cal-sync/calendar_synchronizer/sync.py
Normal file
22
scripts/nc-cal-sync/calendar_synchronizer/sync.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import logging, json
|
||||||
|
|
||||||
|
from . import login
|
||||||
|
|
||||||
|
_l = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
def buildSubparser(subparser):
|
||||||
|
subparser.add_argument('--schedule', default='../../data/schedule.json')
|
||||||
|
subparser.add_argument('--holidays', default='../../data/holidays.json')
|
||||||
|
|
||||||
|
def run(args):
|
||||||
|
_l.info('Loading data from hard disc')
|
||||||
|
loginData = login.loadLoginData()
|
||||||
|
|
||||||
|
with open(args.schedule, 'r') as f:
|
||||||
|
schedule = json.load(f)
|
||||||
|
|
||||||
|
with open(args.holidays, 'r') as f:
|
||||||
|
holidays = json.load(f)
|
||||||
|
|
||||||
|
_l.info('Data was read from hard disc')
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user