Browse Source

Auto-derive the installed LINE extension's UUID

systemd
Andrew Ferrazzutti 12 months ago
parent
commit
570eedf904
  1. 6
      SETUP.md
  2. 3
      puppet/README.md
  3. 1
      puppet/example-config.json
  4. 46
      puppet/prep_helper.js
  5. 1
      puppet/src/main.js
  6. 13
      puppet/src/puppet.js

6
SETUP.md

@ -21,11 +21,7 @@
1. If your system's CPU architecture is not x86\_64, the version of Chromium bundled with Puppeteer will not work, and the following steps are required:
1. Install Chrome/Chromium from your distribution's package manager
1. Set `executable_path` in `puppet/config.json` to the path to the installed Chrome/Chromium binary
1. Run `node prep_helper.js` to open Chrome/Chromium with the downloaded LINE extension enabled, and click on the LINE icon next to the URL bar
1. Once the LINE popup appears, press F12 to show DevTools, which will reveal the LINE extension's UUID
1. Edit `puppet/config.json` with some important settings:
* set `"url"` to the UUID found in the previous step
* set the `"listen"` settings to the socket to use for communication with the bridge (see [puppet/README.md](puppet/README.md) for details)
1. Edit `puppet/config.json` with desired settings (see [puppet/README.md](puppet/README.md) for details)
## Bridge
1. `cd` to the project root directory and create a Python virtual environment with `python3 -m venv .venv`, and enter it with `source .venv/bin/activate`

3
puppet/README.md

@ -9,9 +9,6 @@ The `executable_path` specifies the path to the Chromium binary for Puppeteer to
### Profile directory
The `profile_dir` specifies which directory to put Chromium user data directories.
### URL
`url` specifies the URL of the index page of the LINE extension for your Chromium installation.
### Extension directory
The `extension_dir` specifies which directory contains the files for the LINE extension, which you must download yourself.

1
puppet/example-config.json

@ -5,7 +5,6 @@
},
"executable_path": "",
"profile_dir": "./profiles",
"url": "chrome-extension://<extension-uuid>/index.html",
"extension_dir": "./extension_files",
"cycle_delay": 5000,
"use_xdotool": false,

46
puppet/prep_helper.js

@ -1,46 +0,0 @@
// matrix-puppeteer-line - A very hacky Matrix-LINE bridge based on running LINE's Chrome extension in Puppeteer
// Copyright (C) 2020-2021 Tulir Asokan, Andrew Ferrazzutti
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
import puppeteer from "puppeteer"
import fs from "fs"
import arg from "arg"
const args = arg({
"--config": String,
"--browser": String,
"-c": "--config",
"-b": "--browser",
})
const configPath = args["--config"] || "config.json"
console.log("[Main] Reading config from", configPath)
const config = JSON.parse(fs.readFileSync(configPath).toString())
const extensionDir = config.extension_dir || "extension_files"
const executablePath = args["--browser"] || config.executable_path;
(async () =>
{
await puppeteer.launch({
executablePath: executablePath,
headless: false,
args: [
`--disable-extensions-except=${extensionDir}`,
`--load-extension=${extensionDir}`
],
timeout: 0,
})
})()

1
puppet/src/main.js

@ -37,7 +37,6 @@ MessagesPuppeteer.executablePath = args["--browser"] || config.executable_path |
MessagesPuppeteer.noSandbox = args["--no-sandbox"] || MessagesPuppeteer.noSandbox
MessagesPuppeteer.profileDir = config.profile_dir || MessagesPuppeteer.profileDir
MessagesPuppeteer.devtools = config.devtools || false
MessagesPuppeteer.url = config.url
MessagesPuppeteer.extensionDir = config.extension_dir || MessagesPuppeteer.extensionDir
MessagesPuppeteer.cycleDelay = config.cycle_delay || MessagesPuppeteer.cycleDelay
MessagesPuppeteer.useXdotool = config.use_xdotool || MessagesPuppeteer.useXdotool

13
puppet/src/puppet.js

@ -102,9 +102,18 @@ export default class MessagesPuppeteer {
this.page = await this.browser.newPage()
}
this.blankPage = await this.browser.newPage()
await this.page.bringToFront()
{
this.log("Finding extension UUID")
await this.page.goto("chrome://system")
const selector = "#extensions-value"
await this.page.waitForSelector(selector, 0)
const lineDetails = await this.page.$eval(selector, e => e.innerText)
const uuid = lineDetails.match(/(.*) : LINE : version/)[1]
this.log("Found extension UUID ${uuid}")
MessagesPuppeteer.url = `chrome-extension://${uuid}/index.html`
}
this.blankPage = await this.browser.newPage()
if (MessagesPuppeteer.useXdotool) {
this.log("Finding window ID")
const buffer = execSync("xdotool search 'about:blank'")

Loading…
Cancel
Save