more work on serialization and communication, misc work on web, run files
parent
22cece2b2c
commit
0e6ab04996
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/sh
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
cd onionr/
|
||||||
|
./onionr.py "$@"
|
|
@ -0,0 +1,29 @@
|
||||||
|
'''
|
||||||
|
Onionr - P2P Anonymous Storage Network
|
||||||
|
|
||||||
|
This file handles proof of memory functionality
|
||||||
|
'''
|
||||||
|
'''
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
'''
|
||||||
|
|
||||||
|
class ProofOfMemory:
|
||||||
|
def __init__(self, commInst):
|
||||||
|
self.communicator = commInst
|
||||||
|
return
|
||||||
|
|
||||||
|
def checkRandomPeer(self):
|
||||||
|
return
|
||||||
|
def checkPeer(self, peer):
|
||||||
|
return
|
|
@ -0,0 +1,42 @@
|
||||||
|
'''
|
||||||
|
Onionr - P2P Anonymous Storage Network
|
||||||
|
|
||||||
|
This module serializes various data pieces for use in other modules, in particular the web api
|
||||||
|
'''
|
||||||
|
'''
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
'''
|
||||||
|
|
||||||
|
import core, api, uuid, json
|
||||||
|
|
||||||
|
class SerializedData:
|
||||||
|
def __init__(self, coreInst):
|
||||||
|
'''
|
||||||
|
Serialized data is in JSON format:
|
||||||
|
{
|
||||||
|
'success': bool,
|
||||||
|
'foo': 'bar',
|
||||||
|
etc
|
||||||
|
}
|
||||||
|
'''
|
||||||
|
assert isinstance(coreInst, core.Core)
|
||||||
|
self._core = coreInst
|
||||||
|
|
||||||
|
def getStats(self):
|
||||||
|
'''Return statistics about our node'''
|
||||||
|
stats = {}
|
||||||
|
stats['uptime'] = self._core._utils.localCommand('getuptime')
|
||||||
|
stats['connectedNodes'] = self._core.daemonQueueSimple('connectedPeers')
|
||||||
|
stats['blockCount'] = len(self._core.getBlockList())
|
||||||
|
return json.dumps(stats)
|
|
@ -0,0 +1,24 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset='utf-8'>
|
||||||
|
<title>
|
||||||
|
Onionr
|
||||||
|
</title>
|
||||||
|
<link rel='stylesheet' href='/shared/main/style.css'>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<img class='logo' src='/shared/onionr-icon.png' alt='onionr logo'>
|
||||||
|
<span class='logoText'>Onionr Web Control Panel</span>
|
||||||
|
<div class='content'>
|
||||||
|
<a href='shutdown'>Shutdown node</a>
|
||||||
|
<h2>Stats</h2>
|
||||||
|
<p>Uptime: <span id='uptime'></span></p>
|
||||||
|
<p>Stored Blocks: <span id='storedBlocks'></span></p>
|
||||||
|
<p>Connected nodes:</p>
|
||||||
|
<pre id='connectedNodes'></pre>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
<script src='/shared/misc.js'></script>
|
||||||
|
<script src='/shared/main/stats.js'></script>
|
||||||
|
</html>
|
|
@ -0,0 +1,30 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
Onionr - P2P Anonymous Storage Network
|
||||||
|
|
||||||
|
This file loads stats to show on the main node web page
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <https://www.gnu.org/licenses/>
|
||||||
|
*/
|
||||||
|
|
||||||
|
uptimeDisplay = document.getElementById('uptime')
|
||||||
|
connectedDisplay = document.getElementById('connectedNodes')
|
||||||
|
storedBlockDisplay = document.getElementById('storedBlocks')
|
||||||
|
|
||||||
|
pass = window.location.hash.replace('#', '')
|
||||||
|
|
||||||
|
stats = JSON.parse(httpGet('getstats', pass))
|
||||||
|
uptimeDisplay.innerText = stats['uptime'] + ' seconds'
|
||||||
|
connectedDisplay.innerText = stats['connectedNodes']
|
||||||
|
storedBlockDisplay.innerText = stats['blockCount']
|
|
@ -0,0 +1,126 @@
|
||||||
|
body{
|
||||||
|
background-color: #2c2b3f;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
a, a:visited{
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
.center{
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
footer{
|
||||||
|
margin-top: 2em;
|
||||||
|
margin-bottom: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
body{
|
||||||
|
margin-left: 3em;
|
||||||
|
padding: 1em;
|
||||||
|
}
|
||||||
|
.onionrMenu{
|
||||||
|
max-width: 25%;
|
||||||
|
margin-left: 2%;
|
||||||
|
margin-right: 10%;
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
||||||
|
.onionrMenu li{
|
||||||
|
list-style-type: none;
|
||||||
|
margin-top: 3px;
|
||||||
|
font-size: 125%;
|
||||||
|
}
|
||||||
|
.onionrMenu li:hover{
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
.box {
|
||||||
|
display: flex;
|
||||||
|
align-items:center;
|
||||||
|
}
|
||||||
|
.logo{
|
||||||
|
max-width: 25%;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.logoText{
|
||||||
|
font-family: sans-serif;
|
||||||
|
font-size: 2em;
|
||||||
|
margin-top: 1em;
|
||||||
|
margin-left: 1%;
|
||||||
|
}
|
||||||
|
.main{
|
||||||
|
min-height: 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content{
|
||||||
|
margin-top: 3em;
|
||||||
|
margin-left: 0%;
|
||||||
|
margin-right: 40%;
|
||||||
|
background-color: white;
|
||||||
|
color: black;
|
||||||
|
padding-right: 5%;
|
||||||
|
padding-left: 3%;
|
||||||
|
padding-bottom: 2em;
|
||||||
|
padding-top: 0.5em;
|
||||||
|
border: 1px solid black;
|
||||||
|
border-radius: 10px;
|
||||||
|
min-height: 300px;
|
||||||
|
}
|
||||||
|
.content p{
|
||||||
|
text-align: justify;
|
||||||
|
}
|
||||||
|
.content img{
|
||||||
|
max-width: 35%;
|
||||||
|
}
|
||||||
|
.content a, .content a:visited{
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stats{
|
||||||
|
margin-top: 1em;
|
||||||
|
background-color: #0c1049;
|
||||||
|
padding: 5px;
|
||||||
|
margin-right: 45%;
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
||||||
|
.statDesc{
|
||||||
|
background-color: black;
|
||||||
|
padding: 5px;
|
||||||
|
margin-right: 1%;
|
||||||
|
margin-left: -5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stats noscript{
|
||||||
|
color: blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
.statItem{
|
||||||
|
padding-left: 10px;
|
||||||
|
float: right;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.warn{
|
||||||
|
color: orangered;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 640px) {
|
||||||
|
.onionrMenu{
|
||||||
|
margin-left: 0%;
|
||||||
|
}
|
||||||
|
body{
|
||||||
|
margin-left: 0em;
|
||||||
|
}
|
||||||
|
.content{
|
||||||
|
margin-left: 1%;
|
||||||
|
margin-right: 2%;
|
||||||
|
}
|
||||||
|
.content img{
|
||||||
|
max-width: 85%;
|
||||||
|
}
|
||||||
|
.stats{
|
||||||
|
margin-right: 1%;
|
||||||
|
}
|
||||||
|
.statItem{
|
||||||
|
float: initial;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
function httpGet(theUrl, webpass) {
|
||||||
|
var xmlHttp = new XMLHttpRequest()
|
||||||
|
xmlHttp.open( "GET", theUrl, false ) // false for synchronous request
|
||||||
|
xmlHttp.setRequestHeader('token', webpass)
|
||||||
|
xmlHttp.send( null )
|
||||||
|
if (xmlHttp.status == 200){
|
||||||
|
return xmlHttp.responseText
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 5.1 KiB |
|
@ -0,0 +1,7 @@
|
||||||
|
class Block {
|
||||||
|
constructor(hash, raw) {
|
||||||
|
this.hash = hash;
|
||||||
|
this.raw = raw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
#!/usr/bin/bash
|
||||||
|
cd "$(dirname "$0")"
|
||||||
|
echo "starting Onionr daemon..."
|
||||||
|
echo "run onionr.sh stop to stop the daemon, or onionr.sh start to get output"
|
||||||
|
nohup ./onionr.sh start & disown > /dev/null
|
Loading…
Reference in New Issue