Add groups from the commandline

main2
Bob Mottram 2019-10-04 13:39:46 +01:00
parent fa1f51a177
commit 8acb8769b9
3 changed files with 43 additions and 0 deletions

View File

@ -7,6 +7,7 @@ __email__ = "bob@freedombone.net"
__status__ = "Production" __status__ = "Production"
from person import createPerson from person import createPerson
from person import createGroup
from person import createSharedInbox from person import createSharedInbox
from person import createCapabilitiesInbox from person import createCapabilitiesInbox
from person import setDisplayNickname from person import setDisplayNickname
@ -108,6 +109,9 @@ parser.add_argument('--path', dest='baseDir', \
parser.add_argument('-a','--addaccount', dest='addaccount', \ parser.add_argument('-a','--addaccount', dest='addaccount', \
type=str,default=None, \ type=str,default=None, \
help='Adds a new account') help='Adds a new account')
parser.add_argument('-g','--addgroup', dest='addgroup', \
type=str,default=None, \
help='Adds a new group')
parser.add_argument('-r','--rmaccount', dest='rmaccount', \ parser.add_argument('-r','--rmaccount', dest='rmaccount', \
type=str,default=None, \ type=str,default=None, \
help='Remove an account') help='Remove an account')
@ -923,6 +927,34 @@ if args.addaccount:
print('Account creation failed') print('Account creation failed')
sys.exit() sys.exit()
if args.addgroup:
if '@' in args.addgroup:
nickname=args.addgroup.split('@')[0]
domain=args.addgroup.split('@')[1]
else:
nickname=args.addgroup
if not args.domain or not getConfigParam(baseDir,'domain'):
print('Use the --domain option to set the domain name')
sys.exit()
if not validNickname(domain,nickname):
print(nickname+' is a reserved name. Use something different.')
sys.exit()
if not args.password:
print('Use the --password option to set the password for '+nickname)
sys.exit()
if len(args.password.strip())<8:
print('Password should be at least 8 characters')
sys.exit()
if os.path.isdir(baseDir+'/accounts/'+nickname+'@'+domain):
print('Group already exists')
sys.exit()
createGroup(baseDir,nickname,domain,port,httpPrefix,True,args.password.strip())
if os.path.isdir(baseDir+'/accounts/'+nickname+'@'+domain):
print('Group created for '+nickname+'@'+domain)
else:
print('Group creation failed')
sys.exit()
if args.rmaccount: if args.rmaccount:
if '@' in args.rmaccount: if '@' in args.rmaccount:
nickname=args.rmaccount.split('@')[0] nickname=args.rmaccount.split('@')[0]

View File

@ -46,6 +46,7 @@ from blocking import isBlockedDomain
from posts import downloadAnnounce from posts import downloadAnnounce
from posts import isDM from posts import isDM
from posts import isReply from posts import isReply
from posts import sendSignedJson
def validInbox(baseDir: str,nickname: str,domain: str) -> bool: def validInbox(baseDir: str,nickname: str,domain: str) -> bool:
"""Checks whether files were correctly saved to the inbox """Checks whether files were correctly saved to the inbox

View File

@ -318,6 +318,16 @@ def registerAccount(baseDir: str,httpPrefix: str,domain: str,port: int, \
return True return True
return False return False
def createGroup(baseDir: str,nickname: str,domain: str,port: int, \
httpPrefix: str, saveToFile: bool,password=None) -> (str,str,{},{}):
"""Returns a group
"""
privateKeyPem,publicKeyPem,newPerson,webfingerEndpoint= \
createPerson(baseDir,nickname,domain,port, \
httpPrefix,saveToFile,password)
newPerson['type']='Group'
return privateKeyPem,publicKeyPem,newPerson,webfingerEndpoint
def createPerson(baseDir: str,nickname: str,domain: str,port: int, \ def createPerson(baseDir: str,nickname: str,domain: str,port: int, \
httpPrefix: str, saveToFile: bool,password=None) -> (str,str,{},{}): httpPrefix: str, saveToFile: bool,password=None) -> (str,str,{},{}):
"""Returns the private key, public key, actor and webfinger endpoint """Returns the private key, public key, actor and webfinger endpoint