aboutsummaryrefslogtreecommitdiff
path: root/access.go
diff options
context:
space:
mode:
authorJeff Halter <868228+jhalter@users.noreply.github.com>2021-07-24 17:54:17 -0700
committerJeff Halter <868228+jhalter@users.noreply.github.com>2021-07-24 17:54:17 -0700
commit6988a0571d5d37ea0f38ee3e4066533158f608bc (patch)
tree172010de54ea7e732d7daa836db659021dc8a933 /access.go
Initial squashed commit
Diffstat (limited to 'access.go')
-rw-r--r--access.go59
1 files changed, 59 insertions, 0 deletions
diff --git a/access.go b/access.go
new file mode 100644
index 0000000..21b438f
--- /dev/null
+++ b/access.go
@@ -0,0 +1,59 @@
+package hotline
+
+import (
+ "encoding/binary"
+ "math/big"
+)
+
+const (
+ accessAlwaysAllow = -1 // Some transactions are always allowed
+
+ // 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
+)
+
+func authorize(access *[]byte, accessBit int) bool {
+ if accessBit == accessAlwaysAllow {
+ return true
+ }
+ accessBitmap := big.NewInt(int64(binary.BigEndian.Uint64(*access)))
+
+ return accessBitmap.Bit(63-accessBit) == 1
+}