Compare commits

...

12 Commits

22 changed files with 312 additions and 175 deletions

1
.gitignore vendored
View File

@ -3,3 +3,4 @@ platforms
plugins
node_modules
/www/old/
build.json

View File

@ -3,7 +3,7 @@ Netsyms Mobile
A mobile app for easy and secure access to the Netsyms Apps on the go.
https://netsyms.biz/apps/bizmobile
https://netsyms.biz/apps/netsymsmobile
Features
--------

View File

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.netsyms.apps.Mobile" version="2.0" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<widget id="com.netsyms.apps.Mobile" version="2.0.3" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>Netsyms</name>
<description>
Securely use the Netsyms Apps from your phone or tablet.
@ -33,7 +33,7 @@
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
<application android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" />
</edit-config>
<resource-file src="res/android/values/ic_launcher_background.xml" target="app/src/main/res/values/ic_launcher_background.xml" />
<resource-file src="res/android/drawable/ic_launcher_background.xml" target="app/src/main/res/drawable/ic_launcher_background.xml" />
<resource-file src="res/android/drawable/ic_launcher_foreground.xml" target="app/src/main/res/drawable/ic_launcher_foreground.xml" />
<resource-file src="res/android/mipmap-anydpi-v26/ic_launcher.xml" target="app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml" />
<resource-file src="res/android/mipmap-anydpi-v26/ic_launcher_round.xml" target="app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml" />

View File

@ -46,7 +46,7 @@ made subject to such option by the copyright holder.
<!--
Generated file; DO NOT EDIT.
-->
<project name="BusinessMobile" basedir="..">
<project name="NetsymsMobile" basedir="..">
<property file="nbproject/configs/${config}.properties" />
<scriptdef name="checkVersion" language="javascript">

View File

@ -1,8 +1,8 @@
auxiliary.org-netbeans-modules-cordova.cordova_5f_build_5f_script_5f_version=52
auxiliary.org-netbeans-modules-cordova.phonegap=false
file.reference.BusinessMobile-test=test
file.reference.BusinessMobile-www=www
file.reference.NetsymsMobile-test=test
file.reference.NetsymsMobile-www=www
files.encoding=UTF-8
project.licensePath=nbproject/mplheader.txt
site.root.folder=${file.reference.BusinessMobile-www}
test.folder=${file.reference.BusinessMobile-test}
site.root.folder=${file.reference.NetsymsMobile-www}
test.folder=${file.reference.NetsymsMobile-test}

View File

@ -1,7 +1,7 @@
{
"name": "com.netsyms.apps.Mobile",
"displayName": "Netsyms Apps for Mobile",
"version": "2.0.0",
"version": "2.0.1",
"description": "Securely use the Netsyms Apps from your phone or tablet.",
"main": "index.html",
"author": "Netsyms Technologies",

View File

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#2196F3</color>
</resources>

View File

@ -1,6 +1,6 @@
<?xml version='1.0' encoding='utf-8'?>
<resources>
<string name="app_name">Business F7</string>
<string name="app_name">Netsyms</string>
<string name="launcher_name">@string/app_name</string>
<string name="activity_name">@string/launcher_name</string>
</resources>

View File

@ -21,7 +21,7 @@
<script src="cordova.js"></script>
<script src="vendor/js/jquery-3.2.1.min.js"></script>
<script src="vendor/js/jquery-3.4.1.min.js"></script>
<script src="vendor/js/framework7.min.js"></script>
<script src="vendor/js/fontawesome/fontawesome.min.js"></script>
<script src="vendor/js/fontawesome/solid.min.js"></script>

View File

@ -49,10 +49,14 @@ function recoveraccounts(callback) {
/**
* Switch to a different account.
* @param {int} account The selected account index from localStorage.getItem('accounts')
* @param {boolean} showmsg [HAS NO EFFECT] Whether to show the "switched accounts" alert dialog. Default True.
* @returns {undefined}
*/
function switchaccount(account) {
// If there isn't an accounts list yet, this shouldi take us back to the setup
function switchaccount(account, showmsg) {
if (typeof showmsg != 'boolean') {
showmsg = true;
}
// If there isn't an accounts list yet, this should take us back to the setup
if (!isconfigvalid()) {
restartApplication();
}
@ -69,7 +73,9 @@ function switchaccount(account) {
accountid = account;
restartApplication();
navigator.notification.alert("Successfully switched accounts.", null, "Switched", 'OK');
if (showmsg == true) {
//navigator.notification.alert("Successfully switched accounts.", null, "Switched", 'OK');
}
}
/**
@ -125,12 +131,12 @@ function getuserinfo(callback) {
callback();
}
} else {
router.navigate("/loaderror");
navigator.notification.alert(data.msg, null, "Error", 'Dismiss');
openscreen("homeloaderror");
}
}, "json").fail(function () {
navigator.notification.alert("Could not connect to the server. Try again later.", null, "Error", 'Dismiss');
openscreen("homeloaderror");
router.navigate("/loaderror");
});
}

View File

@ -10,18 +10,20 @@ setuppassword = "";
setupsynckey = "";
setupsyncurl = "";
netsymscomurl = "https://account.netsyms.com/mobile/index.php";
netsymscomurl = "https://apps.netsyms.com/account/mobile/index.php";
netsymsbizurl = "https://BIZID.netsyms.biz/accounthub/mobile/index.php";
if (localStorage.getItem("firstrun") === null) {
$("#setuptitle").text("Setup");
$(".firstrun-only").css("display", "");
}
$('#use-security').click(function () {
if (this.checked) {
$('#protocol-select').text("https://");
} else {
$('#use-security-checkbox-li').click(function () {
// Event fires before the checkbox is changed, so we need to do the opposite
if ($("#use-security").prop("checked")) {
$('#protocol-select').text("http://");
} else {
$('#protocol-select').text("https://");
}
});
@ -115,7 +117,7 @@ function personalsetup() {
if (result.status == "OK") {
var code = result.code;
var accid = addaccount(username, password, netsymscomurl, code);
switchaccount(accid);
switchaccount(accid, false);
localStorage.setItem("firstrun", "1");
navigator.notification.alert("Account connected!", null, "Success", 'Continue');
restartApplication();
@ -130,6 +132,39 @@ function personalsetup() {
});
}
function businesssetup() {
app.preloader.show();
var username = $("#personal_username").val();
var password = $("#personal_password").val();
var url = netsymsbizurl.replace("BIZID", $("#bizid").val());
$.post(url, {
username: username,
password: password,
key: "NOKEY",
desc: device.platform + " " + device.model + " " + device.serial,
action: "generatesynccode"
}, function (result) {
app.preloader.hide();
if (result.status == "OK") {
var code = result.code;
var accid = addaccount(username, password, url, code);
switchaccount(accid, false);
localStorage.setItem("firstrun", "1");
navigator.notification.alert("Account connected!", null, "Success", 'Continue');
restartApplication();
} else if (result.status == "ERROR") {
navigator.notification.alert(result.msg, null, "Error", 'Dismiss');
} else {
navigator.notification.alert("Something went wrong, please try again.", null, "Error", 'Dismiss');
}
}, "json").fail(function () {
app.preloader.hide();
navigator.notification.alert("Something went wrong, please try again.", null, "Error", 'Dismiss');
});
}
function scanCode() {
try {
cordova.plugins.barcodeScanner.scan(

View File

@ -15,7 +15,7 @@ function savePassword() {
if (data.status === 'OK') {
setuppassword = $('#passbox').val();
var accid = addaccount(setupusername, setuppassword, setupsyncurl, setupsynckey);
switchaccount(accid);
switchaccount(accid, false);
localStorage.setItem("firstrun", "1");
navigator.notification.alert("Account connected!", null, "Success", 'Continue');
restartApplication();

View File

@ -21,7 +21,7 @@
<ul id="accountlist">
{{#each accounts}}
<li class="swipeout accountlist-item" data-id="{{id}}">
<div class="item-content swipeout-content">
<div class="item-content swipeout-content" data-id="{{id}}">
<div class="item-media"><img src="img/accounticons/{{icon}}.svg" width="44"/></div>
<div class="item-inner">
<div class="item-title-row">

36
www/pages/loaderror.html Normal file
View File

@ -0,0 +1,36 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<div class="page" data-name="loaderror">
<div class="navbar">
<div class="navbar-inner">
<div class="title">Netsyms</div>
<div class="right">
<a href="#" onclick="loadOTPPage()" class="link icon-only">
<i class="fas fa-key"></i>
</a>
<a href="/settings" class="link icon-only">
<i class="fas fa-cog"></i>
</a>
</div>
</div>
</div>
<div class="page-content">
<div class="block" style="text-align: center;">
<p style="color: rgba(0,0,0,0.5);"><i class="material-icons" style="font-size: 30vw;">cloud_off</i></p>
<h3>Can't connect to the server.</h3>
<div class="row">
<a href="#" class="button col button-raised button-fill button-round" onclick="restartApplication()">Try Again</a>
<a href="#" class="button col button-raised button-round" onclick="openAccountSwitcher(false)">Switch Account</a>
</div>
</div>
</div>
<script>
loadingProgressDialog.close();
</script>
</div>

View File

@ -6,6 +6,11 @@
<div class="navbar">
<div class="navbar-inner">
<div class="left">
<a href="#" class="link icon-only back">
<i class="icon icon-back"></i>
</a>
</div>
<div class="title">Welcome!</div>
</div>
</div>
@ -22,7 +27,8 @@
<li>
<a href="#" class="item-link" onclick='router.navigate("/setup/1", {
context: {
personal: true
personal: true,
business: false
}
});'>
<div class="item-content">
@ -41,7 +47,12 @@
</a>
</li>
<li>
<a href="/setup/1" class="item-link">
<a href="#" class="item-link" onclick='router.navigate("/setup/1", {
context: {
personal: false,
business: true
}
});'>
<div class="item-content">
<div class="item-media">
<img src="img/accounticons/business.svg" width="44"/>

View File

@ -6,6 +6,11 @@
<div class="navbar">
<div class="navbar-inner">
<div class="left">
<a href="#" class="link icon-only back">
<i class="icon icon-back"></i>
</a>
</div>
<div class="title">Link Account</div>
</div>
</div>
@ -14,15 +19,23 @@
<div class="page-content">
<div class="block">
{{#js_if "this.personal == true || this.business == true"}}
<div class="card">
<div class="card-content card-content-padding">
{{#if personal}}
<p>Type your netsyms.com username and password.</p>
{{/if}}
{{#if business}}
<p>Type your netsyms.biz username, password, and business ID.</p>
{{/if}}
<div class="list no-hairlines">
<ul>
<li class="item-content item-input">
<div class="item-inner">
<div class="item-title item-floating-label">Username</div>
<div class="item-input-wrap">
<input type="text" id="personal_username" placeholder="Username" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" />
<input type="text" id="personal_username" placeholder="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" />
<span class="input-clear-button"></span>
</div>
</div>
@ -30,40 +43,60 @@
<li class="item-content item-input">
<div class="item-inner">
<div class="item-title item-floating-label">Password</div>
<div class="item-input-wrap">
<input type="password" id="personal_password" placeholder="Password" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" />
<input type="password" id="personal_password" placeholder="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" />
<span class="input-clear-button"></span>
</div>
</div>
</li>
{{#if business}}
<li class="item-content item-input">
<div class="item-inner">
<div class="item-title item-floating-label">Business ID (____.netsyms.biz)</div>
<div class="item-input-wrap">
<input type="text" id="bizid" placeholder="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" />
<span class="input-clear-button"></span>
</div>
</div>
</li>
{{/if}}
</ul>
</div>
<div class="button button-fill" onclick="personalsetup()">
<br />
<div class="button button-fill button-raised button-round" onclick="{{#if personal}}personalsetup(){{else}}businesssetup(){{/if}}">
Continue
</div>
</div>
</div>
<hr />
<p style="text-align: center; font-size: 120%;">- or -</p>
{{/js_if}}
<p>Or, scan a QR code with your phone camera. Open your account dashboard on another device (like a computer) and go to Sync settings. Generate a mobile sync code, then press the button below to scan it.</p>
<div class="card">
<div class="card-content card-content-padding">
{{#if personal}}
<p>Scan a QR code with your phone camera. Open your account dashboard on another device (like a computer) and go to Sync settings. Generate a mobile sync code, then press the button below to scan it.</p>
{{else}}
<p>Open AccountHub on another device and go to Sync settings. Generate a mobile sync code, then press the button below to scan it.</p>
{{/if}}
<div class="row">
<button class="col button button-fill" onclick="scanCode()" id="scancodebtn">Scan Code</button>
<button class="col button" onclick="manualshow()" id="manualsetupbtn">Manual Setup</button>
<button class="col button button-fill button-raised button-round" onclick="scanCode()" id="scancodebtn">Scan Code</button>
<button class="col button button-raised button-round" onclick="manualshow()" id="manualsetupbtn">Manual Setup</button>
</div>
</div>
<div id="manual_setup" class="block" style="display: none;">
<div id="manual_setup" class="block" style="display: none; padding-top: 20px; padding-bottom: 20px;">
<div class="list">
<ul>
<li class="item-content item-input">
<div class="item-inner">
<div class="item-title item-floating-label">Username</div>
<div class="item-input-wrap">
<input type="text" id="username" placeholder="Username" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" />
<input type="text" id="username" placeholder="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" />
<span class="input-clear-button"></span>
</div>
</div>
@ -71,8 +104,9 @@
<li class="item-content item-input">
<div class="item-inner">
<div class="item-title item-floating-label">Key</div>
<div class="item-input-wrap">
<input type="text" id="key" placeholder="Key" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" />
<input type="text" id="key" placeholder="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" />
<span class="input-clear-button"></span>
</div>
</div>
@ -88,7 +122,7 @@
</div>
</li>
<li>
<li id="use-security-checkbox-li">
<label class="item-checkbox item-content">
<input type="checkbox" id="use-security" checked="checked" />
<i class="icon icon-checkbox"></i>
@ -100,12 +134,17 @@
</ul>
</div>
<div class="button button-fill" onclick="manualsetup()">
<div class="button button-fill button-raised button-round" onclick="manualsetup()">
Continue
</div>
</div>
</div>
</div>
</div>
</div>
<script src="js/setup1.js"></script>

View File

@ -6,6 +6,11 @@
<div class="navbar">
<div class="navbar-inner">
<div class="left">
<a href="#" class="link icon-only back">
<i class="icon icon-back"></i>
</a>
</div>
<div class="title">Link Account</div>
</div>
</div>
@ -14,15 +19,17 @@
<div class="page-content">
<div class="block">
<div class="card">
<div class="card-content card-content-padding">
<p>Enter your password, then tap Finish.</p>
<div class="list">
<div class="list no-hairlines">
<ul>
<li class="item-content item-input">
<div class="item-media"><i class="fas fa-key"></i></div>
<div class="item-inner">
<div class="item-title item-floating-label">Password</div>
<div class="item-input-wrap">
<input type="password" id="passbox" placeholder="Password">
<input type="password" id="passbox" placeholder="">
<span class="input-clear-button"></span>
</div>
</div>
@ -30,7 +37,10 @@
</ul>
</div>
<button class="button button-fill" onclick="savePassword()">Finish</button>
<br />
<button class="button button-fill button-raised button-round" onclick="savePassword()">Finish</button>
</div>
</div>
</div>
</div>

View File

@ -56,4 +56,9 @@ var routes = [
url: './pages/credits.html',
name: 'credits'
},
{
path: '/loaderror',
url: './pages/loaderror.html',
name: 'loaderror'
},
];

File diff suppressed because one or more lines are too long

2
www/vendor/js/jquery-3.4.1.min.js vendored Normal file

File diff suppressed because one or more lines are too long