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