summaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
Diffstat (limited to 'backend')
-rw-r--r--backend/.gitignore1
-rw-r--r--backend/auth/bsv-public1
-rwxr-xr-xbackend/dep/build_ikiwiki.sh12
-rw-r--r--backend/resilient/__init__.py49
-rw-r--r--backend/resilient/bsv_metanet.py44
-rwxr-xr-xbackend/update.py22
-rwxr-xr-xbackend/wrapped_ssh.sh6
7 files changed, 111 insertions, 24 deletions
diff --git a/backend/.gitignore b/backend/.gitignore
index 1f1cbc3..ca38351 100644
--- a/backend/.gitignore
+++ b/backend/.gitignore
@@ -1,3 +1,4 @@
update_private.py
auth/ipfs-private
+auth/*.bsv
*.pyc
diff --git a/backend/auth/bsv-public b/backend/auth/bsv-public
new file mode 100644
index 0000000..c5a91fc
--- /dev/null
+++ b/backend/auth/bsv-public
@@ -0,0 +1 @@
+KzoQQ5HfaSEDPS7bzNbtnXBb3sFkju4X7oXkqmZxhVBaAsJN1Zgg
diff --git a/backend/dep/build_ikiwiki.sh b/backend/dep/build_ikiwiki.sh
new file mode 100755
index 0000000..3635e40
--- /dev/null
+++ b/backend/dep/build_ikiwiki.sh
@@ -0,0 +1,12 @@
+#!/bin/env bash
+
+SCRIPTDIR="$( cd "$( dirname "$0" )" >/dev/null 2>&1 && pwd )"
+
+cd "$SCRIPTDIR"/ikiwiki &&
+{ PERL5LIB=`pwd` PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'CPAN::Shell->notest("install", "Bundle::IkiWiki")'; } &&
+#PERL5LIB=`pwd` PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'CPAN::Shell->notest("install", "Bundle::IkiWiki::Extras")' &&
+perl Makefile.PL PREFIX= INSTALL_BASE= &&
+make &&
+
+echo To run ikiwiki: &&
+echo "PERL5LIB='$(pwd)' '$(pwd)/'ikiwiki.out"
diff --git a/backend/resilient/__init__.py b/backend/resilient/__init__.py
index 900fadb..e441db9 100644
--- a/backend/resilient/__init__.py
+++ b/backend/resilient/__init__.py
@@ -4,7 +4,6 @@
# git saves history
# ikiwiki connects git to online presentation and collaboration
-import fileinput
import os
import shlex
import shutil
@@ -14,7 +13,7 @@ import tempfile
import time
import urllib
-__all__ = ["freenet"]
+__all__ = ["freenet", "bsv_metanet"]
backend_path = os.path.normpath(os.path.join(os.path.dirname(__file__), '..'))
root_path = os.path.normpath(os.path.join(backend_path, '..'))
@@ -26,7 +25,7 @@ html_path = os.path.normpath(os.path.join(root_path, 'html'))
wiki_src_path = os.path.normpath(os.path.join(root_path, 'wiki'))
git_path = os.path.normpath(os.path.join(root_path, '.git'))
-ssh_config_path = os.path.join(auth_path, "ssh-config")
+ssh_wrap_path = os.path.join(backend_path, "wrapped_ssh.sh")
for auth_subpath, auth_subpaths, auth_subfiles in os.walk(auth_path):
for auth_subfile in auth_subfiles:
@@ -44,11 +43,14 @@ class git:
found = (os.system("git status --porcelain") == 0)
if not found:
print("ERROR: git not found")
- # TODO; download git, place in dep_path, and run from there
+ # TODO: download git, place in dep_path, and run from there
exit(1)
+ orig_dir = os.path.abspath(".")
+ os.chdir(root_path)
os.system("git submodule init")
os.system("git submodule update")
+ os.chdir(orig_dir)
# http://stackoverflow.com/questions/1964470/whats-the-equivalent-of-use-commit-times-for-git
# sets mtimes to last commit time, for ikiwiki 'last edited by' time
@@ -81,29 +83,33 @@ class git:
def pull(self):
if self.remote == None:
return False
- # TODO: GIT_SSH_COMMAND needs new version of git
- # to make it work on old versions, path ssh_config_path on environment
- # and use a wrapper script that calls ssh -F
- # then place path to wrapper script in os.environ["GIT_SSH"]
- os.environ["GIT_SSH_COMMAND"] = "ssh -F %s" % ssh_config_path
+ os.environ["GIT_SSH"] = ssh_wrap_path
status = os.system("git pull %s master" % self.remote)
- del os.environ["GIT_SSH_COMMAND"]
+ del os.environ["GIT_SSH"]
return status == 0
def push(self):
if self.push_remote == None:
return False
- os.environ["GIT_SSH_COMMAND"] = "ssh -F %s" % ssh_config_path
+ os.environ["GIT_SSH"] = ssh_wrap_path
status = os.system("git push %s master" % self.push_remote)
- del os.environ["GIT_SSH_COMMAND"]
+ del os.environ["GIT_SSH"]
return status == 0
class ikiwiki:
- found = (os.system("ikiwiki --version") == 0)
+ binary = "ikiwiki"
+ found = (os.system("%s --version" % binary) == 0)
if not found:
- print("WARNING: ikiwiki not found. please add code to fetch and build the backend/dep/ikiwiki submodule.")
-
+ binary = "%s/ikiwiki/ikiwiki.out" % dep_path
+ os.environ['PERL5LIB'] += os.pathsep + os.path.join(dep_path, 'ikiwiki')
+ found = (os.system("%s --version" % binary) == 0)
+ if not found:
+ print("ikiwiki not found: attempting to build")
+ os.system("%s/build_ikiwiki.sh" % dep_path)
+ found = (os.system("%s --version" % binary) == 0)
+ if not found:
+ print("WARNING: ikiwiki not found. did build fail on this platform?")
synced = False
def push(self):
@@ -116,15 +122,20 @@ class ikiwiki:
shutil.rmtree(html_path)
os.system("git checkout -- '%s'" % html_path)
- status = os.system("ikiwiki --setup '%s' '%s' '%s'" % (ikiwiki_setup_path, wiki_src_path, html_path))
+ status = os.system("%s --setup '%s' '%s' '%s'" % (ikiwiki.binary, ikiwiki_setup_path, wiki_src_path, html_path))
ikiwiki.synced = (status == 0)
if ikiwiki.synced:
- os.system('git gc')
+ os.system('git repack -d')
+ os.system('git prune-packed')
os.system('git update-server-info')
- html_git_path = os.path.join(html_path, '.git')
+
+ # /.git folder access can be seen as security access problem by web hosts, so alias to /git
+ with open(os.path.join(html_path, ".git"), "w") as f: f.write("gitdir: ./git")
+
+ html_git_path = os.path.join(html_path, 'git')
os.mkdir(html_git_path)
- for path in ['objects', 'refs', 'HEAD', 'info', 'packed-refs']:
+ for path in ['objects/info', 'objects/pack', 'refs', 'HEAD', 'info', 'packed-refs']:
git_subpath = os.path.join(git_path, path)
html_git_subpath = os.path.join(html_git_path, path)
if os.path.isdir(git_subpath):
diff --git a/backend/resilient/bsv_metanet.py b/backend/resilient/bsv_metanet.py
new file mode 100644
index 0000000..3d21b3e
--- /dev/null
+++ b/backend/resilient/bsv_metanet.py
@@ -0,0 +1,44 @@
+from resilient import html_path, auth_path, dep_path, git, ikiwiki
+import os
+import subprocess
+import time
+
+# TODO: need to connect to a local node, not a web service
+
+class bsvup():
+ binary = "bsvup"
+ found = (os.system("%s" % binary) == 0)
+ # TODO: check dep_path for alternate location for binary
+ if not found:
+ print("WARNING: bsvup not found. bsv metanet won't be updated")
+
+ def __init__(self, keyfile):
+ self.keyfile = os.path.join(auth_path, keyfile)
+ with open(self.keyfile) as f: self.privkey = f.read()
+ self.configdir = self.keyfile + '.bsv'
+ if bsvup.found:
+ if not os.path.isdir(self.configdir):
+ os.mkdir(self.configdir)
+ os.symlink(".", os.path.join(self.configdir, ".bsv"))
+ proc = subprocess.Popen([bsvup.binary, 'init'], stdin=subprocess.PIPE, cwd=self.configdir)
+ proc.stdin.write(self.privkey + "\n")
+ time.sleep(1)
+ proc.communicate("\n")
+ open(os.path.join(self.configdir, "info", ".keepme"), "a").close()
+ open(os.path.join(self.configdir, "objects", ".keepme"), "a").close()
+ open(os.path.join(self.configdir, "tx", ".keepme"), "a").close()
+ else: # resume tx if needed
+ proc = subprocess.Popen([bsvup.binary], stdin=subprocess.PIPE, cwd=self.configdir)
+ proc.communicate("Y\n")
+
+ def push(self):
+ if not ikiwiki.synced or not bsvup.found:
+ return False
+
+ # add files to bsv metanet
+ orig_dir = os.path.abspath(".")
+ proc = subprocess.Popen([bsvup.binary, '-f', html_path, 'upload'], stdin=subprocess.PIPE, cwd=self.configdir)
+ proc.stdin.write("\n")
+ time.sleep(1)
+ proc.stdin.write("Y\n")
+ return proc.wait() == 0
diff --git a/backend/update.py b/backend/update.py
index f753bef..8ed408f 100755
--- a/backend/update.py
+++ b/backend/update.py
@@ -2,18 +2,24 @@
import resilient
import resilient.freenet
+import resilient.bsv_metanet
####################### Instantiate hosts
hosts = []
-zeronet_urls = ['http://bit.no.com:43110']
+zeronet_urls = ['https://0net.io']
if resilient.zeronet.found:
hosts.append(resilient.zeronet('1GtQ8bkFkhYtKerSdXHKe1z4j9VTmFR5d4',
'5JzZACCELsT4bx66qmV9JDaWhEQ6Sx6j7LzeucsxJGA9H7nuoRr'))
zeronet_urls.append('http://127.0.0.1:43110')
+bsv_urls = ['https://bico.media']
+if resilient.bsv_metanet.bsvup.found:
+ bsvup_host = resilient.bsv_metanet.bsvup('bsv-public')
+ hosts.append(bsvup_host)
+
ipfs_urls = ['https://ipfs.io']
if resilient.ipfs.found:
ipfs_host = resilient.ipfs('ipfs-public')
@@ -35,17 +41,23 @@ git_repos = [
for host in zeronet_urls:
git_repos.extend([
#### public zeronet ####
- resilient.git('%s/1GtQ8bkFkhYtKerSdXHKe1z4j9VTmFR5d4/.git' % host, None),
+ resilient.git('%s/1GtQ8bkFkhYtKerSdXHKe1z4j9VTmFR5d4/git' % host, None),
#### private zeronet ####
- resilient.git('%s/1L363bqJnCG63SnV83kfV7izZXbmentctD/.git' % host, None)
+ resilient.git('%s/1L363bqJnCG63SnV83kfV7izZXbmentctD/git' % host, None)
+ ])
+
+for host in bsv_urls:
+ git_repos.extend([
+ #### public bsv ####
+ resilient.git('%s/18xAQuoytYNuXrZwoLvLHmHwS3dNqw5BXF/git' % host, None)
])
for host in ipfs_urls:
git_repos.extend([
#### public ipfs ####
- resilient.git('%s/ipns/QmPw1ZqrdEma823zTrnH9cVFF4j3YSeedrRjqPGj9Q8Utx/.git' % host, None),
+ resilient.git('%s/ipns/QmPw1ZqrdEma823zTrnH9cVFF4j3YSeedrRjqPGj9Q8Utx/git' % host, None),
#### private ipfs ####
- resilient.git('%s/ipns/QmYMViYhjtwH2BkuHYRGJvPDWcXdNf2YcRFTTCzzqQGVn1/.git' % host, None)
+ resilient.git('%s/ipns/QmYMViYhjtwH2BkuHYRGJvPDWcXdNf2YcRFTTCzzqQGVn1/git' % host, None)
])
if resilient.freenet.gitocalypse.found and resilient.freenet.running:
diff --git a/backend/wrapped_ssh.sh b/backend/wrapped_ssh.sh
new file mode 100755
index 0000000..8281e9d
--- /dev/null
+++ b/backend/wrapped_ssh.sh
@@ -0,0 +1,6 @@
+#!/bin/env sh
+
+SCRIPTDIR="$( cd "$( dirname "$0" )" >/dev/null 2>&1 && pwd )"
+
+ssh -F "$SCRIPTDIR"/auth/ssh-config "$@"
+