Skip to content
Open
Show file tree
Hide file tree
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
59 changes: 59 additions & 0 deletions commands/grpr/addMemberToGroup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#!/usr/bin/env python3

"""
Add to a group a list of users
"""


import os
import requests
from requests.auth import HTTPBasicAuth
import logging
import argparse
import json


logger = logging.getLogger(__name__)

if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbose", action='store_true', help="Turn on verbose logging")
parser.add_argument("--url", help="URL to the grouper web service", default="https://identity.slac.stanford.edu/grouper-ws/servicesRest/v5_17_000/")
parser.add_argument("--stem", help="The stem where we can find the groups ", default="app:Unix:posixGroups:s3df")
parser.add_argument("--user", help="The user id to use", default="osmaint@slac.stanford.edu")
parser.add_argument("--pwdfile", help="File containing the password", default=".pass")
parser.add_argument("groupname", help="The name of the group")
parser.add_argument("usernames", help="The names of the users", nargs="+")
args = parser.parse_args()
logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO)
logging.getLogger("requests.packages.urllib3").setLevel(logging.DEBUG)

with open(args.pwdfile, "r") as f:
auth=HTTPBasicAuth(args.user, f.read())

reqjson = {
"WsRestAddMemberRequest":{
"wsGroupLookup":{
"groupName": args.stem + ":" + args.groupname
},
"subjectLookups": [
]
}
}

for user in args.usernames:
reqjson["WsRestAddMemberRequest"]["subjectLookups"].append({
"subjectId": user
})

logger.debug("Req json %s", json.dumps(reqjson, indent=4))

resp = requests.post(args.url + "groups", auth=auth, json=reqjson)
resp.raise_for_status()
ret = resp.json()
logger.debug(json.dumps(ret, indent=4))

status = ret.get("WsAddMemberResults", {}).get("resultMetadata").get("resultCode",None)
if status != "SUCCESS":
raise Exception("Invalid Status")

62 changes: 62 additions & 0 deletions commands/grpr/createNewGroup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#!/usr/bin/env python3

"""
Create a new group
"""


import os
import requests
from requests.auth import HTTPBasicAuth
import logging
import argparse
import json


logger = logging.getLogger(__name__)

if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbose", action='store_true', help="Turn on verbose logging")
parser.add_argument("--url", help="URL to the grouper web service", default="https://identity.slac.stanford.edu/grouper-ws/servicesRest/v5_17_000/")
parser.add_argument("--stem", help="The stem where we can find the groups ", default="app:Unix:posixGroups:s3df")
parser.add_argument("--user", help="The user id to use", default="osmaint@slac.stanford.edu")
parser.add_argument("--pwdfile", help="File containing the password", default=".pass")
parser.add_argument("groupname", help="The name of the groupto create")
parser.add_argument("description", help="A description for the group")
args = parser.parse_args()
logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO)
logging.getLogger("requests.packages.urllib3").setLevel(logging.DEBUG)

with open(args.pwdfile, "r") as f:
auth=HTTPBasicAuth(args.user, f.read())

reqjson = { "WsRestGroupSaveRequest": {
"wsGroupToSaves" : [{
"wsGroup" : {
"extension" : args.groupname,
"description" : args.description,
"displayExtension" : args.groupname,
"name" : args.stem + ":" + args.groupname
},
"wsGroupLookup" : {
"groupName" : args.stem + ":" + args.groupname
}
}]
}}

logger.debug("Req json %s", json.dumps(reqjson, indent=4))

resp = requests.post(args.url + "groups", auth=auth, json=reqjson)
logger.debug(resp.text)
resp.raise_for_status()
ret = resp.json()
logger.debug(json.dumps(ret, indent=4))

status = ret.get("WsGroupSaveResults", {}).get("resultMetadata").get("resultCode",None)
if status != "SUCCESS":
raise Exception("Invalid Status")

groupID = ret.get("WsGroupSaveResults", {}).get("results")[0].get("wsGroup").get("idIndex",None)
print(f"Successfully created group {args.groupname} with unique ID {groupID}")

54 changes: 54 additions & 0 deletions commands/grpr/findGroups.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#!/usr/bin/env python3

"""
Get the groups in the S3DF stem
"""


import os
import requests
from requests.auth import HTTPBasicAuth
import logging
import argparse
import json


logger = logging.getLogger(__name__)

if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbose", action='store_true', help="Turn on verbose logging")
parser.add_argument("--url", help="URL to the grouper web service", default="https://identity.slac.stanford.edu/grouper-ws/servicesRest/v5_17_000/")
parser.add_argument("--stem", help="The stem where we can find the groups ", default="app:Unix:posixGroups:s3df")
parser.add_argument("--user", help="The user id to use", default="osmaint@slac.stanford.edu")
parser.add_argument("--pwdfile", help="File containing the password", default=".pass")
args = parser.parse_args()
logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO)

with open(args.pwdfile, "r") as f:
auth=HTTPBasicAuth(args.user, f.read())

resp = requests.post(args.url + "groups", auth=auth, json={
"WsRestFindGroupsRequest":{
"wsQueryFilter":{
"queryFilterType":"FIND_BY_STEM_NAME",
"stemName": args.stem
}
}
})
resp.raise_for_status()
ret = resp.json()
logger.debug(json.dumps(ret, indent=4))

status = ret.get("WsFindGroupsResults", {}).get("resultMetadata").get("resultCode",None)
if status != "SUCCESS":
raise Exception("Invalid Status")

for grp in ret.get("WsFindGroupsResults", {}).get("groupResults", []):
print("Group "
+ grp.get("extension")
+ " Full name: "
+ grp.get("name")
+ " integer index "
+ grp.get("idIndex")
)
50 changes: 50 additions & 0 deletions commands/grpr/findUser.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/usr/bin/env python3

"""
Find the user ( so that we can get their ID ) given their SLAC user id ( most likely AD )
"""


import os
import requests
from requests.auth import HTTPBasicAuth
import logging
import argparse
import json


logger = logging.getLogger(__name__)

if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbose", action='store_true', help="Turn on verbose logging")
parser.add_argument("--url", help="URL to the grouper web service", default="https://identity.slac.stanford.edu/grouper-ws/servicesRest/v5_17_000/")
parser.add_argument("--stem", help="The stem where we can find the groups ", default="app:Unix:posixGroups:s3df")
parser.add_argument("--user", help="The user id to use", default="osmaint@slac.stanford.edu")
parser.add_argument("--pwdfile", help="File containing the password", default=".pass")
parser.add_argument("userid", help="The SLAC user id for the user; this will get expanded to userid@slac.stanford.edu")
args = parser.parse_args()
logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO)

with open(args.pwdfile, "r") as f:
auth=HTTPBasicAuth(args.user, f.read())

resp = requests.post(args.url + "subjects", auth=auth, json={
"WsRestGetSubjectsLiteRequest":{
"searchString": args.userid
}
})
resp.raise_for_status()
ret = resp.json()
logger.debug(json.dumps(ret, indent=4))

status = ret.get("WsGetSubjectsResults", {}).get("resultMetadata").get("resultCode",None)
if status != "SUCCESS":
raise Exception("Invalid Status")

for sub in ret.get("WsGetSubjectsResults", {}).get("wsSubjects", []):
print("Subject --> "
+ sub.get("name")
+ " Id: "
+ sub.get("id")
)
47 changes: 47 additions & 0 deletions commands/grpr/getGroupMembers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#!/usr/bin/env python3

"""
Get the members in an S3DF group
"""


import os
import requests
from requests.auth import HTTPBasicAuth
import logging
import argparse
import json


logger = logging.getLogger(__name__)

if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbose", action='store_true', help="Turn on verbose logging")
parser.add_argument("--url", help="URL to the grouper web service", default="https://identity.slac.stanford.edu/grouper-ws/servicesRest/v5_17_000/")
parser.add_argument("--stem", help="The stem where we can find the groups ", default="app:Unix:posixGroups:s3df")
parser.add_argument("--user", help="The user id to use", default="osmaint@slac.stanford.edu")
parser.add_argument("--pwdfile", help="File containing the password", default=".pass")
parser.add_argument("groupname", help="The name of the group")
args = parser.parse_args()
logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO)

with open(args.pwdfile, "r") as f:
auth=HTTPBasicAuth(args.user, f.read())

resp = requests.get(args.url + "groups/" + args.stem + ":" + args.groupname + "/members", auth=auth)
resp.raise_for_status()
ret = resp.json()
logger.debug(json.dumps(ret, indent=4))

status = ret.get("WsGetMembersLiteResult", {}).get("resultMetadata").get("resultCode",None)
if status != "SUCCESS":
raise Exception("Invalid Status")

members = [ "--> " + x["id"] for x in ret.get("WsGetMembersLiteResult", {}).get("wsSubjects",[]) if x["sourceId"] == "slacPerson" ]
print("Member for group "
+ ret.get("WsGetMembersLiteResult", {}).get("wsGroup", {}).get("extension")
+ " integer index "
+ ret.get("WsGetMembersLiteResult", {}).get("wsGroup", {}).get("idIndex")
)
print("\n".join(members))
56 changes: 56 additions & 0 deletions commands/grpr/removeMemberToGroup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#!/usr/bin/env python3

"""
Add to a group a list of users
"""


import os
import requests
from requests.auth import HTTPBasicAuth
import logging
import argparse
import json


logger = logging.getLogger(__name__)

if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbose", action='store_true', help="Turn on verbose logging")
parser.add_argument("--url", help="URL to the grouper web service", default="https://identity.slac.stanford.edu/grouper-ws/servicesRest/v5_17_000/")
parser.add_argument("--stem", help="The stem where we can find the groups ", default="app:Unix:posixGroups:s3df")
parser.add_argument("--user", help="The user id to use", default="osmaint@slac.stanford.edu")
parser.add_argument("--pwdfile", help="File containing the password", default=".pass")
parser.add_argument("groupname", help="The name of the group")
parser.add_argument("usernames", help="The names of the users", nargs="+")
args = parser.parse_args()
logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO)
logging.getLogger("requests.packages.urllib3").setLevel(logging.DEBUG)

with open(args.pwdfile, "r") as f:
auth=HTTPBasicAuth(args.user, f.read())

reqjson = {
"WsRestDeleteMemberRequest":{
"subjectLookups": [
]
}
}

for user in args.usernames:
reqjson["WsRestDeleteMemberRequest"]["subjectLookups"].append({
"subjectId": user
})

logger.debug("Req json %s", json.dumps(reqjson, indent=4))

resp = requests.post(args.url + "groups/" + args.stem + ":" + args.groupname + "/members", auth=auth, json=reqjson)
resp.raise_for_status()
ret = resp.json()
logger.debug(json.dumps(ret, indent=4))

status = ret.get("WsDeleteMemberResults", {}).get("resultMetadata").get("resultCode",None)
if status != "SUCCESS":
raise Exception("Invalid Status")