Giter Site home page Giter Site logo

unicon / googleapps-grouper-provisioner Goto Github PK

View Code? Open in Web Editor NEW
6.0 19.0 5.0 1.42 MB

This project is an Internet2 Grouper connector that synchronizes Grouper groups and users to Google Apps.

License: Apache License 2.0

Shell 2.16% Java 95.72% Batchfile 2.11%

googleapps-grouper-provisioner's Introduction

Google Apps Grouper Provisioner

Professional support/integration assistance for this module is available. For more information, visit https://unicon.net/opensource/grouper.

This project is a Grouper change log consumer and full sync agent that provisions (and deprovisions) Grouper groups and subjects to a Google Apps for Education/Business domain.

This project's source is now being maintained in the Grouper source repo. It can be found at https://github.com/Internet2/grouper/tree/master/grouper-misc/googleapps-grouper-provisioner. All adopters are encouraged to use that source instead.

Features

The Google Apps provisioner has the following features:

  • Supports multiple provisioner instances/configurations.
  • Fine-grain control over which groups are provisioned.
  • Configure Google's "advanced" group settings.
  • Optionally, set users with admin/update Grouper privileges as Google Group managers.
  • Optionally, can provision Google user accounts.

Instructions

Instructions on installation, configuration, and execution can be found on the project's wiki.

Acknowledgements

Unicon's work on the Google Apps Grouper Provisioner project is funded through a project with Oregon State University. It is intended that the products (source code and deliverables) of this project will be donated to the Grouper project, and that rights will be assigned to Internet2.

These individuals have provided guidance through out the development process:

  • Andy Morgan, Oregon State University
  • Erica Lomax, Oregon State University
  • David Langenberg, University of Chicago
  • Chris Hyzer, University of Pennsylvania
  • Jeff Pasch, New York University
  • Gary Chapman, New York University
  • Madan Dorairaj, New York University

googleapps-grouper-provisioner's People

Contributors

jtgasper3 avatar langedb avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

googleapps-grouper-provisioner's Issues

Group Update of non-synced group appears to get sync'ed to Google

When a property change occurs to a Grouper group the change log consumer is asked to process all of them but should only act on ones that have been flagged for syncing to Google. The current coding does this check after it does an initial check to see if the Google group exists. It then steps out. So while nothing will get hurt by the current coding it is mis-leading when reading the logs.

Manage privs not given properly.

Andy reported an issue where someone with admin privs was given the "manage" role while the provisioner config was set to update.

During discovery we also found that the Change Log Consumer wasn't setting the priv appropriately at all.

Refactor the ChangeLogConsumer class

  • split out bridging code to separate class (I need a good name for this class.)
  • move the FullSync method to its class

This will leave the CLC class with just CLC specific code.

Include subjectName in membership changelog entries

Currently in membership type changelogs, only the subjectId is logged. While useful to Grouper users, subjectName is more often referenced and meaningful to Google Admins and can save some steps when troubleshooting issues.

Currently:

Google Apps Consumer 'google' - Change log entry 'ChangeLogEntry[timestamp=2018-06-05 12:57:04.473,sequence=16034723,category=membership,actionName=addMembership,contextId=56a9fbb8cb1d4bc696b4811419da4d1b,id=e0cc914fc95d4b9a8c9ef9a6ad3158c6,fieldName=members,subjectId=777777,sourceId=uncg-person,membershipType=flattened,groupId=51f5863f44d24a4badc7156e43f4ab0d,groupName=uncg:apps:AAA_test:bushyTestGroup,memberId=afb3efc0fa2447d9b9440d386b6c4247,fieldId=daf3e08d291e464aa5feda14b7ff4e72,subjectIdentifier0=]'

Proposed:

Google Apps Consumer 'google' - Change log entry 'ChangeLogEntry[timestamp=2018-06-05 12:57:04.473,sequence=16034723,category=membership,actionName=addMembership,contextId=56a9fbb8cb1d4bc696b4811419da4d1b,id=e0cc914fc95d4b9a8c9ef9a6ad3158c6,fieldName=members,subjectId=396705,subjectName="John T Spartan",sourceId=uncg-person,membershipType=flattened,groupId=51f5863f44d24a4badc7156e43f4ab0d,groupName=uncg:apps:AAA_test:bushyTestGroup,memberId=afb3efc0fa2447d9b9440d386b6c4247,fieldId=daf3e08d291e464aa5feda14b7ff4e72,subjectIdentifier0=]'

Delete follow-ed by a quick re-add fails (because the body isn't buried yet)

Removing a user's grouper membership in in Grouper and then immediately re-adding the same user's membership for the same group fails for the Change Log Consumer:

Error processing membership add failed: com.google.api.client.googleapis.json.GoogleJsonResponseException: 409 Conflict
{
  "code" : 409,
  "errors" : [ {
    "domain" : "global",
    "message" : "Member already exists.",    "reason" : "duplicate"  } ],
  "message" : "Member already exists."
}

This is likely happening because Google hasn't committed the delete change throughout it's system when the CLC tries to re-add the membership, but eventually it catches up and the membership entry does go away.

Privilege not added to an existing member

The whoCanManage property is set to "update" in my configuration but when the member already exists in Google with "Member" role then in Grouper when this member gets the "update" privilege added and the changelog runs the role remains the same in Google.

Need Group Filter for Full Sync

The full sync is greedy and queries all Google Groups and compares them to Groupers target population. It then wants to remove/archive (nothing, if ignore is selected) all of the extraneous groups. This is fine if a Grouper is completely authoritative over Google Groups and a single provisioner is used, but does not probably work for most instance.

A filter is needed to match only groups that the provisioner "should" have created. For example filters in a specified prefix of "crs-" for courses or "clubs-" for on campus clubs, etc. A regex would be most flexible.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.