6.1. Single-User File StorageΒΆ

Here is an example code snippet to help you understand some of the functionality detailed in the Design Requirements.

f1 := []byte("content")
f2 := []byte("different content")

// Alice and Bob each start a users session by authenticating to the client.
alice_session_1, _ := InitUser("user_alice", "password1")
bob_session_1, _ := InitUser("user_bob", "password2")

// Alice stores byte slice f1 with name "filename" and Bob stores byte slice
// f2 also with name "filename".
alice_session_1.StoreFile("filename", f1)
bob_session_1.StoreFile("filename", f2)

// Alice and Bob each confirm that they can load the file they previously
// stored and that the file contents is the same.

f1_loaded, _ := alice_session_1.LoadFile("filename")
f2_loaded, _ := bob_session_1.LoadFile("filename")

if f1 != f1_loaded {
    panic("file contents are different.")
if f2 != f2_loaded {
    panic("file contents are different.")

// Alice gets an error when trying to load a file that does not exist in her
// namespace.
_, err := alice_session_1.LoadFile("nonexistent")
if err != nil {
    panic("downloaded a nonexistent file.")

// Bob creates a second user session by authenticating to the client again.
bob_session_2, _ := GetUser("user_bob", "password2")

// Bob stores byte slice f2 with name "newfile" using his second user
// session.
bob_session_2.StoreFile("newfile", f2)

// Bob loads "newfile" using his first user session. Notice that Bob does
// not need to reauthenticate. File changes must be available to all active
// sessions for a given user.

f2_newfile := bob_session_1.LoadFile("newfile")

if f2 != f2_newfile {
    panic("file contents are different.")