-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate-users-from-csv.js
More file actions
66 lines (60 loc) · 1.82 KB
/
create-users-from-csv.js
File metadata and controls
66 lines (60 loc) · 1.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
require("dotenv").config();
const program = "-- create-users-from-csv --";
const argv = require("yargs").argv;
const fs = require("fs");
const csv = require("csv-parser");
const fetch = require("node-fetch");
// Parse .env
let baseUrl = process.env.CODER_ENDPOINT;
let createUserEndpoint = `${baseUrl}/v0/users`;
let sessionToken = process.env.CODER_TOKEN;
let inputBaseFolder = process.env.INPUT_FOLDER;
let userCsv = `${inputBaseFolder}/${argv.csv}`;
const csvPipe = fs.createReadStream(userCsv).pipe(csv());
const rowArray = [];
let email = "";
let loginType = "";
let givenName = "";
let tempPassword = "";
let username = "";
// Parse the CSV
csvPipe
.on("data", async (row) => {
try {
const rowData = {
Email: row.Email,
LoginType: row.LoginType,
GivenName: row.GivenName,
TempPassword: row.TempPassword,
Username: row.Username,
};
rowArray.push(rowData);
} catch (err) {
console.log(err);
}
})
.on("end", async () => {
for (const row in rowArray) {
email = rowArray[row].Email;
loginType = rowArray[row].LoginType;
givenName = rowArray[row].GivenName;
tempPassword = rowArray[row].TempPassword;
username = rowArray[row].Username;
// Set headers and body
let options = {
method: "POST",
headers: {
"Session-Token": `${sessionToken}`,
"Content-Type": "application/json",
},
body: `{"email":"${email}","login_type":"${loginType}","name":"${givenName}","password":"${tempPassword}","temporary_password":true,"username":"${username}"}`,
};
// Create user on Coder
await fetch(createUserEndpoint, options)
.then((res) => res.json())
.then((json) => console.log(json))
.catch((err) => {
throw err;
});
}
});