forked from tsc-vfl/hugo-page
		
	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