Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
dms3
go-unixfs
Commits
7ddf3836
Commit
7ddf3836
authored
Oct 20, 2014
by
Henry
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
implemented manual check and update (with signature verification)
parent
5fa3053e
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
79 additions
and
9 deletions
+79
-9
cmd/ipfs/equinox.yaml
cmd/ipfs/equinox.yaml
+6
-0
core/commands/update.go
core/commands/update.go
+46
-3
daemon/daemon.go
daemon/daemon.go
+2
-0
updates/updates.go
updates/updates.go
+25
-6
No files found.
cmd/ipfs/equinox.yaml
0 → 100644
View file @
7ddf3836
---
equinox-account
:
CHANGEME
equinox-secret
:
CHANGEME
equinox-app
:
CHANGEME
channel
:
stable
private-key
:
equinox-priv
core/commands/update.go
View file @
7ddf3836
...
...
@@ -2,21 +2,64 @@ package commands
import
(
"errors"
"fmt"
"io"
"os"
"github.com/jbenet/go-ipfs/core"
"github.com/jbenet/go-ipfs/updates"
)
// UpdateApply applys an update of the ipfs binary and shuts down the node if successful
func
UpdateApply
(
n
*
core
.
IpfsNode
,
args
[]
string
,
opts
map
[
string
]
interface
{},
out
io
.
Writer
)
error
{
return
errors
.
New
(
"TODOUpdateApply"
)
fmt
.
Fprintln
(
out
,
"Current Version:"
,
updates
.
Version
)
u
,
err
:=
updates
.
CheckForUpdate
()
if
err
!=
nil
{
return
err
}
if
u
==
nil
{
fmt
.
Fprintln
(
out
,
"No update available"
)
return
nil
}
fmt
.
Fprintln
(
out
,
"New Version:"
,
u
.
Version
)
if
err
=
updates
.
AbleToApply
();
err
!=
nil
{
return
fmt
.
Errorf
(
"Can't apply update: %v"
,
err
)
}
if
err
,
errRecover
:=
u
.
Update
();
err
!=
nil
{
err
=
fmt
.
Errorf
(
"Update failed: %v
\n
"
,
err
)
if
errRecover
!=
nil
{
err
=
fmt
.
Errorf
(
"%s
\n
Recovery failed! Cause: %v
\n
You may need to recover manually"
,
err
,
errRecover
)
}
fmt
.
Fprint
(
out
,
err
.
Error
())
return
err
}
fmt
.
Fprintln
(
out
,
"Updated applied! Shutting down."
)
os
.
Exit
(
0
)
return
nil
}
// UpdateCheck checks wether there is an update available
func
UpdateCheck
(
n
*
core
.
IpfsNode
,
args
[]
string
,
opts
map
[
string
]
interface
{},
out
io
.
Writer
)
error
{
return
errors
.
New
(
"TODOUpdateCheck"
)
fmt
.
Fprintln
(
out
,
"Current Version:"
,
updates
.
Version
)
u
,
err
:=
updates
.
CheckForUpdate
()
if
err
!=
nil
{
return
err
}
if
u
==
nil
{
fmt
.
Fprintln
(
out
,
"No update available"
)
return
nil
}
fmt
.
Fprintln
(
out
,
"New Version:"
,
u
.
Version
)
return
nil
}
// UpdateLog lists the version available online
func
UpdateLog
(
n
*
core
.
IpfsNode
,
args
[]
string
,
opts
map
[
string
]
interface
{},
out
io
.
Writer
)
error
{
return
errors
.
New
(
"
TODOUpdateLog
"
)
return
errors
.
New
(
"
Not yet implemented
"
)
}
daemon/daemon.go
View file @
7ddf3836
...
...
@@ -141,6 +141,8 @@ func (dl *DaemonListener) handleConnection(conn manet.Conn) {
err
=
commands
.
Log
(
dl
.
node
,
command
.
Args
,
command
.
Opts
,
conn
)
case
"unpin"
:
err
=
commands
.
Unpin
(
dl
.
node
,
command
.
Args
,
command
.
Opts
,
conn
)
case
"updateApply"
:
err
=
commands
.
UpdateApply
(
dl
.
node
,
command
.
Args
,
command
.
Opts
,
conn
)
default
:
err
=
fmt
.
Errorf
(
"Invalid Command: '%s'"
,
command
.
Command
)
}
...
...
updates/updates.go
View file @
7ddf3836
package
updates
import
(
"fmt"
"os"
u
"github.com/jbenet/go-ipfs/util"
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/coreos/go-semver/semver"
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/inconshreveable/go-update"
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/inconshreveable/go-update/check"
u
"github.com/jbenet/go-ipfs/util"
)
const
(
Version
=
"0.1.0"
// actual current application's version literal
UpdateEndpointURL
=
"https://api.equinox.io/1/Updates"
UpdateAppID
=
"ap_ywkPmAR40q4EfdikN9Jh2hgIHi"
// Version is the current application's version literal
Version
=
"0.1.1"
updateEndpointURL
=
"https://api.equinox.io/1/Updates"
updateAppID
=
"CHANGEME"
updatePubKey
=
`-----BEGIN RSA PUBLIC KEY-----
CHANGEME
-----END RSA PUBLIC KEY-----`
)
var
log
=
u
.
Logger
(
"updates"
)
...
...
@@ -32,12 +40,23 @@ func parseVersion() (*semver.Version, error) {
return
semver
.
NewVersion
(
Version
)
}
// CheckForUpdate checks the equinox.io api if there is an update available
func
CheckForUpdate
()
(
*
check
.
Result
,
error
)
{
param
:=
check
.
Params
{
AppVersion
:
Version
,
AppId
:
U
pdateAppID
,
AppId
:
u
pdateAppID
,
Channel
:
"stable"
,
}
return
param
.
CheckForUpdate
(
UpdateEndpointURL
,
update
.
New
())
up
,
err
:=
update
.
New
()
.
VerifySignatureWithPEM
([]
byte
(
updatePubKey
))
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"Failed to parse public key: %v"
,
err
)
}
return
param
.
CheckForUpdate
(
updateEndpointURL
,
up
)
}
// AbleToApply cheks if the running process is able to update itself
func
AbleToApply
()
error
{
return
update
.
New
()
.
CanUpdate
()
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment