Whitelist-API/README.org
2024-02-12 18:01:55 -06:00

12 KiB

Squad Whitelist Management

As a …

Admin

  • Someone who administrates the actual whitelisting service

Organization Owner/Admin

  • Someone who runs a Squad community, like Asgard Eternal
  • What should they be able to do?

Discord Bot

Commands

  • /link

    • Example: /link 7312312312395
    • Links user's discord ID with their provided steam64

      • If linked to another discord id, reject
      • Use the user's discord username for their username in the API
  • /group-link

    • Example: /group-link @Odin {group-uuid}
    • Links a Group on the API with a given discord ID for the role

      • If the Discord ID already exists, inform about it but allow
  • /list-groups

    • Example: /list-groups
    • Outputs:

      • Groups with Associated Discord Role

        • Example: @Odin | https://my-api.com/org/asgard/group-uuid

Events

  • on-member-update

    • For each member, look at the change in discord roles

      • If they had a role added to them that's a linked group, add them to the Group
      • If they don't have a linked Steam64, ping them in a channel to do so
  • on-startup

    • Hit up API for all members of linked roles
    • Check if the members are in those roles and modify as needed

API

General Layout

  • Org

    • Single Owner

      • All permissions Managers have
      • Org Perms

        • Toggle the active state
        • Delete
        • Rename
        • Add and remove org managers
        • Transfer ownership (member must be a manager of the org)
    • Managers

      • Group Perms

        • Delete
        • Create
        • Rename
        • Toggle active state
        • Manage group users
        • Manage group moderators
        • Manage group tags
        • Manage group names
      • Tag Perms

        • Delete
        • Create
        • Rename
    • Groups

      • Group

        • Notes
        • Members

          • Group Perms

            • Manage Users (Add or Remove Users)
            • Manage Moderators (Allow other users to manage the group)
        • Tags

          • Must be a tag that exists in the Org (reference a tag table)
        • Game Perms

          • Squad

            • Reserve
            • Demos
            • Kick
            • Ban
            • Etc.

Users

  • Table Name: users

    Key Type Constraints Description
    id UUID4 PRIMARY KEY
    steam64 DECIMAL UNIQUE Steam64 ID
    playfab_id TEXT UNIQUE Master Playfab ID
    discord_id DECIMAL UNIQUE
    superuser BOOLEAN NOT NULL DEFAULT false

Organizations

  • Table Name: orgs

    Key Type Constraints Description
    id UUID4 PRIMARY KEY
    name VARCHAR(32) UNIQUE NOT NULL
    owner_id UUID4 REFERENCES users(id)
    discord_server_id DECIMAL
    active BOOLEAN NOT NULL DEFAULT true
Org Managers
  • Table Name: org_managers

    Key Type Constraints Description
    id UUID4 PRIMARY KEY
    user_id DECIMAL REFERENCES users(id) ON DELETE CASCADE
    org_id UUID4 REFERENCES orgs(id) ON DELETE CASCADE
    active BOOLEAN NOT NULL DEFAULT true

    Additional Constraints:

    • UNIQUE(user_id, org_id)
Tags
  • Table Name: org_tags

    Key Type Constraints Description
    id UUID4 PRIMARY KEY
    name VARCHAR(32) UNIQUE (name, org_id) NOT NULL
    org_id UUID4 REFERENCES orgs(id)
Groups
  • Table Name: org_groups

    Key Type Constraints Description
    id UUID4 PRIMARY KEY
    name VARCHAR(32) NOT NULL UNIQUE(name,org_id)
    org_id UUID4 REFERENCES orgs(id) ON DELETE CASCADE
    active BOOLEAN NOT NULL DEFAULT true
  • Additional Constraints

    • UNIQUE (name, org_id)
Group Tags
  • Table Name: org_group_tags

    Key Type Constraints Description
    id UUID4 PRIMARY KEY
    group_id UUID4 REFERENCES org_groups(id) ON DELETE CASCADE
    tag_id UUID4 REFERENCES org_tags(id) ON DELETE CASCADE
  • Additional Constraints

    • UNIQUE (group_id, tag_id)
Group Notes
  • Table Name: org_group_notes

    Key Type Constraints Description
    id UUID4 PRIMARY KEY
    group_id UUID4 UNIQUE REFERENCES org_groups(id) ON DELETE CASCADE
    note VARCHAR(512) NOT NULL
Group Members
  • Table Name: org_group_members

    Key Type Constraints Description
    id UUID4 PRIMARY KEY
    user_id DECIMAL REFERENCES users(id) ON DELETE CASCADE
    group_id UUID4 REFERENCES org_groups(id) ON DELETE CASCADE
    manage_users BOOLEAN NOT NULL DEFAULT false Allowed to add or remove members from group
    manage_mods BOOLEAN NOT NULL DEFAULT false Allowed to add or remove moderators to group
    manage_remote_import BOOLEAN NOT NULL DEFAULT false Allowed to set URL to import members from
    owner BOOLEAN NOT NULL DEFAULT false UNIQUE Has all permissions, cannot be removed from the group by a moderator
  • Additional Constraints

    • UNIQUE (user_id, group_id)
Group Squad Details
  • Table Name: org_group_squad_details

    Key Type Constraints Description
    id UUID4 PRIMARY KEY
    group_id UUID4 REFERENCES org_groups(id) UNIQUE ON DELETE CASCADE
    remote_admin_list VARCHAR(256)
    remote_admin_list_group VARCHAR(32)
    perm_changemap BOOLEAN NOT NULL DEFAULT false Allowed to change the current map
    perm_pause BOOLEAN NOT NULL DEFAULT false Allowed to pause server gameplay
    perm_cheat BOOLEAN NOT NULL DEFAULT false Allowed to use server cheat commands
    perm_private BOOLEAN NOT NULL DEFAULT false Allowed to password protect the server
    perm_balance BOOLEAN NOT NULL DEFAULT false Allowed to ignore team balance
    perm_chat BOOLEAN NOT NULL DEFAULT false Allowed to access admin chat and make server broadcasts
    perm_kick BOOLEAN NOT NULL DEFAULT false Allowed to kick players
    perm_ban BOOLEAN NOT NULL DEFAULT false Allowed to ban players
    perm_config BOOLEAN NOT NULL DEFAULT false Allowed to change server config
    perm_cameraman BOOLEAN NOT NULL DEFAULT false Allowed to admin spectate mode
    perm_immune BOOLEAN NOT NULL DEFAULT false Allowed to cannot be kicked / banned
    perm_manageserver BOOLEAN NOT NULL DEFAULT false Allowed to shutdown server
    perm_featuretest BOOLEAN NOT NULL DEFAULT false Allowed to any features added for testing by dev team
    perm_reserve BOOLEAN NOT NULL DEFAULT false Allowed to reserve slot
    perm_demos BOOLEAN NOT NULL DEFAULT false Allowed to record Demos on the server side via admin commands
    perm_clientdemos BOOLEAN NOT NULL DEFAULT false Allowed to record Demos on the client side via commands or the replay UI
    perm_debug BOOLEAN NOT NULL DEFAULT false Allowed to Show admin stats command and other debugging info
    perm_teamchange BOOLEAN NOT NULL DEFAULT false Allowed to no timer limits on team change
    perm_forceteamchange BOOLEAN NOT NULL DEFAULT false Allowed to can issue the ForceTeamChange command
    perm_canseeadminchat BOOLEAN NOT NULL DEFAULT false Allowed to this group can see the admin chat and teamkill/admin-join notifications