12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- package user
- import (
- //"path/filepath"
- //"log"
- fs "imuslab.com/arozos/mod/filesystem"
- )
- /*
- Quota Handler
- author: tobychui
- This module handle the user storage quota and its related functions
- */
- //Return the user quota information, returning used / total
- func (u *User) HaveSpaceFor(fsh *fs.FileSystemHandler, vpath string) bool {
- realpath, err := fsh.FileSystemAbstraction.VirtualPathToRealPath(vpath, u.Username)
- if err != nil {
- return false
- }
- if u.StorageQuota.HaveSpace(fsh.FileSystemAbstraction.GetFileSize(realpath)) {
- return true
- } else {
- return false
- }
- }
- func (u *User) SetOwnerOfFile(fsh *fs.FileSystemHandler, vpath string) error {
- rpath, err := fsh.FileSystemAbstraction.VirtualPathToRealPath(vpath, u.Username)
- if err != nil {
- return err
- }
- //Check if it is user structured. If yes, add the filesize to user's quota
- if fsh.Hierarchy == "user" {
- //log.Println("Setting user ownership on: " + realpath)
- u.StorageQuota.AllocateSpace(fsh.FileSystemAbstraction.GetFileSize(rpath))
- }
- //Add to the fshandler database of this file owner
- err = fsh.CreateFileRecord(rpath, u.Username)
- return err
- }
- func (u *User) RemoveOwnershipFromFile(fsh *fs.FileSystemHandler, vpath string) error {
- realpath, err := fsh.FileSystemAbstraction.VirtualPathToRealPath(vpath, u.Username)
- if err != nil {
- return err
- }
- //Check if it is user structured. If yes, add the filesize to user's quota
- if fsh.Hierarchy == "user" {
- //log.Println("Removing user ownership on: " + realpath)
- u.StorageQuota.ReclaimSpace(fsh.FileSystemAbstraction.GetFileSize(realpath))
- }
- err = fsh.DeleteFileRecord(realpath)
- return err
- }
- func (u *User) IsOwnerOfFile(fsh *fs.FileSystemHandler, vpath string) bool {
- owner := u.GetFileOwner(fsh, vpath)
- if owner == u.Username {
- //This file is owned by this user
- return true
- } else {
- return false
- }
- }
- func (u *User) GetFileOwner(fsh *fs.FileSystemHandler, vpath string) string {
- realpath, err := fsh.FileSystemAbstraction.VirtualPathToRealPath(vpath, u.Username)
- if err != nil {
- return ""
- }
- if fsh.UUID == "user" {
- //This file is inside user's root. It must be this user's file
- return u.Username
- }
- owner, err := fsh.GetFileRecord(realpath)
- if err != nil {
- //Error occured. Either this file is not tracked or this file has no owner
- return ""
- }
- return owner
- }
|