diff --git a/epicyon.py b/epicyon.py index 1a8674a3..0cdff73e 100644 --- a/epicyon.py +++ b/epicyon.py @@ -213,6 +213,8 @@ parser.add_argument('--block', dest='block', type=str,default=None, \ help='Block a particular address') parser.add_argument('--unblock', dest='unblock', type=str,default=None, \ help='Remove a block on a particular address') +parser.add_argument('--delegate', dest='delegate', type=str,default=None, \ + help='Address of an account to delegate a role to') parser.add_argument('--filter', dest='filterStr', type=str,default=None, \ help='Adds a word or phrase which if present will cause a message to be ignored') parser.add_argument('--unfilter', dest='unfilterStr', type=str,default=None, \ @@ -729,23 +731,24 @@ if args.availability: if setAvailability(baseDir,nickname,domain,args.availability): print('Availablity set to '+args.availability) sys.exit() - + if args.project: - if not nickname: - print('No nickname given') - sys.exit() + if not args.delegate: + if not nickname: + print('No nickname given') + sys.exit() - if args.role.lower()=='none' or \ - args.role.lower()=='remove' or \ - args.role.lower()=='delete': - args.role=None - if args.role: - if setRole(baseDir,nickname,domain,args.project,args.role): - print('Role within '+args.project+' set to '+args.role) - else: - if setRole(baseDir,nickname,domain,args.project,None): - print('Left '+args.project) - sys.exit() + if args.role.lower()=='none' or \ + args.role.lower()=='remove' or \ + args.role.lower()=='delete': + args.role=None + if args.role: + if setRole(baseDir,nickname,domain,args.project,args.role): + print('Role within '+args.project+' set to '+args.role) + else: + if setRole(baseDir,nickname,domain,args.project,None): + print('Left '+args.project) + sys.exit() if args.skill: if args.skillLevelPercent==0: @@ -802,6 +805,43 @@ if args.block: time.sleep(1) sys.exit() +if args.delegate: + if not nickname: + print('Specify a nickname with the --nickname option') + sys.exit() + + if not args.password: + print('Specify a password with the --password option') + sys.exit() + + if not args.project: + print('Specify a project with the --project option') + sys.exit() + + if not args.role: + print('Specify a role with the --role option') + sys.exit() + + if '@' in args.delegate: + delegatedNickname=args.delegate.split('@')[0] + args.delegate=blockedActor + + session = createSession(domain,port,useTor) + personCache={} + cachedWebfingers={} + print('Sending delegation for '+args.delegate+' with role '+args.role+' in project '+args.project) + + sendRoleViaServer(session,nickname,args.password, + domain,port, \ + httpPrefix,args.delegate, \ + args.project,args.role, \ + cachedWebfingers,personCache, \ + True) + for i in range(10): + # TODO detect send success/fail + time.sleep(1) + sys.exit() + if args.unblock: if not nickname: print('Specify a nickname with the --nickname option') diff --git a/tests.py b/tests.py index dcee62f9..afb1bef4 100644 --- a/tests.py +++ b/tests.py @@ -999,7 +999,6 @@ def testDelegateRoles(): assert outboxDelegate(baseDir,newRoleJson,False)==False assert '"otherrole"' not in open(baseDir+'/accounts/'+nickname+'@'+domain+'.json').read() - assert False os.chdir(currDir) shutil.rmtree(baseDir)