summaryrefslogtreecommitdiff
path: root/conf.go
diff options
context:
space:
mode:
Diffstat (limited to 'conf.go')
-rw-r--r--conf.go108
1 files changed, 7 insertions, 101 deletions
diff --git a/conf.go b/conf.go
index 8e373c0..7288a89 100644
--- a/conf.go
+++ b/conf.go
@@ -25,37 +25,17 @@
package rhimport
import (
- "database/sql"
- "fmt"
- _ "github.com/go-sql-driver/mysql"
"github.com/vaughan0/go-ini"
)
-type getPasswordResult struct {
- password string
- err error
-}
-
-type getPasswordRequest struct {
- username string
- cached bool
- response chan getPasswordResult
-}
-
type Config struct {
- configfile string
- RDXportEndpoint string
- TempDir string
- db_host string
- db_user string
- db_passwd string
- db_db string
- dbh *sql.DB
- password_cache map[string]string
- getPasswordChan chan getPasswordRequest
- dbGetPasswordStmt *sql.Stmt
- quit chan bool
- done chan bool
+ configfile string
+ RDXportEndpoint string
+ TempDir string
+ db_host string
+ db_user string
+ db_passwd string
+ db_db string
}
func get_ini_value(file ini.File, section string, key string, dflt string) string {
@@ -79,87 +59,13 @@ func (self *Config) read_config_file() error {
return nil
}
-func (self *Config) init_database() (err error) {
- dsn := fmt.Sprintf("%s:%s@tcp(%s:3306)/%s", self.db_user, self.db_passwd, self.db_host, self.db_db)
- if self.dbh, err = sql.Open("mysql", dsn); err != nil {
- return
- }
- if self.dbGetPasswordStmt, err = self.dbh.Prepare("select PASSWORD from USERS where LOGIN_NAME = ?"); err != nil {
- return
- }
-
- return
-}
-
-func (self *Config) getPassword(username string, cached bool) (pwd string, err error) {
-
- if cached {
- pwd = self.password_cache[username]
- }
-
- if pwd == "" {
- err = self.dbGetPasswordStmt.QueryRow(username).Scan(&pwd)
- if err != nil {
- if err == sql.ErrNoRows {
- err = fmt.Errorf("user '%s' not known by rivendell", username)
- }
- return
- }
- self.password_cache[username] = pwd
- }
-
- return
-}
-
-func (self *Config) dispatchRequests() {
- defer func() { self.done <- true }()
- for {
- select {
- case <-self.quit:
- return
- case req := <-self.getPasswordChan:
- if req.cached {
- rhdl.Println("Config: got getPassword request for", req.username, "(cached)")
- } else {
- rhdl.Println("Config: got getPassword request for", req.username, "(not cached)")
- }
- pwd, err := self.getPassword(req.username, req.cached)
- req.response <- getPasswordResult{pwd, err}
- }
- }
-}
-
-func (self *Config) Cleanup() {
- self.quit <- true
- <-self.done
- close(self.quit)
- close(self.done)
- close(self.getPasswordChan)
- if self.dbh != nil {
- self.dbh.Close()
- }
- if self.dbGetPasswordStmt != nil {
- self.dbGetPasswordStmt.Close()
- }
-}
-
func NewConfig(configfile, rdxport_endpoint, temp_dir *string) (conf *Config, err error) {
conf = new(Config)
conf.configfile = *configfile
if err = conf.read_config_file(); err != nil {
return
}
- conf.quit = make(chan bool)
- conf.done = make(chan bool)
conf.RDXportEndpoint = *rdxport_endpoint
conf.TempDir = *temp_dir
- conf.password_cache = make(map[string]string)
- conf.getPasswordChan = make(chan getPasswordRequest)
-
- if err = conf.init_database(); err != nil {
- return
- }
-
- go conf.dispatchRequests()
return
}