-
Notifications
You must be signed in to change notification settings - Fork 0
craigbloodworth/DATA17
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
var Promise = require('promise');
var request = require("request");
var async = require("async");
var siteId = token = "";
var login = function(username, password) {
return new Promise(function(resolve, reject) {
var options = {
method: "POST",
url: "https://tableauserver.theinformationlab.co.uk/api/2.6/auth/signin",
headers: {
"Accept": "application/json"
},
body: "<tsRequest>\
<credentials name='" + username + "' password='" + password + "'>\
<site contentUrl=''/>\
</credentials>\
</tsRequest>"
};
request(options, function(error, response, body) {
if (error) reject(error);
else {
var creds = JSON.parse(body).credentials;
siteId = creds.site.id;
token = creds.token;
resolve(creds);
}
});
});
}
var getSites = function() {
return new Promise(function(resolve, reject) {
var options = {
method: "GET",
url: "https://tableauserver.theinformationlab.co.uk/api/2.6/sites",
headers: {"X-Tableau-Auth":token,"Accept":"application/json"},
};
request(options, function (error, response, body) {
resolve(JSON.parse(body).sites.site);
});
});
}
var checkUsers = function(sites) {
return new Promise(function(resolve, reject) {
async.eachSeries(sites, function(site, switchsitecallback) {
if (site.id != siteId) {
var options = {
method: "POST",
url: "https://tableauserver.theinformationlab.co.uk/api/2.6/auth/switchSite",
headers: {
"X-Tableau-Auth":token,
"Accept": "application/json"
},
body: "<tsRequest><site contentUrl='"+site.contentUrl+"'/></tsRequest>"
};
request(options, function(error, response, body) {
var creds = JSON.parse(body).credentials;
siteId = creds.site.id;
token = creds.token;
console.log("Site:", creds.site.contentUrl);
getStaleUsers(function(users) {
async.eachSeries(users, function(user, callback) {
var options = {
method: "PUT",
url: "https://tableauserver.theinformationlab.co.uk/api/2.6/sites/"+siteId+"/users/" + user.id,
headers: {"X-Tableau-Auth":token,"Accept":"application/json"},
body: "<tsRequest><user siteRole='Unlicensed'/></tsRequest>"
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
if (JSON.parse(body).user) {
console.log("User Unlicensed", JSON.parse(body).user.name);
} else {
console.log(body);
}
callback();
});
}, function(err) {
switchsitecallback();
});
});
});
} else {
console.log("Site:", site.contentUrl);
getStaleUsers(function(users) {
async.eachSeries(users, function(user, callback) {
var options = {
method: "PUT",
url: "https://tableauserver.theinformationlab.co.uk/api/2.6/sites/"+siteId+"/users/" + user.id,
headers: {"X-Tableau-Auth":token,"Accept":"application/json"},
body: "<tsRequest><user siteRole='Unlicensed'/></tsRequest>"
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log("User Unlicensed", JSON.parse(body).user.name);
callback();
});
}, function(err) {
switchsitecallback();
});
});
}
});
});
}
var getStaleUsers = function(callback) {
var options = {
method: "GET",
url: "https://tableauserver.theinformationlab.co.uk/api/2.6/sites/"+siteId+"/users?filter=lastLogin:lt:2017-08-01T00:00:00:00Z",
headers: {"X-Tableau-Auth":token,"Accept":"application/json"},
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
callback(JSON.parse(body).users.user);
});
}
login('username', 'password')
.then(getSites)
.then(sites => checkUsers(sites))
About
Scripts from DATA17 presentation
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published