Research
Security News
Malicious npm Package Targets Solana Developers and Hijacks Funds
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
python-msgraph
is a Python wrapper of the Microsoft Graph API.
To install the python-msgraph
library use the following command:
python -m pip install python-msgraph
or, to build locally and install:
The library currently supports connecting to the API using an SSL certificate:
from msgraph import api
authority_host_uri = 'https://login.microsoftonline.com'
tenant = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
resource_uri = 'https://graph.microsoft.com'
client_id = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
client_thumbprint = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
client_certificate = ''
api_instance = api.GraphAPI.from_certificate(authority_host_uri, tenant, resource_uri, client_id, client_certificate, client_thumbprint)
NOTE: When a client_certificate
is changed, the client_thumbprint
and client_id
values must also be changed
You can use the msgraph.user
module to interact with User
instances. User
instanced can be fetched using the msgraph.user.User
class:
from msgraph import user
all_users = user.User.get(api_instance)
To fetch a specific user, you can also include the user's User Principal Name
, which is the user's email address:
johndoe_instance = user.User.get(api_instance, user='johndoe@wm.edu')
Now let's fetch the Calendar
s of a particular user. To interact with a Calendar
, Event
, calendar Group
, or calendar Category
instance, we will use the msgraph.calendar
module:
from msgraph import calendar
johndoe_calendars = calendar.Calendar.get(api_instance, user=johndoe_instance)
Now let's fetch the Event
instances from the main calendar of johndoe
:
calendar_lookup = dict()
for calendar in johndoe_calendars:
calendar_lookup[calendar.name] = calendar
primary_calendar = calendar_lookup['Calendar']
johndoe_events = calendar.Event.get(johndoe_instance, calendar=primary_calendar)
To update an Event
, we can use the Event.update
method:
johndoe_event = johndoe_events[0]
johndoe_event.subject = 'Important meeting'
johndoe_event.update(api_instance)
Now the updates made to the Event
object have been saved back to the calendar
of johndoe
.
Let's try deleting an Event
on a Calendar
using the Event.delete
method:
johndoe_event = johndoe_events[0]
johndoe_event.delete(api_instance)
After calling the delete
method, the Event
has been removed from the calendar
of johndoe
.
To fetch all sites matching a key phrase, use the msgraph.sites.Site.search
method:
from msgraph import sites
matching_sites = sites.Site.search(api_instance, 'software')
Specific msgraph.sites.Site
instances can be fetched using multiple methods:
msgraph.sites.Site.get
method fetches sites by using the ID of the site
site_id = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
site = sites.Site.get(api_instance, site=site_id)
msgraph.sites.Site.by_relative_url
method to fetch by the host name and relative url of the SharePoint site
host_name = ''
relative_url = ''
site = sites.Site.by_relative_url(api_instance, host_name, relative_url)
msgraph.sites.Site.by_group
method fetches the team site of a given group
group_id = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
site = sites.Site.by_group(api_instance, group=group_id)
SharePoint sites can have sub-sites within them. To get the subsites of a Sharepoint site, use the msgraph.sites.Site.subsites
method:
subsites = site.subsites(api_instance)
To traverse the hierarchy of msgraph.sites.Site
instances:
def breadth_first(api, root):
queue = [root]
while queue:
site = queue.pop(0)
subsites = site.subsites(api)
queue += subsites
return queue
breadth_first_hierarchy = breadth_first(api_instance, site)
def depth_first(api, root):
queue = [root]
while queue:
site = queue.pop()
subsites = site.subsites(api)
queue += subsites
return queue
depth_first_hierarchy = breadth_first(api_instance, site)
msgraph.sites.SiteList
instances can be fetched using the msgraph.sites.SiteList.get
method:
site_lists = sites.SiteList.get(api_instance, site)
Or, if you have the ID of the msgraph.sites.SiteList
, you can specify it as a list_instance
keyword argument to fetch the specific msgraph.sites.SiteList
instance:
list_id = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
site_list = sites.SiteList.get(api_instance, site, list_instance=list_id)
NOTE: All site
method parameters can be substituted with their IDs in the examples above. So the code below would be valid:
site_list = sites.SiteList.get(api_instance, site_id, list_instance=list_id)
To fetch the msgraph.sites.ListItem
instances for a msgraph.sites.SiteList
, use the msgraph.sites.ListItem.get
method:
list_items = sites.ListItem.get(api_instance, site, site_list)
msgraph.sites.ListItem
instances can be updated in Microsoft Graph. To fetch the previous versions, use the msgraph.sites.ListItem.versions
method:
for item in list_items:
previous_versions = item.versions(api_instance, site, site_list)
NOTE: All site
and site_list
method parameters can be substituted with their IDs. So the code below would be valid:
list_items = sites.ListItem.get(api_instance, site_id, list_id)
for item in list_items:
previous_versions = item.versions(api_instance, site_id, list_id)
To create a new msgraph.sites.ListItem
use the msgraph.sites.ListItem.create
method:
new_list_item_fields = dict(Title='Programmer')
new_list_item = sites.ListItem.create(api_instance, site, list, new_list_item_fields)
To update the properties of a msgraph.sites.ListItem
instance, use the msgraph.sites.ListItem.update
method:
for index, item in enumerate(list_items):
item.name = '%s #%i' % (item.name, index)
item.update(api_instance, site, site_list)
To update the fields of a msgraph.sites.ListItem
instance, use the msgraph.sites.ListItem.update_fields
method:
for index, item in enumerate(list_items):
item['Title'] = 'Assistant Executive ' + item['Title']
item.update_fields(api_instance, site, site_list)
or alternatively:
for index, item in enumerate(list_items):
fields = dict(Title='Assistant Executive ' + item['Title'])
item.update_fields(api_instance, site, site_list, fields=fields)
NOTE: All site
and site_list
method parameters can be substituted with their IDs. So the code below would be valid:
for item in list_items:
item['Title'] = 'Assistant Executive ' + item['Title']
item.update_fields(api_instance, site_id, list_id)
To delete an existing msgraph.sites.ListItem
instance, use the msgraph.sites.ListItem.delete
method:
new_list_item.delete(api_instance, site, site_list)
The following modules have their own loggers:
msgraph.api
- Used for logging error messages from the API
and logging raw HTTP
response contentmsgraph.calendar
- Used for logging the creation/update/deletes of msgraph.calendar.Calendar
/msgraph.calendar.Event
/msgraph.calendar.msgraph.calendar.Group
/msgraph.calendar.Category
instancesmsgraph.group
- Used for logging the creation/update/deletes of msgraph.group.Group
instancesmsgraph.site
- Used for logging the creation/update/deletes of msgraph.sites.Site
instances, msgraph.sites.SiteList
instances, and msgraph.sites.ListItem
instancesmsgraph.user
- Used for logging the creation/update/deletes of msgraph.user.User
instancesFAQs
Python wrapper to the Microsoft Graph API
We found that python-msgraph demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Security News
Research
Socket researchers have discovered malicious npm packages targeting crypto developers, stealing credentials and wallet data using spyware delivered through typosquats of popular cryptographic libraries.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.