1.4 Design Document
The final design document will be graded on effort and completion. There are no page limits on the assignment, but less than two pages are enough to cover everything you need. There is no minimum length, as long as you cover all of the required portions. Your design document should contain a mandatory diagram. The diagram can be created in any format of your choosing, using any tool of your choosing (hand-drawn, Miro, Draw.io, Docs, Publisher, etc.), and/or you could use the provided template (LaTex, PDF), as long as it clearly communicates the relationships between your structs in the Datastore.
Like any technical writing, your design document needs to be clean and well formatted. In addition, it must answer the following questions, not necessarily in this order.
Data Structures
What data structures are you going to use? List any struct
definitions that you plan on including, along with the attributes these structs will contain. We’d recommend starting with a few core data structures (e.g. struct user
, struct file
, etc.), and adding additional attributes and structs as you need them.
User Authentication
How will you authenticate users? What information will you store in Datastore/Keystore for each user? How will you ensure that a user can have multiple client instances (e.g. laptop, phone, etc.) running simultaneously?
Relevant Client API Methods: InitUser
, GetUser
File Storage and Retrieval
How will a user store their files? How will a user retrieve their files from the server? How will your design support efficient file append?
Relevant Client API Methods: LoadFile
, StoreFile
, AppendToFile
File Sharing and Revocation
How will a user share files with another user? How does this shared user access the shared file after accepting the invitation? How will a user revoke a different user’s access to a file? How will you ensure a revoked user cannot take any malicious actions on a file?
Relevant Client API Methods: CreateInvitation
, AcceptInvitation
Helper Methods
Are there helper methods that you’ll create? There are a few in particular that may help simplify your implementation.
Hint: think about authenticated encryption.