Background:
My organization creates and maintains one "primary" Google Calendar for each building using www.googleapis.com/calendar/v3/calendars/... API calls.
Each of these primary calendars have two accounts with role="owner" and type="user" which we manage manually (only developers are aware of the owner accounts).
Through our app, we maintain a list of accounts with role="writer" and type="user", and each calendar has one role="reader" with type="default" (so by default, anyone can read from the calendar but only a few people can write).
We expose the ability for some administrators to change the role of their building's users to add or delete "writer" permissions.
Users can add this calendar to their list of calendars in order to view any of the building's events on "their own" calendar.
Problem:
Somehow, on very very rare occasion, a building's primary calendar manages to no longer be shared publicly. The role="reader" with type="default" seems to be gone. I am at a complete loss as to how this is happening. I can not rule out the possibility of a malicious user or a mistake in our code.
Question:
Oh wise wizards of the internet, what are all the things I should look for in order to nail down and/or fix this occasional loss of public default access? What further questions shall I ask for better results?
Thank you for sharing your magic.
Only admins have edit rights to all calendars in the domain. For more info on how calendar sharing works, see Super administrators. This will help you to have more security in your domain.
You can also check the "History" of your Google Calendar as a G Suite administrator, you can track changes to calendars, events, and subscriptions in the Google Calendar audit.
Note: Calendar audit log entries show only up to the past six months
of data. Support will not have access to information outside that time
frame.
And if you wanted to check the history of account changes of a particular google account, see this documentation.
Note: Change History maintains a record of activities for the last two years
Related
sorry I'm new to MS Graph. I'm working on a app to extract meeting history data for past hour/day/week/month for my company. I found there are APIs I can use:
List events
List calendarView
getSchedule
all 3 have different version under Users, Calendar and Groups,
which is the best to do the job?
I heard about delegated permission and application permission.
is delegated permssion good enough for me? or I have to ask for application permission?
one solution I heard: deletegated permission, create a normal account, share all meeting room account to this account. does this work for me?
Thanks
Wes
You need to understand the differences first: List events - its used to retrieve a list of events in a given calendar. List calendarview - using this you can get the occurrences, exceptions, and single instances of events in a calendar view defined by a time range, from the user's default calendar, or from some other calendar of the user's. getschedule - you can get the free/busy availability information for a collection of users, distributions lists, or resources (rooms or equipment) for a specified time period.
Also you need to understand the differences between the delegated & application permission - documentation. In short, if you want to access your calendar then go for Delegated, wherein if you want to access others calendar as well then go for application permission.
Is there a way to either save a chat session and name it so you can quickly access it without scrolling through a large amount of history, or do advanced searches. For example I'd like to return all teams chat history from a specific group for a specific date.
Not sure why the down votes, is the question not clear? Wrong place to ask this question?
We have group session chats we need to be able to easily access later, it's hard when you have to sift through a ton of data. We used to use camp fire where you could archive a chat session so you could easily pull it up when needed but we can't use camp fire anymore.
Microsoft teams has already already have powerful search functionality where you can search anything irrespective of large amount of data. It can take you directly to the archived conversation if your search criteria is matched.
Please look at the official MSFT link:
https://support.office.com/en-ie/article/search-for-messages-people-and-files-in-teams-4a351520-33f4-42ab-a5ee-5fc0ab88b263
In addition: you can also see the content search mechanism on the following link
https://learn.microsoft.com/en-us/microsoftteams/content-search
The advanced search is using the filter icons under activity click on the filter icon.
or you can use the \ or # mentions in the top search bar. This will take you right to the conversations
Export your chat session is not yet implemented. Please vote on the user voice below
https://microsoftteams.uservoice.com/forums/555103-public/suggestions/32184895-export-your-conversations-to-a-document
But if you enabled the content search then your chat history can be downloaded after performing Content Search in Compliance & Security center by Office 365 admins. Your personal chat history is actually saved in your mailbox, which means it can be exported as other mailbox items by admins.
Hope this helps
I'm trying to solve a problem of preventing double bookings using the Google Calendar Api (v3). I'm using Google resources in a GSuite environment. The bookings are made from a centralized platform on behalf of multiple users and are applied to multiple rooms (resources). The responsible application authenticates using a Service Account. The resource calendars are all configured to only accept invitations that do not conflict.
So far I found out that there are at least two ways to book a resource:
Create an event in the resource calendar
Create an event in a personal calendar en add the resource as attendee
I found out that in the first senario, events can be added to the resource calendar, even if they cause a conflict. There is no failure in the api response, the event is just added.
I tested the second scenario with my personal calendar and found out that the room needs to respond to the event invitation. Apparently that process may take several minutes before the room responds.
I'm building an api that should respond as fast as possible, but I want it to only create an event if it doesn't conflict. Of course I can use the free/busy information to reduce the chance of conclicts, but I would like to eliminate that chance entirely.
Does anyone know if Google provides functionality for this problem out of the box?
Thanks in advance.
Google does not do any validation on the api. You send what you want inserted and they insert it. Its up to you to ensure that it does not conflict with anything already there.
May i suggest that you check before you insert it and then do a double check in a few minutes to ensure there is no conflicts if there is then delete it again.
I would like to implement a Google Calendar API using FullCalendar Javascript.
Before any start of coding I have some problem to understand what is the main purpose of the Google Calendar API.
As you know there is some Auth process before creation and enabling API.
That means that I, as owner or developer want to use Google Calendar API so I get client/secret/keys strings and it is OK.
I can create an app where I can “promote” my Google Account Calendar being public and then I can show all events from that calendar (dentist booking etc).
Also I am able to use Calendar in another way. For example: Within my App I can create one page where users can auth to their google accounts and see their events
are already created.
But, What if my logged users don't have a Google Accounts.
Google Calendar is strongly connected to already created google accounts? Is it possible to use Google Calendar strictly as an REST API?
I know that this may be a stupid questions but this is something that most of Google Calendar API beginners have problem with.
There are technically two ways of accessing a calendar on Google Calendar.
Your first option is where you are using Oauth2 to authenticate your users. They give you access to their google calendar and you can then insert events directly into their calendar. You can also see the events that they currently have. This as you said wont work if the user in question does not have a google account.
Your second option is to use something called a service account. Think of a service account as a dummy user. It has its own Google calendar account minus the web view. You could potentially us that to store events in a global calendar application calendar. Then when you want to add a user to an event you invite them you can set notification no they should receive an email and they will them be able to add the event to their own personal calendar. For you this may work out better because it does not require you to have access to the Users google calendar the only draw back will be there is no way for you to see if said user has any events going on at that time since you don't have access to their account to check.
I have given you a couple of links to some tutorials that I have write a few years ago that explains the difference between oauth2 and service accounts.
Google Calendars are tied to users, which means Google users. First of all, to access the API you need a GoogleAPIs developer key. This requires a Google account. Then you need Google accounts to use or test with the API.
The Google Calendar is tied to a user account as described at https://developers.google.com/google-apps/calendar/concepts/. One thing to notice is that "event" is an atomic unit in the API and a calendar is a set of events. In other words, a calendar in the Calendar API isn't a timespan like we think of "this year's calendar", it's a set of event objects. Within the app you describe, if the users don't have google accounts then they don't have associated calendars. You would have to tie these users to some kind of public or shared calendar. It's unclear if using the Calendar API solely as a REST API as you describe (without actual or "verified" user accounts) is in accordance with the Terms & Conditions. That aside, in theory it may be possible to use a service like that as a REST API to suit your needs. Maybe you can try inverting the problem so an event becomes the user with a primary calendar. Now the location of the event can be treated as the API-event. Other (normal Google) users can "attend" the location, at the given time, created by this event (=user). You could also apply the same approach to invert the problem by location. Location becomes the user, event becomes the API-event, and attendees are normal users. The latter approach is used commonly in businesses to book resources like rooms, equipment, etc.
I have developed a student portal website for my college using Joomla 2.5 and now I want some mechanism to regularly update information on it.
My problem is that there are many societies in my college that organize events frequently and it is next to impossible to get their information on time to be updated on the site.
Is there some way possible by which those people can independently upload their events on the site without the administrator's interference and also without messing up with other facilities of the back-end?
The whole point of a CMS is to make things like this easier. As #emmanuel points out this is why there are extensions, you should use a calendaring extension.
In my experience one of the simplest things you can do if most people on your campus have Google accounts is to create a shared Google calendar that you give create access to for a representative of each club. Then embed that calendar on your site with one of the extensions for that. That way you don't have to deal with accounts on your site at all. There are a lot of ways to make it more complicated (like let each club have their own calendar and then you make a master calendar) but I think that could end up being more of a headache.
The biggest problem with calendars is getting people to list their events, because it is work for them. Sites with big empty calendars don't look very good. So you may want to make sure you have some events by finding out if there are some repeating events that you can set up.
You could try jevents component: http://www.jevents.net/
You could grant permissions to your sub admin users and add / edit / delete their events from the front end without giving them access to the backend of your site.