mirror of
https://github.com/ddworken/hishtory.git
synced 2025-02-27 07:51:14 +01:00
Prompt people if they run hishtory init and already have a bunch of entries + fix tests + add TODOs + add hishtory version to requests
This commit is contained in:
parent
4f94698ca6
commit
757ebb9547
@ -585,7 +585,7 @@ func withLogging(h func(http.ResponseWriter, *http.Request)) http.Handler {
|
|||||||
h(&lrw, r)
|
h(&lrw, r)
|
||||||
|
|
||||||
duration := time.Since(start)
|
duration := time.Since(start)
|
||||||
fmt.Printf("%s %s %#v %s %s\n", r.RemoteAddr, r.Method, r.RequestURI, duration.String(), byteCountToString(responseData.size))
|
fmt.Printf("%s %s %#v %s %s %s\n", r.RemoteAddr, r.Method, r.RequestURI, r.Header.Get("X-Hishtory-Version"), duration.String(), byteCountToString(responseData.size))
|
||||||
}
|
}
|
||||||
return http.HandlerFunc(logFn)
|
return http.HandlerFunc(logFn)
|
||||||
}
|
}
|
||||||
|
@ -204,7 +204,7 @@ func TestDumpRequestAndResponse(t *testing.T) {
|
|||||||
shared.Check(t, err)
|
shared.Check(t, err)
|
||||||
reqBody, err := json.Marshal([]shared.EncHistoryEntry{entry1, entry2})
|
reqBody, err := json.Marshal([]shared.EncHistoryEntry{entry1, entry2})
|
||||||
shared.Check(t, err)
|
shared.Check(t, err)
|
||||||
submitReq := httptest.NewRequest(http.MethodPost, "/?user_id="+userId+"&requesting_device_id="+devId2, bytes.NewReader(reqBody))
|
submitReq := httptest.NewRequest(http.MethodPost, "/?user_id="+userId+"&requesting_device_id="+devId2+"&source_device_id="+devId1, bytes.NewReader(reqBody))
|
||||||
apiSubmitDumpHandler(nil, submitReq)
|
apiSubmitDumpHandler(nil, submitReq)
|
||||||
|
|
||||||
// Check that the dump request is no longer there for userId for either device ID
|
// Check that the dump request is no longer there for userId for either device ID
|
||||||
|
@ -203,7 +203,8 @@ func testIntegrationWithNewDevice(t *testing.T, tester shellTester) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Set the secret key to the previous secret key
|
// Set the secret key to the previous secret key
|
||||||
out = tester.RunInteractiveShell(t, `hishtory init `+userSecret)
|
out, err := tester.RunInteractiveShellRelaxed(t, `yes | hishtory init `+userSecret)
|
||||||
|
shared.Check(t, err)
|
||||||
if !strings.Contains(out, "Setting secret hishtory key to "+userSecret) {
|
if !strings.Contains(out, "Setting secret hishtory key to "+userSecret) {
|
||||||
t.Fatalf("Failed to re-init with the user secret: %v", out)
|
t.Fatalf("Failed to re-init with the user secret: %v", out)
|
||||||
}
|
}
|
||||||
@ -249,7 +250,7 @@ func testIntegrationWithNewDevice(t *testing.T, tester shellTester) {
|
|||||||
if strings.Contains(out, "thisisnotrecorded") {
|
if strings.Contains(out, "thisisnotrecorded") {
|
||||||
t.Fatalf("hishtory export contains a command that should not have been recorded, out=%#v", out)
|
t.Fatalf("hishtory export contains a command that should not have been recorded, out=%#v", out)
|
||||||
}
|
}
|
||||||
expectedOutputWithoutKey := "hishtory status\nhishtory query\nls /a\nls /bar\nls /foo\necho foo\necho bar\nhishtory enable\necho thisisrecorded\nhishtory query\nhishtory query foo\necho hello | grep complex | sed s/h/i/g; echo baz && echo \"fo 'o\"\nhishtory query complex\nhishtory query\necho mynewcommand\nhishtory query\nhishtory init %s\nhishtory query\necho mynewercommand\nhishtory query\nothercomputer\nhishtory query\n"
|
expectedOutputWithoutKey := "hishtory status\nhishtory query\nls /a\nls /bar\nls /foo\necho foo\necho bar\nhishtory enable\necho thisisrecorded\nhishtory query\nhishtory query foo\necho hello | grep complex | sed s/h/i/g; echo baz && echo \"fo 'o\"\nhishtory query complex\nhishtory query\necho mynewcommand\nhishtory query\nyes | hishtory init %s\nhishtory query\necho mynewercommand\nhishtory query\nothercomputer\nhishtory query\n"
|
||||||
expectedOutput := fmt.Sprintf(expectedOutputWithoutKey, userSecret)
|
expectedOutput := fmt.Sprintf(expectedOutputWithoutKey, userSecret)
|
||||||
if diff := cmp.Diff(expectedOutput, out); diff != "" {
|
if diff := cmp.Diff(expectedOutput, out); diff != "" {
|
||||||
t.Fatalf("hishtory export mismatch (-expected +got):\n%s\nout=%#v", diff, out)
|
t.Fatalf("hishtory export mismatch (-expected +got):\n%s\nout=%#v", diff, out)
|
||||||
|
@ -898,12 +898,21 @@ func getServerHostname() string {
|
|||||||
return "https://api.hishtory.dev"
|
return "https://api.hishtory.dev"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func httpClient() *http.Client {
|
||||||
|
return &http.Client{}
|
||||||
|
}
|
||||||
|
|
||||||
func ApiGet(path string) ([]byte, error) {
|
func ApiGet(path string) ([]byte, error) {
|
||||||
if os.Getenv("HISHTORY_SIMULATE_NETWORK_ERROR") != "" {
|
if os.Getenv("HISHTORY_SIMULATE_NETWORK_ERROR") != "" {
|
||||||
return nil, fmt.Errorf("simulated network error: dial tcp: lookup api.hishtory.dev")
|
return nil, fmt.Errorf("simulated network error: dial tcp: lookup api.hishtory.dev")
|
||||||
}
|
}
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
resp, err := http.Get(getServerHostname() + path)
|
req, err := http.NewRequest("GET", getServerHostname()+path, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to create GET: %v", err)
|
||||||
|
}
|
||||||
|
req.Header.Set("X-Hishtory-Version", "v0."+Version)
|
||||||
|
resp, err := httpClient().Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to GET %s%s: %v", getServerHostname(), path, err)
|
return nil, fmt.Errorf("failed to GET %s%s: %v", getServerHostname(), path, err)
|
||||||
}
|
}
|
||||||
@ -925,7 +934,13 @@ func ApiPost(path, contentType string, data []byte) ([]byte, error) {
|
|||||||
return nil, fmt.Errorf("simulated network error: dial tcp: lookup api.hishtory.dev")
|
return nil, fmt.Errorf("simulated network error: dial tcp: lookup api.hishtory.dev")
|
||||||
}
|
}
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
resp, err := http.Post(getServerHostname()+path, contentType, bytes.NewBuffer(data))
|
req, err := http.NewRequest("POST", getServerHostname()+path, bytes.NewBuffer(data))
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to create POST: %v", err)
|
||||||
|
}
|
||||||
|
req.Header.Set("Content-Type", contentType)
|
||||||
|
req.Header.Set("X-Hishtory-Version", "v0."+Version)
|
||||||
|
resp, err := httpClient().Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to POST %s: %v", path, err)
|
return nil, fmt.Errorf("failed to POST %s: %v", path, err)
|
||||||
}
|
}
|
||||||
|
17
hishtory.go
17
hishtory.go
@ -1,6 +1,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -49,7 +50,20 @@ func main() {
|
|||||||
}
|
}
|
||||||
lib.CheckFatalError(lib.Redact(ctx, query, force))
|
lib.CheckFatalError(lib.Redact(ctx, query, force))
|
||||||
case "init":
|
case "init":
|
||||||
// TODO: prompt people if they run hishtory init and already have a bunch of history entries
|
db, err := hctx.OpenLocalSqliteDb()
|
||||||
|
lib.CheckFatalError(err)
|
||||||
|
data, err := data.Search(db, "", 10)
|
||||||
|
lib.CheckFatalError(err)
|
||||||
|
if len(data) > 0 {
|
||||||
|
fmt.Printf("Your current hishtory profile has saved history entries, are you sure you want to run `init` and reset? [y/N]")
|
||||||
|
reader := bufio.NewReader(os.Stdin)
|
||||||
|
resp, err := reader.ReadString('\n')
|
||||||
|
lib.CheckFatalError(err)
|
||||||
|
if strings.TrimSpace(resp) != "y" {
|
||||||
|
fmt.Printf("Aborting init per user response of %#v\n", strings.TrimSpace(resp))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
lib.CheckFatalError(lib.Setup(os.Args))
|
lib.CheckFatalError(lib.Setup(os.Args))
|
||||||
case "install":
|
case "install":
|
||||||
lib.CheckFatalError(lib.Install())
|
lib.CheckFatalError(lib.Install())
|
||||||
@ -91,6 +105,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
fmt.Printf("Commit Hash: %s\n", GitCommit)
|
fmt.Printf("Commit Hash: %s\n", GitCommit)
|
||||||
case "update":
|
case "update":
|
||||||
|
// TODO: Add banner integration to update
|
||||||
lib.CheckFatalError(lib.Update(hctx.MakeContext()))
|
lib.CheckFatalError(lib.Update(hctx.MakeContext()))
|
||||||
case "-h":
|
case "-h":
|
||||||
fallthrough
|
fallthrough
|
||||||
|
Loading…
Reference in New Issue
Block a user