summaryrefslogtreecommitdiff
path: root/src/handlers/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/handlers/index.js')
-rw-r--r--src/handlers/index.js53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/handlers/index.js b/src/handlers/index.js
new file mode 100644
index 0000000..c50ef23
--- /dev/null
+++ b/src/handlers/index.js
@@ -0,0 +1,53 @@
+const puppeteer = require('puppeteer');
+const attendConference = require('./attendConference.js');
+const { clickElementBySelector } = require('./utils.js');
+
+const {
+ EDUFPMI_URL,
+ EDUFPMI_USERNAME,
+ EDUFPMI_PASSWORD,
+ COURSE_URL
+} = process.env;
+
+puppeteer.launch({ headless: true })
+ .then(async browser => {
+ const page = await browser.newPage();
+
+ // Login
+ await page.goto(EDUFPMI_URL, { waitUntil: 'domcontentloaded' });
+ await page.type('input#username', EDUFPMI_USERNAME);
+ await page.type('input#password', EDUFPMI_PASSWORD);
+ await Promise.all([
+ clickElementBySelector(page, 'button#loginbtn'),
+ page.waitForNavigation()
+ ]);
+ console.log(`Logged in as ${EDUFPMI_USERNAME}`);
+
+ // Find the course
+ await page.goto(COURSE_URL);
+ await Promise.all([
+ clickElementBySelector(page, 'li.bigbluebuttonbn a'),
+ page.waitForNavigation() // Wait until the next page loads
+ ]);
+
+ // Launch the conference in a new tab
+ const conferencePagePromise = new Promise(resolve => browser.on(
+ 'targetcreated',
+ target => resolve(target.page())
+ ));
+ await clickElementBySelector(page, 'input#join_button_input');
+ const conferencePage = await conferencePagePromise;
+
+ // Prepare onJoin callback
+ const fillAttendance = async () => {
+ await page.goBack();
+ await clickElementBySelector(page, 'li.attendance a');
+ // TODO: actually fill the attendance
+ console.log('Attendance filled');
+ };
+
+ await attendConference(conferencePage, fillAttendance);
+ await browser.close();
+ })
+ .catch(e => console.log(e));
+