Skip to content
This repository was archived by the owner on May 25, 2020. It is now read-only.
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 36 additions & 21 deletions confluence.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)


class ConfluenceSpace(object):
def __init__(self, token, server):
self.server = server
Expand Down Expand Up @@ -72,6 +73,7 @@ def add(self):
def remove(self):
self.server.confluence2.removeGroup(self.token,self.groupname,"confluence-users")


class ConfluenceUser(object):
def __init__(self,token,server,username):
self.server = server
Expand Down Expand Up @@ -106,15 +108,17 @@ def add_to_group(self,group):

def remove_from_group(self,group):
self.group = group
self.server.confluence2.removeUserFromGroup(self.token,self.username,self.group)
self.server.confluence2.removeUserFromGroup(self.token,self.username,self.group)

def change_password(self,password):
self.password = password
self.server.confluence2.changeUserPassword(self.token,self.username,self.password)
self.server.confluence2.changeUserPassword(self.token,self.username,self.password)

def get_all(self):
return self.server.confluence2.getActiveUsers(self.token, True)



class ConfluencePage(object):
def __init__(self,token,server,name,spaceKey,content,page_id="",label=""):
self.server = server
Expand All @@ -131,7 +135,7 @@ def __init__(self,token,server,name,spaceKey,content,page_id="",label=""):
def add(self,parent_id=0,content=""):
self.logger.debug("Add page '{}'; label = [{}]".format(self.name, self.label))
if content:
self.content = content
self.content = content
self.parent_id = parent_id
self.newPost = {"title":self.name,"content":self.content,"space":self.spaceKey,"parentId":str(self.parent_id)}
self.post_to_wiki = self.server.confluence2.storePage(self.token,self.newPost)
Expand All @@ -143,9 +147,17 @@ def add(self,parent_id=0,content=""):
return {"url": self.page_url, "id": self.page_id}

def update(self,content,parent_id=0):
self.remove()
if content:
self.content = content
self.parent_id = parent_id
self.add(str(parent_id),content)
self.created_page = self.server.confluence2.getPage(self.token, self.spaceKey, self.name)
self.created_page["content"] = self.content
self.post_to_wiki = self.server.confluence2.storePage(self.token,self.created_page)
self.page_url = self.created_page["url"]
self.page_id = self.created_page["id"]
if self.label:
self.set_label()
return {"url": self.page_url, "id": self.page_id}

def get(self):
self.wanted_page = self.server.confluence2.getPage(self.token, self.spaceKey, self.name)
Expand Down Expand Up @@ -197,14 +209,15 @@ def error_out(error_message):
print(error_message)
exit()


def Parser():
parser = argparse.ArgumentParser(description="Confluence wiki API")
parser.add_argument("-w", "--wikiurl", help="Wiki URL (only FQDN, no / and such)", required=True)
parser.add_argument("-u", "--username", help="Login Username", required=True)
parser.add_argument("-p", "--password", help="Login Password", required=True)
parser.add_argument("-v", "--verbose", help="Enable debug logging", action="store_true")
subparsers = parser.add_subparsers(dest="action")

parser_addpage = subparsers.add_parser('addpage', help='Add a page')
parser_addpage.add_argument("-n", "--name", help="(New) page name", required=True)
parser_addpage.add_argument("-P", "--parentpage", help="Parent page ID", default="0")
Expand Down Expand Up @@ -290,7 +303,7 @@ def Parser():

parser_listusergroups = subparsers.add_parser('listusergroups', help='List groups user is in')
parser_listusergroups.add_argument("-U", "--newusername", help="Username to perform action on.", required=True)

args = parser.parse_args()
return args

Expand Down Expand Up @@ -318,7 +331,9 @@ def Connect(args):
error_out("%d: %s" % ( err.faultCode, err.faultString))
return {"token":token,"xml_server":xml_server}


def Actions(token,xml_server,args,content):

try:
if args.action == "addpage":
logger.debug('Command: "addpage", args.name = "{}", args.label = "{}"'.format(
Expand All @@ -327,13 +342,13 @@ def Actions(token,xml_server,args,content):
token,xml_server,args.name,args.spacekey,content,label=args.label)
new_page.add(args.parentpage)
print(new_page.get()["url"])

elif args.action == "updatepage":
update_page = ConfluencePage(token,xml_server,args.name,args.spacekey,content,args.parentpage,label=args.label)
update_page.update(content,args.parentpage)
update_page.set_label()
print(update_page.get()['url'])

elif args.action == "getpagecontent":
get_page = ConfluencePage(token,xml_server,args.name,args.spacekey,content).get_content()
print(get_page)
Expand All @@ -353,22 +368,22 @@ def Actions(token,xml_server,args,content):
for page in all_pages:
print args.delimiter.join((
page['id'], page['space'], page['parentId'], page['title'], page['url']))

elif args.action == "removepage":
removed_page = ConfluencePage(token,xml_server,args.name,args.spacekey,"").remove()

elif args.action == "addspace":
add_space = ConfluenceSpace(token,xml_server).create(args.spacekey,args.name)

elif args.action == "removespace":
remove_space = ConfluenceSpace(token,xml_server).remove(args.spacekey)

elif args.action == "listspaces":
all_spaces = ConfluenceSpace(token,xml_server).get_all()
for space in all_spaces:
print(("%s, %s, %s") % (
space['key'], space['name'], space['url']))

elif args.action == "getallpages":
all_spaces = ConfluenceSpace(token,xml_server).get_all()
for space in all_spaces:
Expand All @@ -390,19 +405,19 @@ def Actions(token,xml_server,args,content):

elif args.action == "adduser":
add_user = ConfluenceUser(token,xml_server,args.newusername).create(args.fullname,args.email,args.userpassword)

elif args.action == "removeuser":
remove_user = ConfluenceUser(token,xml_server,args.newusername).remove()

elif args.action == "deactivateuser":
deactivate_user = ConfluenceUser(token,xml_server,args.newusername).deactivate()

elif args.action == "reactivateuser":
reactivate_user = ConfluenceUser(token,xml_server,args.newusername).reactivate()

elif args.action == "changeuserpassword":
change_pass = ConfluenceUser(token,xml_server,args.newusername).change_password(args.userpassword)

elif args.action == "listuserinfo":
user_info = ConfluenceUser(token,xml_server,args.newusername).get_info()
for key,value in user_info.items():
Expand Down Expand Up @@ -438,6 +453,7 @@ def Actions(token,xml_server,args,content):
except xmlrpclib.Fault as err:
print(("Error: %d: %s") % (err.faultCode, err.faultString))


def main():
args = Parser()

Expand All @@ -448,5 +464,4 @@ def main():
server = Connect(args)
Actions(server["token"],server["xml_server"],args,content)

if __name__ == '__main__':
main()
main()