MikroWizard Initial commit | MikroFront Welcome to the world :)

This commit is contained in:
sepehr 2024-07-07 14:48:52 +03:30
commit b97aec6b97
203 changed files with 41097 additions and 0 deletions

View file

@ -0,0 +1,28 @@
import { Injectable } from '@angular/core';
import { dataProvider } from './mikrowizard/data';
@Injectable()
export class loginChecker {
private logged_in: boolean = false;
private pinging: boolean = false;
constructor(private data_provider: dataProvider) {
}
public isLoggedIn(): boolean {
return this.logged_in;
}
load() {
var _self = this;
return this.data_provider.isLoggedIn().then(result => {
_self.logged_in = result;
}).catch(err => {
_self.logged_in = false;
})
}
setStatus(status: boolean): void {
this.logged_in = status;
}
setPinging(ping: boolean): void {
this.pinging = ping;
}
}

View file

@ -0,0 +1,86 @@
import { Injectable } from '@angular/core';
import { AngularFireDatabase } from '@angular/fire/database';
import { AngularFireAuth } from '@angular/fire/auth';
import { AngularFireMessaging } from '@angular/fire/messaging';
import { mergeMapTo } from 'rxjs/operators';
import { take } from 'rxjs/operators';
import { BehaviorSubject } from 'rxjs'
import { dataProvider } from './odoorpchttp/data';
import { ToastrService } from 'ngx-toastr';
@Injectable()
export class MessagingService {
currentMessage = new BehaviorSubject(null);
constructor(
private angularFireDB: AngularFireDatabase,
private angularFireAuth: AngularFireAuth,
private data_provider: dataProvider,
private toastr: ToastrService,
private angularFireMessaging: AngularFireMessaging,
) {
this.angularFireMessaging.messaging.subscribe(
(_messaging) => {
_messaging.onMessage = _messaging.onMessage.bind(_messaging);
_messaging.onTokenRefresh = _messaging.onTokenRefresh.bind(_messaging);
}
)
}
/**
* update token in firebase database
*
* @param userId userId as a key
* @param token token as a value
*/
updateToken(userId, token) {
// we can change this function to request our backend service
this.angularFireAuth.authState.pipe(take(1)).subscribe(
() => {
const data = {};
data[userId] = token
this.angularFireDB.object('fcmTokens/').update(data)
})
}
/**
* request permission for notification from firebase cloud messaging
*
* @param userId userId
*/
requestPermission(userId) {
this.angularFireMessaging.requestToken.subscribe(
(token) => {
this.data_provider.update_FBC_token(token).then(result => {
if(result.result!='success'){
console.error('Unable to write token.');
}
});
this.updateToken(userId, token);
},
(err) => {
console.error('Unable to get permission to notify.', err);
}
);
}
shownotification(payload){
if(typeof(payload) !== 'undefined'){
if(document.visibilityState){
this.toastr.warning(payload.notification.title, payload.notification.body,{
disableTimeOut:true,
});
}
}
}
/**
* hook method when new notification received in foreground
*/
receiveMessage() {
this.angularFireMessaging.messages.subscribe(
(payload) => {
this.shownotification(payload);
this.currentMessage.next(payload);
})
}
}

View file

@ -0,0 +1,455 @@
import { Injectable } from '@angular/core';
// import { MikroWizardrpcProvider } from '../MikroWizardrpc/MikroWizardrpc';
import { MikroWizardProvider } from './provider';
import { User } from './user';
@Injectable()
export class dataProvider {
// public serverUrl: string = "/api";
public serverUrl: string = "";
private db: string = "NothingImportant";
constructor(
// private http: HTTP,
// public MikroWizardRPC: MikroWizardrpcProvider,
public MikroWizardRPC: MikroWizardProvider,
) {
this.MikroWizardRPC.init({
MikroWizard_server: this.serverUrl
});
}
isLoggedIn() {
return this.MikroWizardRPC.isLoggedIn();
}
login(username: string = "", password: string = "", ga: string = "") {
var _self = this;
this.MikroWizardRPC.clearCookeis();
return this.MikroWizardRPC.login(this.db, username, password, ga).then(res => {
if ('uid' in res && res['uid']) {
let usr: User = new User(
res.name,
res.username,
res.partner_id,
res.uid,
res.first_name,
res.last_name,
res.role,
res.perms,
res.tz,
);
// console.dir(JSON.stringify(usr))
localStorage.setItem('current_user', JSON.stringify(usr));
}
return res;
});
}
logout() {
var _self = this;
_self.MikroWizardRPC.clearCookeis();
this.MikroWizardRPC.setNewSession('', '');
localStorage.removeItem('current_user');
return this.MikroWizardRPC.sendJsonRequest("/api/logout", {});
}
////
//// MikroWizard API
////
get_front_version(){
return this.MikroWizardRPC.sendHttpGetRequest("/api/frontver/");
}
change_password(oldpass:string,newpass:string){
var data={
'oldpass':oldpass,
'newpass':newpass
}
return this.MikroWizardRPC.sendJsonRequest("/api/user/change_password", data);
}
dashboard_stats(versioncheck:boolean){
var data={
'versioncheck':versioncheck
}
return this.MikroWizardRPC.sendJsonRequest("/api/dashboard/stats", data);
}
dashboard_traffic(delta:string){
var data={
'delta':delta
}
return this.MikroWizardRPC.sendJsonRequest("/api/dashboard/traffic", data);
}
get_dev_list(data:any) {
return this.MikroWizardRPC.sendJsonRequest("/api/dev/list", data);
}
get_devgroup_list() {
return this.MikroWizardRPC.sendJsonRequest("/api/devgroup/list", {});
}
get_devgroup_members(gid:number) {
var data={
'gid':gid
}
return this.MikroWizardRPC.sendJsonRequest("/api/devgroup/members", data);
}
delete_group(id:number){
var data={
'gid':id
}
return this.MikroWizardRPC.sendJsonRequest("/api/devgroup/delete", data);
}
delete_devices(devids:any){
var data = {
'devids':devids
}
return this.MikroWizardRPC.sendJsonRequest("/api/dev/delete", data);
}
get_dev_info(id: number) {
var data={
'devid':id
}
return this.MikroWizardRPC.sendJsonRequest("/api/dev/info", data);
}
get_editform(id: number) {
var data={
'devid':id
}
return this.MikroWizardRPC.sendJsonRequest("/api/dev/get_editform", data);
}
save_editform(data:any){
return this.MikroWizardRPC.sendJsonRequest("/api/dev/save_editform", data);
}
get_dev_sensors(id: number,delta:string="5m",total_type:string="bps") {
var data={
'devid':id,
'delta':delta,
'total':total_type
}
return this.MikroWizardRPC.sendJsonRequest("/api/dev/sensors", data);
}
get_dev_ifstat(id: number,delta:string="5m",iface:string="ether1",type:string="bps") {
var data={
'devid':id,
'delta':delta,
'type':type,
'interface':iface
}
return this.MikroWizardRPC.sendJsonRequest("/api/dev/ifstat", data);
}
get_auth_logs(filters:any) {
var data=filters;
return this.MikroWizardRPC.sendJsonRequest("/api/auth/list", data);
}
get_account_logs(filters:any) {
var data=filters;
return this.MikroWizardRPC.sendJsonRequest("/api/account/list", data);
}
get_dev_logs(filters:any) {
var data=filters;
return this.MikroWizardRPC.sendJsonRequest("/api/devlogs/list", data);
}
get_syslog(filters:any) {
var data=filters;
return this.MikroWizardRPC.sendJsonRequest("/api/syslog/list", data);
}
get_details_grouped(devid:number=0){
var data={
'devid':devid
}
return this.MikroWizardRPC.sendJsonRequest("/api/devlogs/details/list", data);
}
scan_devs(type:string,info:any){
var data: any={
'type':type
}
if(type=="ip"){
data = Object.assign(data, info);
}
return this.MikroWizardRPC.sendJsonRequest("/api/scanner/scan", data);
}
get_groups(searchstr:string=""){
var data={
'searchstr':searchstr
}
return this.MikroWizardRPC.sendJsonRequest("/api/search/groups", data);
}
get_devices(searchstr:string=""){
var data={
'searchstr':searchstr
}
return this.MikroWizardRPC.sendJsonRequest("/api/search/devices", data);
}
update_save_group(group:any){
var data={
...group
}
return this.MikroWizardRPC.sendJsonRequest("/api/devgroup/update_save_group", data);
}
get_snippets(name:string,desc:string,content:string,page:number=0,size:number=1000){
var data={
'name':name,
'description':desc,
'content':content,
'page':page,
'size':size
}
return this.MikroWizardRPC.sendJsonRequest("/api/snippet/list", data);
}
save_snippet(data:any){
return this.MikroWizardRPC.sendJsonRequest("/api/snippet/save", {...data});
}
delete_snippet(id:number){
var data={
'id':id
}
return this.MikroWizardRPC.sendJsonRequest("/api/snippet/delete", data);
}
get_user_task_list() {
return this.MikroWizardRPC.sendJsonRequest("/api/user_tasks/list", {});
}
Add_task(data:any,members:any) {
data['members']=members;
return this.MikroWizardRPC.sendJsonRequest("/api/user_tasks/create", data);
}
Delete_task(taskid:Number) {
var data={
'taskid':taskid,
}
return this.MikroWizardRPC.sendJsonRequest("/api/user_tasks/delete", data);
}
Edit_task(data:any,members:any) {
data['members']=members;
return this.MikroWizardRPC.sendJsonRequest("/api/user_tasks/edit", data);
}
get_task_members(taskid:Number) {
var data={
'taskid':taskid,
}
return this.MikroWizardRPC.sendJsonRequest("/api/taskmember/details", data);
}
get_users(page:Number,size:Number,search:string) {
var data={
'page':page,
'size':size,
'search':search
}
return this.MikroWizardRPC.sendJsonRequest("/api/users/list", data);
}
get_perms(page:Number,size:Number,search:string) {
var data={
'page':page,
'size':size,
'search':search
}
return this.MikroWizardRPC.sendJsonRequest("/api/perms/list", data);
}
create_perm(name:string,perms:any) {
var data={
'name':name,
'perms':perms
}
return this.MikroWizardRPC.sendJsonRequest("/api/perms/create", data);
}
edit_perm(id:Number,name:string,perms:any) {
var data = {
'id':id,
'name':name,
'perms':perms
}
return this.MikroWizardRPC.sendJsonRequest("/api/perms/edit", data);
}
delete_perm(id:number){
var data={
'id':id
}
return this.MikroWizardRPC.sendJsonRequest("/api/perms/delete", data);
}
user_perms(uid:string) {
var data = {
'uid':uid,
}
return this.MikroWizardRPC.sendJsonRequest("/api/userperms/list", data);
}
Add_user_perm(uid:Number,permid:Number,devgroupid:Number){
var data = {
'uid':uid,
'pid':permid,
'gid':devgroupid
}
return this.MikroWizardRPC.sendJsonRequest("/api/userperms/create", data);
}
Delete_user_perm(id:number){
var data={
'id':id
}
return this.MikroWizardRPC.sendJsonRequest("/api/userperms/delete", data);
}
edit_user(data:any) {
return this.MikroWizardRPC.sendJsonRequest("/api/user/edit", data);
}
create_user(data:any) {
return this.MikroWizardRPC.sendJsonRequest("/api/user/create", data);
}
delete_user(id:number){
var data={
'uid':id
}
return this.MikroWizardRPC.sendJsonRequest("/api/user/delete", data);
}
check_firmware(devids:any) {
var data = {
'devids':devids
}
return this.MikroWizardRPC.sendJsonRequest("/api/firmware/check_firmware_update", data);
}
get_firms(page:Number,size:Number,search:any) {
var data = {
'page':page,
'size':size,
'search':search
}
return this.MikroWizardRPC.sendJsonRequest("/api/firmware/get_firms", data);
}
get_backups(devid:Number=0,page:Number,size:Number,search:any) {
var data = {
'devid':devid,
'page':page,
'size':size,
'search':search
}
return this.MikroWizardRPC.sendJsonRequest("/api/backup/list", data);
}
get_backup(id:number){
var data = {
'id':id
}
return this.MikroWizardRPC.sendJsonRequest("/api/backup/get", data);
}
get_downloadable_firms() {
return this.MikroWizardRPC.sendJsonRequest("/api/firmware/get_downloadable_firms", {});
}
download_firmware_to_repository(version:string){
var data = {
'version':version
}
return this.MikroWizardRPC.sendJsonRequest("/api/firmware/download_firmware_to_repository", data);
}
save_firmware_setting(updatebehavior:string,firmwaretoinstall:string,firmwaretoinstallv6:string){
var data = {
'updatebehavior':updatebehavior,
'firmwaretoinstall':firmwaretoinstall,
'firmwaretoinstallv6':firmwaretoinstallv6
}
return this.MikroWizardRPC.sendJsonRequest("/api/firmware/update_firmware_settings", data);
}
update_firmware(devids:string){
var data = {
'devids':devids
}
return this.MikroWizardRPC.sendJsonRequest("/api/firmware/update_firmware", data);
}
upgrade_firmware(devids:string){
var data = {
'devids':devids
}
return this.MikroWizardRPC.sendJsonRequest("/api/firmware/upgrade_firmware", data);
}
reboot_devices(devids:string){
var data = {
'devids':devids
}
return this.MikroWizardRPC.sendJsonRequest("/api/firmware/reboot_devices", data);
}
get_settings(){
return this.MikroWizardRPC.sendJsonRequest("/api/sysconfig/get_all", {});
}
save_sys_setting(data:any){
return this.MikroWizardRPC.sendJsonRequest("/api/sysconfig/save_all", data);
}
////
//// End api funcs
////
setupSession(context: any, session: any) {
this.MikroWizardRPC.clearCookeis();
this.MikroWizardRPC.setNewSession(context, session);
}
checkSessionExpired(error: any) {
console.log(error);
if ('title' in error && error.title == "session_expired")
this.logout();
return Promise.reject(error.message || error);
}
setSession(context: any, session_id: any) {
this.MikroWizardRPC.setNewSession(context, session_id);
}
getSessionInfo() {
return this.MikroWizardRPC.getSessionInfo();
}
getFullUrl(url: any) {
return this.serverUrl + url;
}
}

View file

@ -0,0 +1,209 @@
import { Injectable, Inject } from '@angular/core';
import { HttpClient,HttpResponse } from '@angular/common/http';
class Cookies { // cookies doesn't work with Android default browser / Ionic
private session_id: string = "";
delete_sessionId() {
this.session_id = "";
document.cookie = "";
}
get_sessionId() {
return document
.cookie.split("; ")
.filter(x => { return x.indexOf("session_id") === 0; })
.map(x => { return x.split("=")[1]; })
.pop() || this.session_id || "";
}
set_sessionId(val: string) {
// document.cookie = `session_id=${val}`;
// this.session_id = val;
}
}
@Injectable()
export class MikroWizardProvider {
private MikroWizard_server: string;
private http_auth: string;
private cookies: Cookies;
private uniq_id_counter: number = 0;
private shouldManageSessionId: boolean = false; // try without first
private context: Object = {"lang": "en_US"};
private headers: any;
constructor(private http: HttpClient) {
this.cookies = new Cookies();
}
private buildRequest(url: string, params: any) {
this.uniq_id_counter += 1;
if (this.shouldManageSessionId) {
params.session_id = this.cookies.get_sessionId();
}
this.headers = {
"Content-Type": "application/json",
"Session-Id": this.cookies.get_sessionId(),
"Authorization": "Basic " + btoa(`${this.http_auth}`)
};
return params;
}
private handleMikroWizardErrors(response: any) {
//response = JSON.parse(response.data);
if (!response.error) {
if (typeof response.result === 'string' || response.result instanceof String)
return JSON.parse(response.result);
return response.result;
}
let error = response.error;
let errorObj = {
title: " ",
message: "",
fullTrace: error
};
return Promise.reject(error);
}
private handleRequestErrors(response: any) {
if (!response.error) {
if (typeof response.result === 'string' || response.result instanceof String)
return JSON.parse(response.result);
return response.result;
}
let error = response.error;
let errorObj = {
title: " ",
message: "",
fullTrace: error
};
return Promise.reject(error);
}
private handleHttpErrors(error: any) {
try{
console.log(error, Object.getOwnPropertyNames(error));
}
catch(e){
console.log(error);
}
return Promise.reject(error.message || error);
}
public init(configs: any) {
this.MikroWizard_server = configs.MikroWizard_server;
this.http_auth = configs.http_auth || null;
}
public setMikroWizardServer(MikroWizard_server: string) {
this.MikroWizard_server = MikroWizard_server;
}
public setHttpAuth(http_auth: string) {
this.http_auth = http_auth;
}
public sendRequestauth(url: string, params: Object){
let body = this.buildRequest(url, params);
console.dir(body);
return this.http.post(this.MikroWizard_server + url, body, {observe: "response",headers: this.headers,withCredentials:true});
}
public sendRequest(url: string, params: Object): Promise<any> {
let body = this.buildRequest(url, params);
return this.http.post(this.MikroWizard_server + url, body, {headers: this.headers,withCredentials:true})
.toPromise()
.then((response: any) => this.handleMikroWizardErrors(response))
.catch((response: any) => this.handleHttpErrors(response));
}
public sendJsonRequest(url: string, params: Object) {
let headers = {
"Content-Type": "application/json",
};
return this.http.post(url, params,
{headers:this.headers,withCredentials:true}
).toPromise()
.then(this.handleRequestErrors)
.catch(this.handleHttpErrors);
}
public sendHttpRequest(url: string, params: any) {
let headers = {
"Content-Type": "application/x-www-form-urlencoded",
};
return this.http.post(this.MikroWizard_server + url, params,
{headers:headers,withCredentials:true}
).toPromise()
.then(this.handleRequestErrors)
.catch(this.handleHttpErrors);
}
public sendHttpGetRequest(url: string) {
let headers = {
"Content-Type": "application/x-www-form-urlencoded",
};
return this.http.get( url,
{ responseType: 'json' }
).toPromise()
}
public getServerInfo() {
return this.sendRequest("/api/version_info", {});
}
public getSessionInfo() {
return this.sendRequest("/api/me", {});
}
//Set-Cookie
public login(db: string, login: string, password: string, ga: string) {
let params = {
username : login,
password : password,
// token: token,
ga: ga
};
let $this = this;
return this.sendRequest("/api/login", params);
}
public isLoggedIn() {
return this.getSessionInfo().then(function(result: any) {
// console.dir("result");
console.dir(result);
// return true;
if ( "uid" in result === false ) return false;
else return true;
});
}
public clearCookeis() {
this.cookies = new Cookies();
}
public logout() {
this.clearCookeis();
return Promise.resolve();
}
public getUserContext(context: any) {
localStorage.setItem("user_context", JSON.stringify(context));
}
public getContext() {
return this.context;
}
public setNewSession(user_context: any, session_id: any) {
this.context = user_context;
localStorage.setItem("user_context", JSON.stringify(this.context));
}
}

View file

@ -0,0 +1,21 @@
export class User {
name: string;
username: string;
firstname: string;
lastname: string;
partner_id: number;
id: number;
role: string;
perms:any;
tz:string;
constructor(name: any, username: any, partner_id: any, user_id: any,firstname: any,lastname: any,role: any,perms:any,tz:string) { this.name = name;
this.username = username;
this.partner_id = partner_id;
this.id = user_id;
this.firstname = firstname;
this.lastname = lastname;
this.role = role;
this.perms = perms;
this.tz=tz;
}
}