router-webui (Go, standard library only) edits settings.json: host name, WAN (DHCP or PPPoE), LANs with DHCP, and the raw JSON for the rest; keys the forms do not know are kept. It applies and confirms by starting router-apply.service and router-confirm.service, which a switch never restarts, and shows the build log and the rollback countdown. HTTPS with a self-signed certificate, a PBKDF2 password hash, CSRF tokens and an Origin check; reachable from management LANs only (new router.managementPorts). router-apply records the settings it built and router-confirm keeps them as settings.confirmed.json (new rollback.onConfirm hook), so the UI can tell unapplied changes and discard them. checks.apply now also logs in from a LAN client, discards the change left by the rollback, edits the DHCP pool, applies and confirms. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
20 lines
459 B
Go
20 lines
459 B
Go
package main
|
|
|
|
import "testing"
|
|
|
|
func TestPasswordHash(t *testing.T) {
|
|
h, err := hashPassword("correct horse")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if ok, err := checkPassword(h, "correct horse"); !ok || err != nil {
|
|
t.Fatalf("right password rejected: %v", err)
|
|
}
|
|
if ok, _ := checkPassword(h, "wrong"); ok {
|
|
t.Fatal("wrong password accepted")
|
|
}
|
|
if _, err := checkPassword("plaintext", "plaintext"); err == nil {
|
|
t.Fatal("garbage hash accepted")
|
|
}
|
|
}
|