]> git.r.bdr.sh - rbdr/mobius/blob - hotline/access.go
Merge pull request #49 from jhalter/fix_1.2.3_client_no_agreement_behavior
[rbdr/mobius] / hotline / access.go
1 package hotline
2
3 import (
4 "encoding/binary"
5 "math/big"
6 )
7
8 const (
9 accessDeleteFile = 0 // File System Maintenance: Can Delete Files
10 accessUploadFile = 1 // File System Maintenance: Can Upload Files
11 accessDownloadFile = 2 // File System Maintenance: Can Download Files
12 accessRenameFile = 3 // File System Maintenance: Can Rename Files
13 accessMoveFile = 4 // File System Maintenance: Can Move Files
14 accessCreateFolder = 5 // File System Maintenance: Can Create Folders
15 accessDeleteFolder = 6 // File System Maintenance: Can Delete Folders
16 accessRenameFolder = 7 // File System Maintenance: Can Rename Folders
17 accessMoveFolder = 8 // File System Maintenance: Can Move Folders
18 accessReadChat = 9 // Chat: Can Read Chat
19 accessSendChat = 10 // Chat: Can Send Chat
20 accessOpenChat = 11 // Chat: Can Initial Private Chat
21 accessCloseChat = 12 // Present in the Hotline 1.9 protocol documentation, but seemingly unused
22 accessShowInList = 13 // Present in the Hotline 1.9 protocol documentation, but seemingly unused
23 accessCreateUser = 14 // User Maintenance: Can Create Accounts
24 accessDeleteUser = 15 // User Maintenance: Can Delete Accounts
25 accessOpenUser = 16 // User Maintenance: Can Read Accounts
26 accessModifyUser = 17 // User Maintenance: Can Modify Accounts
27 accessChangeOwnPass = 18 // Present in the Hotline 1.9 protocol documentation, but seemingly unused
28 accessSendPrivMsg = 19 // Messaging: Can Send Messages
29 accessNewsReadArt = 20 // News: Can Read Articles
30 accessNewsPostArt = 21 // News: Can Post Articles
31 accessDisconUser = 22 // User Maintenance: Can Disconnect Users (Note: Turns username red in user list)
32 accessCannotBeDiscon = 23 // User Maintenance: Cannot be Disconnected
33 accessGetClientInfo = 24 // User Maintenance: Can Get User Info
34 accessUploadAnywhere = 25 // File System Maintenance: Can Upload Anywhere
35 accessAnyName = 26 // Miscellaneous: Can User Any Name
36 accessNoAgreement = 27 // Miscellaneous: Don't Show Agreement
37 accessSetFileComment = 28 // File System Maintenance: Can Comment Files
38 accessSetFolderComment = 29 // File System Maintenance: Can Comment Folders
39 accessViewDropBoxes = 30 // File System Maintenance: Can View Drop Boxes
40 accessMakeAlias = 31 // File System Maintenance: Can Make Aliases
41 accessBroadcast = 32 // Messaging: Can Broadcast
42 accessNewsDeleteArt = 33 // News: Can Delete Articles
43 accessNewsCreateCat = 34 // News: Can Create Categories
44 accessNewsDeleteCat = 35 // News: Can Delete Categories
45 accessNewsCreateFldr = 36 // News: Can Create News Bundles
46 accessNewsDeleteFldr = 37 // News: Can Delete News Bundles
47 )
48
49 type accessBitmap [8]byte
50
51 func (bits *accessBitmap) Set(i int) {
52 bits[i/8] |= 1 << uint(7-i%8)
53 }
54
55 // authorize checks if 64 bit access slice contain has accessBit set
56 // TODO: refactor to use accessBitmap type
57 func authorize(access *[]byte, accessBit int) bool {
58 bits := big.NewInt(int64(binary.BigEndian.Uint64(*access)))
59
60 return bits.Bit(63-accessBit) == 1
61 }