// Adds a database to the serverContext given its Bucket. func (sc *serverContext) addDatabase(bucket base.Bucket, dbName string, syncFun *string, nag bool) (*context, error) { if dbName == "" { dbName = bucket.GetName() } if match, _ := regexp.MatchString(`^[a-z][-a-z0-9_$()+/]*$`, dbName); !match { return nil, fmt.Errorf("Illegal database name: %s", dbName) } if sc.databases[dbName] != nil { return nil, fmt.Errorf("Duplicate database name %q", dbName) } dbcontext, err := db.NewDatabaseContext(dbName, bucket) if err != nil { return nil, err } if syncFun != nil { if err := dbcontext.ApplySyncFun(*syncFun); err != nil { return nil, err } } if dbcontext.ChannelMapper == nil { if nag { base.Warn("Sync function undefined; using default") } // Always have a channel mapper object even if it does nothing: dbcontext.ChannelMapper, _ = channels.NewDefaultChannelMapper() } c := &context{ dbcontext: dbcontext, auth: dbcontext.Authenticator(), } sc.databases[dbName] = c return c, nil }