From cc4394265df26f6b48154749805564a425be9e7e Mon Sep 17 00:00:00 2001 From: arnaucode Date: Wed, 17 Jan 2018 23:02:17 +0100 Subject: [PATCH] updated to the same stage than darkID project, but with own blockchain --- clientApp/GUI/app.js | 13 +- clientApp/GUI/bower.json | 7 +- .../css/bootstrapMaterial-dark-overwrite.css | 22 ++- clientApp/GUI/fonts/Blanka/Blanka-Regular.otf | Bin 0 -> 9664 bytes .../GUI/fonts/Blanka/Please Read This.rtf | 15 ++ .../GUI/fonts/Elianto/Elianto-Regular.otf | Bin 0 -> 18400 bytes .../GUI/fonts/Elianto/Elianto-Regular.ttf | Bin 0 -> 68588 bytes clientApp/GUI/img/darkID-logo-black.png | Bin 0 -> 16723 bytes clientApp/GUI/img/darkID-logo-white.png | Bin 0 -> 17526 bytes clientApp/GUI/img/darkID-logo.xcf | Bin 0 -> 13941121 bytes clientApp/GUI/img/darkID-logo01.png | Bin 0 -> 468459 bytes .../GUI/img/darkID-logo01_transparent.png | Bin 0 -> 228267 bytes clientApp/GUI/img/darkID-logo02.png | Bin 0 -> 467494 bytes clientApp/GUI/index.html | 18 ++- clientApp/GUI/main.js | 4 +- clientApp/GUI/package.json | 4 +- clientApp/GUI/views/id/id.html | 56 ++++++++ clientApp/GUI/views/id/id.js | 76 ++++++++++ clientApp/GUI/views/login/login.html | 8 +- clientApp/GUI/views/login/login.js | 31 +++- clientApp/GUI/views/main/main.html | 55 ++++--- clientApp/GUI/views/main/main.js | 27 +++- clientApp/GUI/views/navbar.html | 21 ++- clientApp/GUI/views/navbar.js | 10 +- clientApp/GUI/views/signup/signup.html | 46 +++--- clientApp/GUI/views/signup/signup.js | 44 +++--- clientApp/GUI/views/stats/stats.html | 39 +++++ clientApp/GUI/views/stats/stats.js | 136 ++++++++++++++++++ clientApp/clientAppRESTFunctions.go | 20 ++- clientApp/config.json | 5 +- clientApp/main.go | 5 +- clientApp/ownrsa/rsa.go | 12 +- clientApp/readConfig.go | 6 +- clientApp/restRoutes.go | 6 + peer/blockchain.data | 2 +- runTmuxTestPeers.sh | 15 +- serverIDsigner/userRESTFunctions.go | 17 ++- tmuxTest.sh | 13 ++ runXtermTestPeers.sh => xtermRunTestPeers.sh | 0 39 files changed, 592 insertions(+), 141 deletions(-) create mode 100644 clientApp/GUI/fonts/Blanka/Blanka-Regular.otf create mode 100644 clientApp/GUI/fonts/Blanka/Please Read This.rtf create mode 100644 clientApp/GUI/fonts/Elianto/Elianto-Regular.otf create mode 100644 clientApp/GUI/fonts/Elianto/Elianto-Regular.ttf create mode 100644 clientApp/GUI/img/darkID-logo-black.png create mode 100644 clientApp/GUI/img/darkID-logo-white.png create mode 100644 clientApp/GUI/img/darkID-logo.xcf create mode 100644 clientApp/GUI/img/darkID-logo01.png create mode 100644 clientApp/GUI/img/darkID-logo01_transparent.png create mode 100644 clientApp/GUI/img/darkID-logo02.png create mode 100644 clientApp/GUI/views/id/id.html create mode 100644 clientApp/GUI/views/id/id.js create mode 100644 clientApp/GUI/views/stats/stats.html create mode 100644 clientApp/GUI/views/stats/stats.js create mode 100644 tmuxTest.sh rename runXtermTestPeers.sh => xtermRunTestPeers.sh (100%) diff --git a/clientApp/GUI/app.js b/clientApp/GUI/app.js index 78d5219..a40accd 100644 --- a/clientApp/GUI/app.js +++ b/clientApp/GUI/app.js @@ -1,6 +1,6 @@ 'use strict'; -var urlapi = "http://127.0.0.1:3130/"; + var clientapi = "http://127.0.0.1:4100/"; // Declare app level module which depends on views, and components @@ -10,15 +10,18 @@ angular.module('app', [ 'angularBootstrapMaterial', 'ui.bootstrap', 'toastr', + 'chart.js', 'app.navbar', 'app.main', 'app.signup', - 'app.login' + 'app.login', + 'app.id', + 'app.stats' ]). config(['$locationProvider', '$routeProvider', function($locationProvider, $routeProvider) { $locationProvider.hashPrefix('!'); - if ((localStorage.getItem('blid_token'))) { + if ((localStorage.getItem('old_darkID_token'))) { console.log(window.location.hash); if ((window.location.hash === '#!/login') || (window.location.hash === '#!/signup')) { window.location = '#!/main'; @@ -31,8 +34,8 @@ config(['$locationProvider', '$routeProvider', function($locationProvider, $rout if ((window.location !== '#!/login') || (window.location !== '#!/signup')) { console.log('app, user no logged'); - localStorage.removeItem('blid_token'); - localStorage.removeItem('blid_userdata'); + localStorage.removeItem('old_darkID_token'); + localStorage.removeItem('old_darkID_userdata'); window.location = '#!/login'; $routeProvider.otherwise({ redirectTo: '/login' diff --git a/clientApp/GUI/bower.json b/clientApp/GUI/bower.json index 315b74d..998eff3 100644 --- a/clientApp/GUI/bower.json +++ b/clientApp/GUI/bower.json @@ -1,6 +1,6 @@ { - "name": "angular-seed", - "description": "A starter project for AngularJS", + "name": "darkID-clientApp", + "description": "", "version": "0.0.0", "homepage": "", "license": "MIT", @@ -13,6 +13,7 @@ "angular-bootstrap": "^2.5.0", "components-font-awesome": "^4.7.0", "angular-toastr": "^2.1.1", - "cssMaterialColors": "*" + "cssMaterialColors": "*", + "angular-chart.js": "^1.1.1" } } diff --git a/clientApp/GUI/css/bootstrapMaterial-dark-overwrite.css b/clientApp/GUI/css/bootstrapMaterial-dark-overwrite.css index 259f10a..5cf2c3f 100644 --- a/clientApp/GUI/css/bootstrapMaterial-dark-overwrite.css +++ b/clientApp/GUI/css/bootstrapMaterial-dark-overwrite.css @@ -1,14 +1,32 @@ +@font-face { + font-family: Elianto; + src: url('../fonts/Elianto/Elianto.otf'); +} + body { /*background: #15191e!important;*/ background: #000000!important; color: #ffffff!important; + font-family: 'Open Sans', sans-serif!important; } + .card { - /*background: #1f262d!important;*/ + background: #1f262d!important; /*background: #15191e!important; color: #ffffff!important;*/ /*border: 1px solid #ffffff!important;*/ - background: #000000!important; color: #ffffff!important; } + +h1, h2, h3, h4, h5, h6 { + /*font-family: 'Raleway', sans-serif!important;*/ + font-family: 'Overpass Mono', monospace!important; +} + +.navbar-brand, .card-title, .navbar-nav { + font-family: 'Overpass Mono', monospace!important; +} +.btn { + font-family: 'Overpass Mono', monospace!important; +} diff --git a/clientApp/GUI/fonts/Blanka/Blanka-Regular.otf b/clientApp/GUI/fonts/Blanka/Blanka-Regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..60b18d7816c9ea5635f8c276851970e575b5f953 GIT binary patch literal 9664 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 literal 0 HcmV?d00001 diff --git a/clientApp/GUI/fonts/Blanka/Please Read This.rtf b/clientApp/GUI/fonts/Blanka/Please Read This.rtf new file mode 100644 index 0000000..007f41e --- /dev/null +++ b/clientApp/GUI/fonts/Blanka/Please Read This.rtf @@ -0,0 +1,15 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf190 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0 +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural + +\f0\fs24 \cf0 Thanks for downloading BLANKA FONT !\ +\ +You can use it for free and commercial.\ +\ +Feedbacks are welcome !\ +\ +\'97\ +Emmeran RICHARD.\ +www.emmeranrichard.fr} \ No newline at end of file diff --git a/clientApp/GUI/fonts/Elianto/Elianto-Regular.otf b/clientApp/GUI/fonts/Elianto/Elianto-Regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..6ad449cbbebefd352ffccc7925c7a552d7d424c0 GIT binary patch literal 18400 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