123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package appservice
- import (
- "io/ioutil"
- "regexp"
- "gopkg.in/yaml.v2"
- )
- // Registration contains the data in a Matrix appservice registration.
- // See https://matrix.org/docs/spec/application_service/unstable.html#registration
- type Registration struct {
- ID string `yaml:"id"`
- URL string `yaml:"url"`
- AppToken string `yaml:"as_token"`
- ServerToken string `yaml:"hs_token"`
- SenderLocalpart string `yaml:"sender_localpart"`
- RateLimited bool `yaml:"rate_limited"`
- Namespaces Namespaces `yaml:"namespaces"`
- }
- // CreateRegistration creates a Registration with random appservice and homeserver tokens.
- func CreateRegistration() *Registration {
- return &Registration{
- AppToken: RandomString(64),
- ServerToken: RandomString(64),
- }
- }
- // LoadRegistration loads a YAML file and turns it into a Registration.
- func LoadRegistration(path string) (*Registration, error) {
- data, err := ioutil.ReadFile(path)
- if err != nil {
- return nil, err
- }
- reg := &Registration{}
- err = yaml.Unmarshal(data, reg)
- if err != nil {
- return nil, err
- }
- return reg, nil
- }
- // Save saves this Registration into a file at the given path.
- func (reg *Registration) Save(path string) error {
- data, err := yaml.Marshal(reg)
- if err != nil {
- return err
- }
- return ioutil.WriteFile(path, data, 0600)
- }
- // YAML returns the registration in YAML format.
- func (reg *Registration) YAML() (string, error) {
- data, err := yaml.Marshal(reg)
- if err != nil {
- return "", err
- }
- return string(data), nil
- }
- // Namespaces contains the three areas that appservices can reserve parts of.
- type Namespaces struct {
- UserIDs []Namespace `yaml:"users,omitempty"`
- RoomAliases []Namespace `yaml:"aliases,omitempty"`
- RoomIDs []Namespace `yaml:"rooms,omitempty"`
- }
- // Namespace is a reserved namespace in any area.
- type Namespace struct {
- Regex string `yaml:"regex"`
- Exclusive bool `yaml:"exclusive"`
- }
- // RegisterUserIDs creates an user ID namespace registration.
- func (nslist *Namespaces) RegisterUserIDs(regex *regexp.Regexp, exclusive bool) {
- nslist.UserIDs = append(nslist.UserIDs, Namespace{
- Regex: regex.String(),
- Exclusive: exclusive,
- })
- }
- // RegisterRoomAliases creates an room alias namespace registration.
- func (nslist *Namespaces) RegisterRoomAliases(regex *regexp.Regexp, exclusive bool) {
- nslist.RoomAliases = append(nslist.RoomAliases, Namespace{
- Regex: regex.String(),
- Exclusive: exclusive,
- })
- }
- // RegisterRoomIDs creates an room ID namespace registration.
- func (nslist *Namespaces) RegisterRoomIDs(regex *regexp.Regexp, exclusive bool) {
- nslist.RoomIDs = append(nslist.RoomIDs, Namespace{
- Regex: regex.String(),
- Exclusive: exclusive,
- })
- }
|