| 581 | } |
| 582 | |
| 583 | func (up usersProfile) newUser(u config.User) (*user, error) { |
| 584 | c, ok := up.clusters[u.ToCluster] |
| 585 | if !ok { |
| 586 | return nil, fmt.Errorf("unknown `to_cluster` %q", u.ToCluster) |
| 587 | } |
| 588 | var cu *clusterUser |
| 589 | if cu, ok = c.users[u.ToUser]; !ok { |
| 590 | return nil, fmt.Errorf("unknown `to_user` %q in cluster %q", u.ToUser, u.ToCluster) |
| 591 | } else if u.IsWildcarded { |
| 592 | // a wildcarded user is mapped to this cluster user |
| 593 | // used to check if a proper user to send heartbeat exists |
| 594 | cu.isWildcarded = true |
| 595 | } |
| 596 | |
| 597 | var queueCh chan struct{} |
| 598 | if u.MaxQueueSize > 0 { |
| 599 | queueCh = make(chan struct{}, u.MaxQueueSize) |
| 600 | } |
| 601 | |
| 602 | var cc *cache.AsyncCache |
| 603 | if len(u.Cache) > 0 { |
| 604 | cc = up.caches[u.Cache] |
| 605 | if cc == nil { |
| 606 | return nil, fmt.Errorf("unknown `cache` %q", u.Cache) |
| 607 | } |
| 608 | } |
| 609 | |
| 610 | var params *paramsRegistry |
| 611 | if len(u.Params) > 0 { |
| 612 | params = up.params[u.Params] |
| 613 | if params == nil { |
| 614 | return nil, fmt.Errorf("unknown `params` %q", u.Params) |
| 615 | } |
| 616 | } |
| 617 | |
| 618 | return &user{ |
| 619 | name: u.Name, |
| 620 | password: u.Password, |
| 621 | toCluster: u.ToCluster, |
| 622 | toUser: u.ToUser, |
| 623 | maxConcurrentQueries: u.MaxConcurrentQueries, |
| 624 | maxExecutionTime: time.Duration(u.MaxExecutionTime), |
| 625 | reqPerMin: u.ReqPerMin, |
| 626 | queueCh: queueCh, |
| 627 | maxQueueTime: time.Duration(u.MaxQueueTime), |
| 628 | reqPacketSizeTokenLimiter: rate.NewLimiter(rate.Limit(u.ReqPacketSizeTokensRate), int(u.ReqPacketSizeTokensBurst)), |
| 629 | reqPacketSizeTokensBurst: u.ReqPacketSizeTokensBurst, |
| 630 | reqPacketSizeTokensRate: u.ReqPacketSizeTokensRate, |
| 631 | allowedNetworks: u.AllowedNetworks, |
| 632 | denyHTTP: u.DenyHTTP, |
| 633 | denyHTTPS: u.DenyHTTPS, |
| 634 | allowCORS: u.AllowCORS, |
| 635 | isWildcarded: u.IsWildcarded, |
| 636 | cache: cc, |
| 637 | params: params, |
| 638 | }, nil |
| 639 | } |
| 640 | |