removed board plugin for now, added getfile command

This commit is contained in:
Kevin Froman 2018-09-04 13:56:05 -05:00
parent c1d4040807
commit cf37823fd7
No known key found for this signature in database
GPG Key ID: 0D414D0FE405B63B
6 changed files with 30 additions and 71 deletions

View File

@ -1,3 +1,4 @@
#!/bin/sh #!/bin/sh
cd "$(dirname "$0")"
cd onionr/ cd onionr/
./onionr.py "$@" ./onionr.py "$@"

View File

@ -50,6 +50,7 @@ class Onionr:
Main Onionr class. This is for the CLI program, and does not handle much of the logic. Main Onionr class. This is for the CLI program, and does not handle much of the logic.
In general, external programs and plugins should not use this class. In general, external programs and plugins should not use this class.
''' '''
self.userRunDir = os.getcwd() # Directory user runs the program from
try: try:
os.chdir(sys.path[0]) os.chdir(sys.path[0])
except FileNotFoundError: except FileNotFoundError:
@ -190,6 +191,10 @@ class Onionr:
'add-file': self.addFile, 'add-file': self.addFile,
'addfile': self.addFile, 'addfile': self.addFile,
'get-file': self.getFile,
'getfile': self.getFile,
'listconn': self.listConn, 'listconn': self.listConn,
'import-blocks': self.onionrUtils.importNewBlocks, 'import-blocks': self.onionrUtils.importNewBlocks,
@ -230,6 +235,7 @@ class Onionr:
'add-peer': 'Adds a peer to database', 'add-peer': 'Adds a peer to database',
'list-peers': 'Displays a list of peers', 'list-peers': 'Displays a list of peers',
'add-file': 'Create an Onionr block from a file', 'add-file': 'Create an Onionr block from a file',
'get-file': 'Get a file from Onionr blocks',
'import-blocks': 'import blocks from the disk (Onionr is transport-agnostic!)', 'import-blocks': 'import blocks from the disk (Onionr is transport-agnostic!)',
'listconn': 'list connected peers', 'listconn': 'list connected peers',
'kex': 'exchange keys with peers (done automatically)', 'kex': 'exchange keys with peers (done automatically)',
@ -780,6 +786,24 @@ class Onionr:
return columns return columns
def getFile(self):
'''
Get a file from onionr blocks
'''
if len(sys.argv) >= 3:
fileName = sys.argv[2]
print(fileName)
contents = None
bHash = sys.argv[3]
if os.path.exists(fileName):
logger.error("File already exists")
return
if not self.onionrUtils.validateHash(bHash):
logger.error('Block hash is invalid')
return
Block.mergeChain(bHash, fileName)
return
def addFile(self): def addFile(self):
''' '''
Adds a file to the onionr network Adds a file to the onionr network
@ -790,8 +814,9 @@ class Onionr:
contents = None contents = None
if not os.path.exists(filename): if not os.path.exists(filename):
logger.warn('That file does not exist. Improper path?') logger.error('That file does not exist. Improper path (specify full path)?')
return
logger.info('Adding file... this might take a long time.')
try: try:
blockhash = Block.createChain(file = filename) blockhash = Block.createChain(file = filename)
logger.info('File %s saved in block %s.' % (filename, blockhash)) logger.info('File %s saved in block %s.' % (filename, blockhash))

View File

@ -177,6 +177,7 @@ class Block:
# signed data is jsonMeta + block content (no linebreak) # signed data is jsonMeta + block content (no linebreak)
self.signedData = (None if not self.isSigned() else self.getHeader('meta') + self.getContent()) self.signedData = (None if not self.isSigned() else self.getHeader('meta') + self.getContent())
self.date = self.getCore().getBlockDate(self.getHash()) self.date = self.getCore().getBlockDate(self.getHash())
self.claimedTime = self.getHeader('time', None)
if not self.getDate() is None: if not self.getDate() is None:
self.date = datetime.datetime.fromtimestamp(self.getDate()) self.date = datetime.datetime.fromtimestamp(self.getDate())

View File

@ -17,7 +17,7 @@
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. along with this program. If not, see <https://www.gnu.org/licenses/>.
''' '''
import onionrblockapi, logger, onionrexceptions import onionrblockapi, logger, onionrexceptions, json
class OnionrUser: class OnionrUser:
def __init__(self, coreInst, publicKey): def __init__(self, coreInst, publicKey):
self.trust = 0 self.trust = 0

View File

@ -1,5 +0,0 @@
{
"name" : "boards",
"version" : "1.0",
"author" : "onionr"
}

View File

@ -1,63 +0,0 @@
'''
Onionr - P2P Anonymous Storage Network
This is an interactive menu-driven CLI interface for Onionr
'''
'''
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/>.
'''
# Imports some useful libraries
import logger, config, sys
from onionrblockapi import Block
try:
import tkinter
except (ImportError, NameError) as e:
TK_ENABLED = False
else:
TK_ENABLED = True
plugin_name = 'cliui'
PLUGIN_VERSION = '0.0.1'
class OnionrBoards:
def __init__(self, apiInst):
self.api = apiInst
self.myCore = apiInst.get_core()
if TK_ENABLED:
self.gui = tkinter.Tk()
return
def start(self):
return
def on_init(api, data = None):
'''
This event is called after Onionr is initialized, but before the command
inputted is executed. Could be called when daemon is starting or when
just the client is running.
'''
# Doing this makes it so that the other functions can access the api object
# by simply referencing the variable `pluginapi`.
pluginapi = api
ui = OnionrBoards(api)
api.commands.register('boards', ui.start)
api.commands.register_help('boards', 'Open the board viewer')
return