]> git.r.bdr.sh - rbdr/mobius/blobdiff - hotline/access.go
Register server address on local network with Bonjour
[rbdr/mobius] / hotline / access.go
index 1bee72c00b4046c159e3a01b88768d00b24b68df..2d78464177e22e29c76889a873e04aedd8c51d97 100644 (file)
@@ -1,62 +1,52 @@
 package hotline
 
-import (
-       "encoding/binary"
-       "math/big"
-)
-
 const (
-       // File System Maintenance
-       accessDeleteFile   = 0
-       accessUploadFile   = 1
-       accessDownloadFile = 2 // Can Download Files
-       accessRenameFile   = 3
-       accessMoveFile     = 4
-       accessCreateFolder = 5
-       accessDeleteFolder = 6
-       accessRenameFolder = 7
-       accessMoveFolder   = 8
-       accessReadChat     = 9
-       accessSendChat     = 10
-       accessOpenChat     = 11
-       // accessCloseChat        = 12 // Documented but unused?
-       // accessShowInList       = 13 // Documented but unused?
-       accessCreateUser = 14
-       accessDeleteUser = 15
-       accessOpenUser   = 16
-       accessModifyUser = 17
-       // accessChangeOwnPass    = 18 // Documented but unused?
-       // accessSendPrivMsg      = 19 // This doesn't do what it seems like it should do. TODO: Investigate
-       accessNewsReadArt    = 20
-       accessNewsPostArt    = 21
-       accessDisconUser     = 22 // Toggles red user name in user list
-       accessCannotBeDiscon = 23
-       accessGetClientInfo  = 24
-       accessUploadAnywhere = 25
-       accessAnyName        = 26
-       // accessNoAgreement      = 27
-       accessSetFileComment   = 28
-       accessSetFolderComment = 29
-       accessViewDropBoxes    = 30
-       accessMakeAlias        = 31
-       accessBroadcast        = 32
-       accessNewsDeleteArt    = 33
-       accessNewsCreateCat    = 34
-       // accessNewsDeleteCat    = 35
-       accessNewsCreateFldr = 36
-       // accessNewsDeleteFldr   = 37
+       AccessDeleteFile       = 0  // File System Maintenance: Can Delete Files
+       AccessUploadFile       = 1  // File System Maintenance: Can Upload Files
+       AccessDownloadFile     = 2  // File System Maintenance: Can Download Files
+       AccessRenameFile       = 3  // File System Maintenance: Can Rename Files
+       AccessMoveFile         = 4  // File System Maintenance: Can Move Files
+       AccessCreateFolder     = 5  // File System Maintenance: Can Create Folders
+       AccessDeleteFolder     = 6  // File System Maintenance: Can Delete Folders
+       AccessRenameFolder     = 7  // File System Maintenance: Can Rename Folders
+       AccessMoveFolder       = 8  // File System Maintenance: Can Move Folders
+       AccessReadChat         = 9  // Chat: Can Read Chat
+       AccessSendChat         = 10 // Chat: Can Send Chat
+       AccessOpenChat         = 11 // Chat: Can Initial Private Chat
+       AccessCloseChat        = 12 // Present in the Hotline 1.9 protocol documentation, but seemingly unused
+       AccessShowInList       = 13 // Present in the Hotline 1.9 protocol documentation, but seemingly unused
+       AccessCreateUser       = 14 // User Maintenance: Can Create Accounts
+       AccessDeleteUser       = 15 // User Maintenance: Can Delete Accounts
+       AccessOpenUser         = 16 // User Maintenance: Can Read Accounts
+       AccessModifyUser       = 17 // User Maintenance: Can Modify Accounts
+       AccessChangeOwnPass    = 18 // Present in the Hotline 1.9 protocol documentation, but seemingly unused
+       AccessNewsReadArt      = 20 // News: Can Read Articles
+       AccessNewsPostArt      = 21 // News: Can Post Articles
+       AccessDisconUser       = 22 // User Maintenance: Can Disconnect Users (Note: Turns username red in user list)
+       AccessCannotBeDiscon   = 23 // User Maintenance: Cannot be Disconnected
+       AccessGetClientInfo    = 24 // User Maintenance: Can Get User Info
+       AccessUploadAnywhere   = 25 // File System Maintenance: Can Upload Anywhere
+       AccessAnyName          = 26 // Miscellaneous: Can User Any Name
+       AccessNoAgreement      = 27 // Miscellaneous: Don't Show Agreement
+       AccessSetFileComment   = 28 // File System Maintenance: Can Comment Files
+       AccessSetFolderComment = 29 // File System Maintenance: Can Comment Folders
+       AccessViewDropBoxes    = 30 // File System Maintenance: Can View Drop Boxes
+       AccessMakeAlias        = 31 // File System Maintenance: Can Make Aliases
+       AccessBroadcast        = 32 // Messaging: Can Broadcast
+       AccessNewsDeleteArt    = 33 // News: Can Delete Articles
+       AccessNewsCreateCat    = 34 // News: Can Create Categories
+       AccessNewsDeleteCat    = 35 // News: Can Delete Categories
+       AccessNewsCreateFldr   = 36 // News: Can Create News Bundles
+       AccessNewsDeleteFldr   = 37 // News: Can Delete News Bundles
+       AccessSendPrivMsg      = 40 // Messaging: Can Send Messages (Note: 1.9 protocol doc incorrectly says this is bit 19)
 )
 
-type accessBitmap [8]byte
+type AccessBitmap [8]byte
 
-func (bits *accessBitmap) Set(i int) {
+func (bits *AccessBitmap) Set(i int) {
        bits[i/8] |= 1 << uint(7-i%8)
 }
 
-// authorize checks if 64 bit access slice contain has accessBit set
-// TODO: refactor to use accessBitmap type
-func authorize(access *[]byte, accessBit int) bool {
-       bits := big.NewInt(int64(binary.BigEndian.Uint64(*access)))
-
-       return bits.Bit(63-accessBit) == 1
+func (bits *AccessBitmap) IsSet(i int) bool {
+       return bits[i/8]&(1<<uint(7-i%8)) != 0
 }