Monday, 22 May 2017

Using domain-level delegation with Google Classroom API

I'm trying to access teacher's class info using a node script. I can do it if I authenticate as the teacher themselves but I need a server connection to build a database. I'm not sure if this is a google classroom problem or if this is a bug on my end. I could be just thinking about authentication in the wrong way but I'm not sure. I am using this to authenticate:

module.exports.auth = function auth(type, callback) {
  switch(type){
    case "jwt":
      useJwt(process.env.LXMUSER, callback)
      break;
    case "default":
      useDefaultCred(callback);
      break;
        case "user":
      useUser(callback);
      break;
  }
}

function useJwt(user, callback){
    var google = require('googleapis');
    var cfg = require('./config.json');
  var key = require(process.env.GOOGLE_APPLICATION_CREDENTIALS);
  var jwtClient = new google.auth.JWT(
    key.client_email,
    null,
    key.private_key,
    cfg.scopes,
    user
  );
  jwtClient.authorize(function (err, tokens) {
        if (err) {
            console.error('Unable to authenticate with google:', err);

            return
        }

        callback(err, jwtClient)
    })
}

I added these scopes to the Oauth client manager:

classroom.courses,
classroom.coursework.students,
drive.readonly,
drive.file,
drive.metadata.readonly,
drive.appdata

I can successfully use the API call through the google drive API but not the google classroom api. Here is my calling environment:

auth("jwt", function (err, authClient) {
    // Make an authorized request to list Drive files.
    gclass.courses.list({
        auth: authClient,
    }, function (err, res) {
        if (err) {
            utl.errorHandle(res, err);
            return;
        }

        if (res.courses === undefined) {
            console.log(res, "You have no courses");
        }



via sidjsb

No comments:

Post a Comment