コード例 #1
0
ファイル: session.go プロジェクト: JonathanLogan/mute
func addSessionKey(ss session.Store, ke *uid.KeyEntry) error {
	ct := uint64(times.Now()) + CleanupTime
	return ss.AddSessionKey(ke.HASH, string(ke.JSON()), ke.PrivateKey(), ct)
}
コード例 #2
0
ファイル: sessionkey_test.go プロジェクト: JonathanLogan/mute
func TestSessionKeys(t *testing.T) {
	tmpdir, keyDB, err := createDB()
	if err != nil {
		t.Fatal(err)
	}
	defer os.RemoveAll(tmpdir)
	defer keyDB.Close()
	var (
		ke1 uid.KeyEntry
		ke2 uid.KeyEntry
	)
	if err := ke1.InitDHKey(cipher.RandReader); err != nil {
		t.Fatal(err)
	}
	if err := ke2.InitDHKey(cipher.RandReader); err != nil {
		t.Fatal(err)
	}
	ct := uint64(times.Now()) + msg.CleanupTime

	jsn1 := string(ke1.JSON())
	pk1 := ke1.PrivateKey()
	if err := keyDB.AddSessionKey(ke1.HASH, jsn1, pk1, ct); err != nil {
		t.Fatal(err)
	}

	jsn2 := string(ke2.JSON())
	pk2 := ke2.PrivateKey()
	if err := keyDB.AddSessionKey(ke2.HASH, jsn2, pk2, ct); err != nil {
		t.Fatal(err)
	}

	jsn1db, pk1db, err := keyDB.GetSessionKey(ke1.HASH)
	if err != nil {
		t.Fatal(err)
	}
	if jsn1 != jsn1db {
		t.Error("jsn1 and jsn1db differ")
	}
	if pk1 != pk1db {
		t.Error("pk1 and pk1db differ")
	}

	jsn2db, pk2db, err := keyDB.GetSessionKey(ke2.HASH)
	if err != nil {
		t.Fatal(err)
	}
	if jsn2 != jsn2db {
		t.Error("jsn2 and jsn2db differ")
	}
	if pk2 != pk2db {
		t.Error("pk2 and pk2db differ")
	}

	// getting undefined key should return sql.ErrNoRows
	_, _, err = keyDB.GetSessionKey("undefined")
	if err != sql.ErrNoRows {
		t.Error("should return sql.ErrNoRows")
	}

	// deleting non-existing key should not fail
	if err := keyDB.DelPrivSessionKey("undefined"); err != nil {
		t.Error(err)
	}

	// delete private key
	if err := keyDB.DelPrivSessionKey(ke1.HASH); err != nil {
		t.Fatal(err)
	}
	_, pk, err := keyDB.GetSessionKey(ke1.HASH)
	if err != nil {
		t.Fatal(err)
	}
	if pk != "" {
		t.Error("pk should be empty")
	}

	// deleting key again should not fail
	if err := keyDB.DelPrivSessionKey(ke1.HASH); err != nil {
		t.Error(err)
	}
}