mirror of
https://github.com/xuthus83/pigallery2.git
synced 2024-11-03 21:04:03 +08:00
removing flat-file-db dependency
This commit is contained in:
parent
e0f8f0d722
commit
b36f6c83d6
@ -57,7 +57,7 @@ npm install
|
|||||||
npm start
|
npm start
|
||||||
```
|
```
|
||||||
To configure it. Run `PiGallery2` first to create `config.json` file, then edit it and restart.
|
To configure it. Run `PiGallery2` first to create `config.json` file, then edit it and restart.
|
||||||
|
Default user: `admin` pass: `admin`
|
||||||
|
|
||||||
## Feature list
|
## Feature list
|
||||||
|
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
///<reference path="flat-file-db.ts"/>
|
|
||||||
import {UserDTO, UserRoles} from "../../../common/entities/UserDTO";
|
import {UserDTO, UserRoles} from "../../../common/entities/UserDTO";
|
||||||
import {IUserManager} from "../interfaces/IUserManager";
|
import {IUserManager} from "../interfaces/IUserManager";
|
||||||
import {ProjectPath} from "../../ProjectPath";
|
import {ProjectPath} from "../../ProjectPath";
|
||||||
import {Utils} from "../../../common/Utils";
|
import {Utils} from "../../../common/Utils";
|
||||||
import * as flatfile from "flat-file-db";
|
|
||||||
import * as path from "path";
|
import * as path from "path";
|
||||||
|
import * as fs from "fs";
|
||||||
import {PasswordHelper} from "../PasswordHelper";
|
import {PasswordHelper} from "../PasswordHelper";
|
||||||
|
|
||||||
|
|
||||||
export class UserManager implements IUserManager {
|
export class UserManager implements IUserManager {
|
||||||
private db: any = null;
|
private db: { users?: UserDTO[], idCounter?: number } = {};
|
||||||
|
private dbPath;
|
||||||
|
|
||||||
generateId(): string {
|
generateId(): string {
|
||||||
function s4() {
|
function s4() {
|
||||||
@ -22,22 +22,22 @@ export class UserManager implements IUserManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.db = flatfile.sync(path.join(ProjectPath.Root, 'users.db'));
|
this.dbPath = path.join(ProjectPath.Root, 'users.db');
|
||||||
|
if (fs.existsSync(this.dbPath)) {
|
||||||
|
this.loadDB();
|
||||||
|
}
|
||||||
|
|
||||||
if (!this.db.has("idCounter")) {
|
if (!this.db.idCounter) {
|
||||||
console.log("creating counter");
|
console.log("creating counter");
|
||||||
this.db.put("idCounter", 1);
|
this.db.idCounter = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.db.has("users")) {
|
if (!this.db.users) {
|
||||||
this.db.put("users", []);
|
this.db.users = [];
|
||||||
//TODO: remove defaults
|
//TODO: remove defaults
|
||||||
this.createUser(<UserDTO>{name: "developer", password: "developer", role: UserRoles.Developer});
|
|
||||||
this.createUser(<UserDTO>{name: "admin", password: "admin", role: UserRoles.Admin});
|
this.createUser(<UserDTO>{name: "admin", password: "admin", role: UserRoles.Admin});
|
||||||
this.createUser(<UserDTO>{name: "user", password: "user", role: UserRoles.User});
|
|
||||||
this.createUser(<UserDTO>{name: "guest", password: "guest", role: UserRoles.Guest});
|
|
||||||
}
|
}
|
||||||
|
this.saveDB();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ export class UserManager implements IUserManager {
|
|||||||
public async find(filter: any) {
|
public async find(filter: any) {
|
||||||
let pass = filter.password;
|
let pass = filter.password;
|
||||||
delete filter.password;
|
delete filter.password;
|
||||||
const users = (await this.db.get("users")).slice();
|
const users = this.db.users.slice();
|
||||||
let i = users.length;
|
let i = users.length;
|
||||||
while (i--) {
|
while (i--) {
|
||||||
if (pass && !(PasswordHelper.comparePassword(pass, users[i].password))) {
|
if (pass && !(PasswordHelper.comparePassword(pass, users[i].password))) {
|
||||||
@ -69,20 +69,17 @@ export class UserManager implements IUserManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async createUser(user: UserDTO) {
|
public async createUser(user: UserDTO) {
|
||||||
user.id = parseInt(this.db.get("idCounter")) + 1;
|
user.id = this.db.idCounter++;
|
||||||
this.db.put("idCounter", user.id);
|
|
||||||
let users = this.db.get("users");
|
|
||||||
user.password = PasswordHelper.cryptPassword(user.password);
|
user.password = PasswordHelper.cryptPassword(user.password);
|
||||||
users.push(user);
|
this.db.users.push(user);
|
||||||
this.db.put("users", users);
|
this.saveDB();
|
||||||
|
|
||||||
return user;
|
return user;
|
||||||
}
|
}
|
||||||
|
|
||||||
public deleteUser(id: number) {
|
public async deleteUser(id: number) {
|
||||||
let deleted = this.db.get("users").filter((u: UserDTO) => u.id == id);
|
let deleted = this.db.users.filter((u: UserDTO) => u.id == id);
|
||||||
let users = this.db.get("users").filter((u: UserDTO) => u.id != id);
|
this.db.users = this.db.users.filter((u: UserDTO) => u.id != id);
|
||||||
this.db.put("users", users);
|
this.saveDB();
|
||||||
if (deleted.length > 0) {
|
if (deleted.length > 0) {
|
||||||
return deleted[0];
|
return deleted[0];
|
||||||
}
|
}
|
||||||
@ -90,14 +87,11 @@ export class UserManager implements IUserManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async changeRole(id: number, newRole: UserRoles): Promise<UserDTO> {
|
public async changeRole(id: number, newRole: UserRoles): Promise<UserDTO> {
|
||||||
|
for (let i = 0; i < this.db.users.length; i++) {
|
||||||
let users: Array<UserDTO> = this.db.get("users");
|
if (this.db.users[i].id == id) {
|
||||||
|
this.db.users[i].role = newRole;
|
||||||
for (let i = 0; i < users.length; i++) {
|
this.saveDB();
|
||||||
if (users[i].id == id) {
|
return this.db.users[i];
|
||||||
users[i].role = newRole;
|
|
||||||
this.db.put("users", users);
|
|
||||||
return users[i];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -106,4 +100,13 @@ export class UserManager implements IUserManager {
|
|||||||
throw new Error("not implemented"); //TODO: implement
|
throw new Error("not implemented"); //TODO: implement
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private loadDB() {
|
||||||
|
const data = fs.readFileSync(this.dbPath, 'utf8');
|
||||||
|
this.db = JSON.parse(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
private saveDB() {
|
||||||
|
fs.writeFileSync(this.dbPath, JSON.stringify(this.db));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
declare module "flat-file-db" {
|
|
||||||
export function sync(path: string): DB;
|
|
||||||
}
|
|
||||||
|
|
||||||
declare interface DB {
|
|
||||||
sync(): any;
|
|
||||||
put(): any;
|
|
||||||
get(): any;
|
|
||||||
del(): any;
|
|
||||||
has(): any;
|
|
||||||
keys(): any;
|
|
||||||
close(): any;
|
|
||||||
}
|
|
@ -30,7 +30,6 @@
|
|||||||
"cookie-session": "^2.0.0-beta.2",
|
"cookie-session": "^2.0.0-beta.2",
|
||||||
"ejs": "2.5.6",
|
"ejs": "2.5.6",
|
||||||
"express": "4.15.3",
|
"express": "4.15.3",
|
||||||
"flat-file-db": "1.0.0",
|
|
||||||
"jimp": "0.2.28",
|
"jimp": "0.2.28",
|
||||||
"reflect-metadata": "0.1.10",
|
"reflect-metadata": "0.1.10",
|
||||||
"sqlite3": "^3.1.8",
|
"sqlite3": "^3.1.8",
|
||||||
|
Loading…
Reference in New Issue
Block a user