-
Notifications
You must be signed in to change notification settings - Fork 119
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Support for NTLM authentication added (#109)
* Support for NTLM authentication added To support NTLM authentication, a database is added as an authentication source. Currently, only the configuration file is supported as a database. Database authentication supports Basic and NTLM authentication protcols. ServerConfig.BasicAuthEnabled renamed to LocalEnabled as Basic auth can be used with NTLM or Local.
- Loading branch information
Showing
16 changed files
with
947 additions
and
64 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
package config | ||
|
||
import ( | ||
"github.com/knadh/koanf/parsers/yaml" | ||
"github.com/knadh/koanf/providers/confmap" | ||
"github.com/knadh/koanf/providers/file" | ||
"github.com/knadh/koanf/v2" | ||
"log" | ||
"os" | ||
) | ||
|
||
type Configuration struct { | ||
Users []UserConfig `koanf:"users"` | ||
} | ||
|
||
type UserConfig struct { | ||
Username string `koanf:"username"` | ||
Password string `koanf:"password"` | ||
} | ||
|
||
var Conf Configuration | ||
|
||
func Load(configFile string) Configuration { | ||
|
||
var k = koanf.New(".") | ||
|
||
k.Load(confmap.Provider(map[string]interface{}{}, "."), nil) | ||
|
||
if _, err := os.Stat(configFile); os.IsNotExist(err) { | ||
log.Printf("Config file %s not found, skipping config file", configFile) | ||
} else { | ||
if err := k.Load(file.Provider(configFile), yaml.Parser()); err != nil { | ||
log.Fatalf("Error loading config from file: %v", err) | ||
} | ||
} | ||
|
||
koanfTag := koanf.UnmarshalConf{Tag: "koanf"} | ||
k.UnmarshalWithConf("Users", &Conf.Users, koanfTag) | ||
|
||
return Conf | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
package database | ||
|
||
import ( | ||
"github.com/bolkedebruin/rdpgw/cmd/auth/config" | ||
) | ||
|
||
type Config struct { | ||
users map[string]config.UserConfig | ||
} | ||
|
||
func NewConfig(users []config.UserConfig) *Config { | ||
usersMap := map[string]config.UserConfig{} | ||
|
||
for _, user := range users { | ||
usersMap[user.Username] = user | ||
} | ||
|
||
return &Config{ | ||
users: usersMap, | ||
} | ||
} | ||
|
||
func (c *Config) GetPassword (username string) string { | ||
return c.users[username].Password | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package database | ||
|
||
import ( | ||
"github.com/bolkedebruin/rdpgw/cmd/auth/config" | ||
"testing" | ||
) | ||
|
||
func createTestDatabase () (Database) { | ||
var users = []config.UserConfig{} | ||
|
||
user1 := config.UserConfig{} | ||
user1.Username = "my_username" | ||
user1.Password = "my_password" | ||
users = append(users, user1) | ||
|
||
user2 := config.UserConfig{} | ||
user2.Username = "my_username2" | ||
user2.Password = "my_password2" | ||
users = append(users, user2) | ||
|
||
config := NewConfig(users) | ||
|
||
return config | ||
} | ||
|
||
func TestDatabaseConfigValidUsername(t *testing.T) { | ||
database := createTestDatabase() | ||
|
||
if database.GetPassword("my_username") != "my_password" { | ||
t.Fatalf("Wrong password returned") | ||
} | ||
if database.GetPassword("my_username2") != "my_password2" { | ||
t.Fatalf("Wrong password returned") | ||
} | ||
} | ||
|
||
func TestDatabaseInvalidUsername(t *testing.T) { | ||
database := createTestDatabase() | ||
|
||
if database.GetPassword("my_invalid_username") != "" { | ||
t.Fatalf("Non empty password returned for invalid username") | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package database | ||
|
||
type Database interface { | ||
GetPassword (username string) string | ||
} |
Oops, something went wrong.