diff --git a/src/__init__.py b/src/__init__.py
index 32cf8455..85faccf5 100755
--- a/src/__init__.py
+++ b/src/__init__.py
@@ -46,14 +46,6 @@ locale.setlocale(locale.LC_ALL, '') # noqa
ran_as_script = False
if __name__ == "__main__": ran_as_script = True
-# Import standard libraries
-
-try:
- from onionrutils import dependencycheck # noqa
-except ModuleNotFoundError as e:
- print('Missing requirement: ' + str(e) + ' installed')
- sys.exit(1)
-
# Import 3rd party libraries
from filenuke import nuke # noqa
diff --git a/src/notifier/__init__.py b/src/notifier/__init__.py
deleted file mode 100644
index 9acf6f54..00000000
--- a/src/notifier/__init__.py
+++ /dev/null
@@ -1,55 +0,0 @@
-"""Onionr - Private P2P Communication.
-
-Desktop notification wrapper
-"""
-from subprocess import Popen
-
-try:
- import simplenotifications as simplenotify
-except ImportError:
- notifications_enabled = False
-else:
- notifications_enabled = True
-
-from utils.readstatic import get_static_dir
-import config
-from onionrplugins.onionrevents import event as plugin_api_event
-"""
-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 .
-"""
-
-if not config.get('general.show_notifications', True):
- notifications_enabled = False
-
-notification_sound_file = get_static_dir() + "sounds/notification1.mp3"
-
-
-def notify(title: str = "Onionr", message: str = ""):
- """Cross platform method to show a notification."""
- if not notifications_enabled:
- return
- plugin_api_event("notification", data={"title": title, "message": message})
- simplenotify.notify(title, message)
-
-
-def notification_with_sound(sound='', **kwargs):
- if not notifications_enabled:
- return
- if not sound:
- sound = notification_sound_file
- try:
- Popen(["mpv", sound])
- except FileNotFoundError:
- pass
- notify(**kwargs)
diff --git a/src/onionrprocess/__init__.py b/src/onionrprocess/__init__.py
deleted file mode 100644
index ffd26feb..00000000
--- a/src/onionrprocess/__init__.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from audioop import mul
-import multiprocessing
-
-
-def run_func_in_new_process(func, *args, **kwargs):
- queue = multiprocessing.Queue()
-
- def _wrap_func():
- if args and kwargs:
- queue.put(func(*args, **kwargs))
- elif args:
- queue.put(func(*args))
- elif kwargs:
- queue.put(func(**kwargs))
- else:
- queue.put(func())
-
- proc = multiprocessing.Process(target=_wrap_func, daemon=True)
- proc.start()
- return queue.get()
-
diff --git a/src/onionrsetup/setupconfig.py b/src/onionrsetup/setupconfig.py
index 6a502831..f0013a99 100755
--- a/src/onionrsetup/setupconfig.py
+++ b/src/onionrsetup/setupconfig.py
@@ -10,7 +10,6 @@ import ujson as json
import config
import logger
import onionrvalues
-from onionrutils import getopenport
from logger.settings import *
from utils import readstatic
"""
@@ -77,14 +76,3 @@ def setup_config():
set_level(map[verbosity])
else:
logger.warn('Verbosity level %s is not valid, using default verbosity.' % verbosity)
-
- if type(config.get('client.webpassword')) is type(None):
- config.set('client.webpassword', base64.b16encode(os.urandom(32)).decode('utf-8'), savefile=True)
- if type(config.get('client.client.port')) is type(None):
- randomPort = getopenport.get_open_port()
- config.set('client.client.port', randomPort, savefile=True)
- if type(config.get('client.public.port')) is type(None):
- randomPort = getopenport.get_open_port()
- config.set('client.public.port', randomPort, savefile=True)
- if type(config.get('client.api_version')) is type(None):
- config.set('client.api_version', onionrvalues.API_VERSION, savefile=True)
\ No newline at end of file
diff --git a/src/onionrutils/dependencycheck.py b/src/onionrutils/dependencycheck.py
deleted file mode 100644
index 6b83ebc2..00000000
--- a/src/onionrutils/dependencycheck.py
+++ /dev/null
@@ -1 +0,0 @@
-from urllib3.contrib.socks import SOCKSProxyManager # noqa
\ No newline at end of file
diff --git a/src/onionrutils/getclientapiserver.py b/src/onionrutils/getclientapiserver.py
deleted file mode 100644
index 1d196eae..00000000
--- a/src/onionrutils/getclientapiserver.py
+++ /dev/null
@@ -1,37 +0,0 @@
-'''
- Onionr - Private P2P Communication
-
- Return the client api server address and port, which is usually random
-'''
-'''
- 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 .
-'''
-import filepaths
-import config
-def get_client_API_server():
- config.reload()
- retData = ''
- getconf = lambda: config.get('client.client.port')
- port = getconf()
- if port is None:
- config.reload()
- port = getconf()
- try:
- with open(filepaths.private_API_host_file, 'r') as host:
- hostname = host.read()
- except FileNotFoundError:
- raise FileNotFoundError
- else:
- retData += '%s:%s' % (hostname, port)
- return retData
diff --git a/src/onionrutils/getopenport.py b/src/onionrutils/getopenport.py
deleted file mode 100644
index 97d64ff7..00000000
--- a/src/onionrutils/getopenport.py
+++ /dev/null
@@ -1,29 +0,0 @@
-'''
- Onionr - Private P2P Communication
-
- get an open port
-'''
-'''
- 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 .
-'''
-import socket
-def get_open_port():
- # taken from (but modified) https://stackoverflow.com/a/2838309 by https://stackoverflow.com/users/133374/albert ccy-by-sa-3 https://creativecommons.org/licenses/by-sa/3.0/
- # changes from source: import moved to top of file, bind specifically to localhost
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- s.bind(("127.0.0.1",0))
- s.listen(1)
- port = s.getsockname()[1]
- s.close()
- return port
\ No newline at end of file
diff --git a/src/onionrutils/stringvalidators.py b/src/onionrutils/stringvalidators.py
index 3655c04e..8dbc3173 100644
--- a/src/onionrutils/stringvalidators.py
+++ b/src/onionrutils/stringvalidators.py
@@ -1,49 +1,30 @@
-'''
- Onionr - Private P2P Communication
+"""
+Onionr - Private P2P Communication
- validate various string data types
-'''
-'''
- 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 .
-'''
-import base64, string
+validate various string data types
+"""
+import base64
+import string
import unpaddedbase32, nacl.signing, nacl.encoding
from onionrutils import bytesconverter
-def validate_hash(data, length=64):
- '''
- Validate if a string is a valid hash hex digest (does not compare, just checks length and charset)
+"""
+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.
- Length is only invalid if its *more* than the specified
- '''
- retVal = True
- if data == False or data == True:
- return False
- data = data.strip()
- if len(data) > length:
- retVal = False
- else:
- try:
- int(data, 16)
- except ValueError:
- retVal = False
+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 .
+"""
- return retVal
def validate_pub_key(key):
- '''
- Validate if a string is a valid base32 encoded Ed25519 key
- '''
+ """Validate if a string is a valid base32 encoded Ed25519 key"""
if type(key) is type(None):
return False
# Accept keys that have no = padding
@@ -54,18 +35,8 @@ def validate_pub_key(key):
nacl.signing.SigningKey(seed=key, encoder=nacl.encoding.Base32Encoder)
except nacl.exceptions.ValueError:
pass
- except base64.binascii.Error as err:
+ except base64.binascii.Error as _:
pass
else:
retVal = True
return retVal
-
-
-def is_integer_string(data):
- '''Check if a string is a valid base10 integer (also returns true if already an int)'''
- try:
- int(data)
- except (ValueError, TypeError) as e:
- return False
- else:
- return True
diff --git a/src/onionrutils/updater/__init__.py b/src/onionrutils/updater/__init__.py
deleted file mode 100644
index a9bdf13f..00000000
--- a/src/onionrutils/updater/__init__.py
+++ /dev/null
@@ -1,7 +0,0 @@
-import notifier
-
-
-def update_event(bl):
- """Show update notification if available, return bool of if update happened"""
- if not bl.isSigner(onionrvalues.UPDATE_SIGN_KEY): raise onionrexceptions.InvalidUpdate
- onionr.notifier.notify(message="A new Onionr update is available. Stay updated to remain secure.")
diff --git a/src/onionrutils/validatemetadata.py b/src/onionrutils/validatemetadata.py
deleted file mode 100644
index 9616332d..00000000
--- a/src/onionrutils/validatemetadata.py
+++ /dev/null
@@ -1,127 +0,0 @@
-"""Onionr - Private P2P Communication.
-
-validate new block's metadata
-"""
-from json import JSONDecodeError
-import ujson as json
-
-import logger, onionrexceptions
-import onionrvalues
-from . import stringvalidators, epoch, bytesconverter
-import config, filepaths, onionrcrypto
-"""
-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 .
-"""
-
-
-def validate_metadata(metadata, block_data) -> bool:
- """Validate metadata meets onionr spec (does not validate proof value computation), take in either dictionary or json string"""
-
- ret_data = False
- max_clock_difference = onionrvalues.MAX_BLOCK_CLOCK_SKEW
-
- # convert to dict if it is json string
- if type(metadata) is str:
- try:
- metadata = json.loads(metadata)
- except JSONDecodeError:
- pass
-
- # Validate metadata dict for invalid keys to sizes that are too large
- maxAge = onionrvalues.DEFAULT_EXPIRE
- if type(metadata) is dict:
- for i in metadata:
- try:
- onionrvalues.BLOCK_METADATA_LENGTHS[i]
- except KeyError:
- logger.warn('Block has invalid metadata key ' + i)
- break
- else:
- testData = metadata[i]
- try:
- testData = len(testData)
- except (TypeError, AttributeError) as e:
- testData = len(str(testData))
- if onionrvalues.BLOCK_METADATA_LENGTHS[i] < testData:
- logger.warn('Block metadata key ' + i + ' exceeded maximum size')
- break
- if i == 'time':
- if not stringvalidators.is_integer_string(metadata[i]):
- logger.warn('Block metadata time stamp is not integer string or int')
- break
- isFuture = (metadata[i] - epoch.get_epoch())
- if isFuture > max_clock_difference:
- logger.warn('Block timestamp is skewed to the future over the max %s: %s', (max_clock_difference, isFuture))
- break
- if (epoch.get_epoch() - metadata[i]) > maxAge:
- logger.warn('Block is outdated: %s' % (metadata[i],))
- break
- elif i == 'expire':
- try:
- if not int(metadata[i]) > epoch.get_epoch(): raise ValueError
- except ValueError:
- logger.warn('Block is expired: %s less than %s' % (metadata[i], epoch.get_epoch()))
- break
- elif i == 'encryptType':
- try:
- if not metadata[i] in ('asym', 'sym', ''): raise ValueError
- except ValueError:
- logger.warn('Invalid encryption mode')
- break
- elif i == 'sig':
- try:
- metadata['encryptType']
- except KeyError:
- signer = metadata['signer']
- sig = metadata['sig']
- encodedMeta = bytesconverter.str_to_bytes(metadata['meta'])
- encodedBlock = bytesconverter.str_to_bytes(block_data)
- if not onionrcrypto.signing.ed_verify(encodedMeta + encodedBlock[1:], signer, sig):
- logger.warn(f'Block was signed by {signer}, but signature failed')
- break
- else:
- # if metadata loop gets no errors, it does not break, therefore metadata is valid
- # make sure we do not have another block with the same data content (prevent data duplication and replay attacks)
-
- # Make sure time is set (validity was checked above if it is)
- if not config.get('general.store_plaintext_blocks', True):
- try:
- if not metadata['encryptType']:
- raise onionrexceptions.PlaintextNotSupported
- except KeyError:
- raise onionrexceptions.PlaintextNotSupported
- try:
- metadata['time']
- except KeyError:
- logger.warn("Time header not set")
- return False
-
- nonce = bytesconverter.bytes_to_str(onionrcrypto.hashers.sha3_hash(block_data))
- try:
- with open(filepaths.data_nonce_file, 'r') as nonceFile:
- if nonce in nonceFile.read():
- # we've seen that nonce before, so we can't pass metadata
- raise onionrexceptions.DataExists
- except FileNotFoundError:
- ret_data = True
- except onionrexceptions.DataExists:
- # do not set ret_data to True, because data has been seen before
- logger.warn(f'{nonce} seen before')
- raise onionrexceptions.DataExists
- else:
- ret_data = True
- else:
- logger.warn('In call to utils.validateMetadata, metadata must be JSON string or a dictionary object')
-
- return ret_data
diff --git a/src/utils/bettersleep.py b/src/utils/bettersleep.py
deleted file mode 100644
index a3b5b8cc..00000000
--- a/src/utils/bettersleep.py
+++ /dev/null
@@ -1,30 +0,0 @@
-"""Onionr - Private P2P Communication.
-
-greenlet safe sleep, ignoring ctrl-c
-"""
-from gevent import sleep
-from onionrutils.epoch import get_epoch
-"""
-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 .
-"""
-
-
-def better_sleep(wait: int):
- """Sleep catching ctrl c for wait seconds."""
- start = get_epoch()
- try:
- sleep(wait)
- except KeyboardInterrupt:
- better_sleep(wait - (get_epoch() - start))
-
diff --git a/src/utils/readoffset.py b/src/utils/readoffset.py
deleted file mode 100644
index ecfcba4f..00000000
--- a/src/utils/readoffset.py
+++ /dev/null
@@ -1,17 +0,0 @@
-"""Onionr - Private P2P Communication.
-
-read from a file from an offset (efficiently)
-"""
-from collections import namedtuple
-
-OffsetReadResult = namedtuple('OffsetReadResult', ['data', 'new_offset'])
-
-
-def read_from_offset(file_path, offset=0):
- with open(file_path, 'rb') as f:
- if offset:
- f.seek(offset)
- data = f.read()
- offset = f.tell()
-
- return OffsetReadResult(data, offset)
diff --git a/src/utils/reconstructhash.py b/src/utils/reconstructhash.py
deleted file mode 100644
index 435d25ec..00000000
--- a/src/utils/reconstructhash.py
+++ /dev/null
@@ -1,51 +0,0 @@
-'''
- Onionr - Private P2P Communication
-
- z-fill (zero fill) a string to a specific length
- intended for reconstructing block hashes
-'''
-from typing import Union
-'''
- 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 .
-'''
-
-
-def reconstruct_hash(hex_hash: Union[str, bytes],
- length: int = 64) -> Union[str, bytes]:
- """Pad hash hex string with zeros, return result"""
- return hex_hash.zfill(length)
-
-
-def deconstruct_hash(hex_hash: Union[str, bytes]) -> Union[str, bytes]:
- """Remove leading zeros from hex hash, return result"""
- new_hash = ''
- ret_bytes = False
- try:
- hex_hash = hex_hash.decode()
- ret_bytes = True
- except AttributeError:
- pass
-
- c = 0
- for x in hex_hash:
- if x == '0':
- c += 1
- else:
- break
- new_hash = hex_hash[c:]
-
- if ret_bytes:
-
- new_hash = new_hash.encode()
- return new_hash
diff --git a/static-data/connect-check.txt b/static-data/connect-check.txt
deleted file mode 100755
index ef09c785..00000000
--- a/static-data/connect-check.txt
+++ /dev/null
@@ -1 +0,0 @@
-https://duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion/robots.txt,http://2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion/robots.txt,http://rurcblzhmdk22kttfkel2zduhyu3r6to7knyc7wiorzrx5gw4c3lftad.onion/
\ No newline at end of file
diff --git a/static-data/sounds/notification1.mp3 b/static-data/sounds/notification1.mp3
deleted file mode 100644
index 8021af73..00000000
Binary files a/static-data/sounds/notification1.mp3 and /dev/null differ
diff --git a/static-data/www/private/index.html b/static-data/www/private/index.html
deleted file mode 100755
index ffaca192..00000000
--- a/static-data/www/private/index.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
- Onionr
-
-
-
-
-
-
-
Onionr
-
-
-
-
\ No newline at end of file
diff --git a/static-data/www/shared/identicon.js b/static-data/www/shared/identicon.js
deleted file mode 100644
index cd351cce..00000000
--- a/static-data/www/shared/identicon.js
+++ /dev/null
@@ -1,205 +0,0 @@
-/**
- * Identicon.js 2.3.3
- * http://github.com/stewartlord/identicon.js
- *
- * PNGLib required for PNG output
- * http://www.xarg.org/download/pnglib.js
- *
- * Copyright 2018, Stewart Lord
- * Released under the BSD license
- * http://www.opensource.org/licenses/bsd-license.php
- */
-
-(function() {
- var PNGlib;
- if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
- PNGlib = require('./pnglib');
- } else {
- PNGlib = window.PNGlib;
- }
-
- var Identicon = function(hash, options){
- if (typeof(hash) !== 'string' || hash.length < 15) {
- throw 'A hash of at least 15 characters is required.';
- }
-
- this.defaults = {
- background: [240, 240, 240, 255],
- margin: 0.08,
- size: 64,
- saturation: 0.7,
- brightness: 0.5,
- format: 'png'
- };
-
- this.options = typeof(options) === 'object' ? options : this.defaults;
-
- // backward compatibility with old constructor (hash, size, margin)
- if (typeof(arguments[1]) === 'number') { this.options.size = arguments[1]; }
- if (arguments[2]) { this.options.margin = arguments[2]; }
-
- this.hash = hash
- this.background = this.options.background || this.defaults.background;
- this.size = this.options.size || this.defaults.size;
- this.format = this.options.format || this.defaults.format;
- this.margin = this.options.margin !== undefined ? this.options.margin : this.defaults.margin;
-
- // foreground defaults to last 7 chars as hue at 70% saturation, 50% brightness
- var hue = parseInt(this.hash.substr(-7), 16) / 0xfffffff;
- var saturation = this.options.saturation || this.defaults.saturation;
- var brightness = this.options.brightness || this.defaults.brightness;
- this.foreground = this.options.foreground || this.hsl2rgb(hue, saturation, brightness);
- };
-
- Identicon.prototype = {
- background: null,
- foreground: null,
- hash: null,
- margin: null,
- size: null,
- format: null,
-
- image: function(){
- return this.isSvg()
- ? new Svg(this.size, this.foreground, this.background)
- : new PNGlib(this.size, this.size, 256);
- },
-
- render: function(){
- var image = this.image(),
- size = this.size,
- baseMargin = Math.floor(size * this.margin),
- cell = Math.floor((size - (baseMargin * 2)) / 5),
- margin = Math.floor((size - cell * 5) / 2),
- bg = image.color.apply(image, this.background),
- fg = image.color.apply(image, this.foreground);
-
- // the first 15 characters of the hash control the pixels (even/odd)
- // they are drawn down the middle first, then mirrored outwards
- var i, color;
- for (i = 0; i < 15; i++) {
- color = parseInt(this.hash.charAt(i), 16) % 2 ? bg : fg;
- if (i < 5) {
- this.rectangle(2 * cell + margin, i * cell + margin, cell, cell, color, image);
- } else if (i < 10) {
- this.rectangle(1 * cell + margin, (i - 5) * cell + margin, cell, cell, color, image);
- this.rectangle(3 * cell + margin, (i - 5) * cell + margin, cell, cell, color, image);
- } else if (i < 15) {
- this.rectangle(0 * cell + margin, (i - 10) * cell + margin, cell, cell, color, image);
- this.rectangle(4 * cell + margin, (i - 10) * cell + margin, cell, cell, color, image);
- }
- }
-
- return image;
- },
-
- rectangle: function(x, y, w, h, color, image){
- if (this.isSvg()) {
- image.rectangles.push({x: x, y: y, w: w, h: h, color: color});
- } else {
- var i, j;
- for (i = x; i < x + w; i++) {
- for (j = y; j < y + h; j++) {
- image.buffer[image.index(i, j)] = color;
- }
- }
- }
- },
-
- // adapted from: https://gist.github.com/aemkei/1325937
- hsl2rgb: function(h, s, b){
- h *= 6;
- s = [
- b += s *= b < .5 ? b : 1 - b,
- b - h % 1 * s * 2,
- b -= s *= 2,
- b,
- b + h % 1 * s,
- b + s
- ];
-
- return[
- s[ ~~h % 6 ] * 255, // red
- s[ (h|16) % 6 ] * 255, // green
- s[ (h|8) % 6 ] * 255 // blue
- ];
- },
-
- toString: function(raw){
- // backward compatibility with old toString, default to base64
- if (raw) {
- return this.render().getDump();
- } else {
- return this.render().getBase64();
- }
- },
-
- isSvg: function(){
- return this.format.match(/svg/i)
- }
- };
-
- var Svg = function(size, foreground, background){
- this.size = size;
- this.foreground = this.color.apply(this, foreground);
- this.background = this.color.apply(this, background);
- this.rectangles = [];
- };
-
- Svg.prototype = {
- size: null,
- foreground: null,
- background: null,
- rectangles: null,
-
- color: function(r, g, b, a){
- var values = [r, g, b].map(Math.round);
- values.push((a >= 0) && (a <= 255) ? a/255 : 1);
- return 'rgba(' + values.join(',') + ')';
- },
-
- getDump: function(){
- var i,
- xml,
- rect,
- fg = this.foreground,
- bg = this.background,
- stroke = this.size * 0.005;
-
- xml = ""
-
- return xml;
- },
-
- getBase64: function(){
- if ('function' === typeof btoa) {
- return btoa(this.getDump());
- } else if (Buffer) {
- return new Buffer(this.getDump(), 'binary').toString('base64');
- } else {
- throw 'Cannot generate base64 output';
- }
- }
- };
-
- if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
- module.exports = Identicon;
- } else {
- window.Identicon = Identicon;
- }
-})();
diff --git a/static-data/www/shared/images/favicon.ico b/static-data/www/shared/images/favicon.ico
deleted file mode 100644
index 3c11d7e2..00000000
Binary files a/static-data/www/shared/images/favicon.ico and /dev/null differ
diff --git a/static-data/www/shared/images/onionr-icon.png b/static-data/www/shared/images/onionr-icon.png
deleted file mode 100755
index 6662210d..00000000
Binary files a/static-data/www/shared/images/onionr-icon.png and /dev/null differ
diff --git a/static-data/www/shared/images/onionr-text.png b/static-data/www/shared/images/onionr-text.png
deleted file mode 100644
index dd85097c..00000000
Binary files a/static-data/www/shared/images/onionr-text.png and /dev/null differ
diff --git a/static-data/www/shared/useridenticons.js b/static-data/www/shared/useridenticons.js
deleted file mode 100644
index a614767e..00000000
--- a/static-data/www/shared/useridenticons.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- Onionr - Private P2P Communication
-
- Provides userIcon which generates SVG identicons from a Onionr user pubkey
-
- 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 .
-*/
-function toHexString(byteArray) {
- // cc-by-sa-4 https://stackoverflow.com/a/44608819 by https://stackoverflow.com/users/1883624/grantpatterson
- var s = '0x'
- byteArray.forEach(function(byte) {
- s += ('0' + (byte & 0xFF).toString(16)).slice(-2)
- })
- return s
- }
-
- async function sha256(str) {
- const buf = await crypto.subtle.digest("SHA-256", new TextEncoder("utf-8").encode(str))
- return Array.prototype.map.call(new Uint8Array(buf), x=>(('00'+x.toString(16)).slice(-2))).join('')
- }
-
-async function userIcon(pubkey, imgSize=64){
- pubkey = await sha256(base32.decode.asBytes(pubkey))
- let options = {
- //foreground: [0,0,0,1], // rgba black
- background: [0, 0, 0, 0], // rgba white
- //margin: 0.1,
- size: imgSize,
- format: 'svg' // use SVG instead of PNG
- };
-
- // create a base64 encoded SVG
- let data = new Identicon(pubkey, options).toString();
- return data
-}
\ No newline at end of file