Linux permission setup

Closes #260
This commit is contained in:
József Farkas
2017-03-06 21:48:36 +01:00
parent 46fdc61df3
commit 971af0868c
8 changed files with 58 additions and 7 deletions

View File

@@ -2,12 +2,17 @@ import { Component } from '@angular/core';
import { Router } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import { ReplaySubject } from 'rxjs/ReplaySubject';
import 'rxjs/add/observable/of';
import 'rxjs/add/observable/throw';
import 'rxjs/add/operator/distinctUntilChanged';
import 'rxjs/add/operator/ignoreElements';
import 'rxjs/add/operator/takeWhile';
import { remote } from 'electron';
import * as path from 'path';
import * as sudo from 'sudo-prompt';
import { UhkDeviceService } from './../../services/uhk-device.service';
@Component({
@@ -27,13 +32,44 @@ export class PrivilegeCheckerComponent {
router.navigate(['/detection']);
}
});
}
checkPermissions(): Observable<boolean> {
return Observable.of(true);
setUpPermissions(): void {
let permissionSetter: Observable<void>;
switch (process.platform) {
case 'linux':
permissionSetter = this.setUpPermissionsOnLinux();
break;
default:
permissionSetter = Observable.throw('Permissions couldn\'t be set. Invalid platform: ' + process.platform);
break;
}
permissionSetter.subscribe({
error: e => console.error(e),
complete: () => {
console.log('Permissions has been successfully set');
this.uhkDevice.initialize();
this.router.navigate(['/']);
}
});
}
setUpPermissions() { }
private setUpPermissionsOnLinux(): Observable<void> {
const subject = new ReplaySubject<void>();
const rootDir = path.resolve(path.join(remote.process.cwd(), remote.process.argv[1]), '..');
const scriptPath = path.resolve(rootDir, 'rules/setup-rules.sh');
const options = {
name: 'Setting UHK access rules'
};
sudo.exec(`sh ${scriptPath}`, options, (error: any) => {
if (error) {
subject.error(error);
} else {
subject.complete();
}
});
return subject.asObservable();
}
}

View File

@@ -0,0 +1 @@
declare module 'sudo-prompt';

3
electron/src/vendor.ts Normal file
View File

@@ -0,0 +1,3 @@
import './shared/vendor.ts';
import 'sudo-prompt';

View File

@@ -10,7 +10,7 @@ var rootDir = path.resolve(__dirname, '../');
module.exports = {
entry: {
polyfills: path.resolve(rootDir, 'src/shared/polyfills.ts'),
vendor: path.resolve(rootDir, 'src/shared/vendor.ts'),
vendor: path.resolve(rootDir, 'src/vendor.ts'),
app: path.resolve(rootDir, 'src/main.ts')
},
output: {
@@ -75,6 +75,10 @@ module.exports = {
from: 'images',
to: 'images'
},
{
from: 'rules',
to: 'rules'
},
{
from: 'node_modules/usb',
to: 'vendor/usb'

View File

@@ -59,6 +59,7 @@
"ng2-select2": "1.0.0-beta.10",
"rxjs": "5.1.1",
"select2": "^4.0.3",
"sudo-prompt": "^6.2.1",
"typescript": "2.1.6",
"usb": "git+https://github.com/aktary/node-usb.git",
"xml-loader": "^1.1.0",

View File

@@ -1,5 +1,5 @@
# These are the udev rules for accessing the USB interfaces of the UHK as non-root users.
# Copy this file to /etc/udev/rules.d and physically reconnect the UHK afterwards.
# TODO: Restore VID to 16d0 for the latest prototype.
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16d2", ATTRS{idProduct}=="05e[abcd]", MODE:="0666"
KERNEL=="ttyACM*", ATTRS{idVendor}=="16d2", ATTRS{idProduct}=="05ec", MODE:="0666", SYMLINK+="uhk-right-bootloader"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16d3", ATTRS{idProduct}=="05e[abcd]", MODE:="0666"
KERNEL=="ttyACM*", ATTRS{idVendor}=="16d3", ATTRS{idProduct}=="05ec", MODE:="0666", SYMLINK+="uhk-right-bootloader"

6
rules/setup-rules.sh Executable file
View File

@@ -0,0 +1,6 @@
#!/usr/bin/env bash
cd $(dirname $0)
cp 50-uhk-write-access.rules /etc/udev/rules.d
udevadm trigger
udevadm settle