rasmus #4
							
								
								
									
										16
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								go.mod
									
									
									
									
									
								
							| @@ -1,12 +1,12 @@ | |||||||
| module godoor | module godoor | ||||||
|  |  | ||||||
| go 1.18 | go 1.21 | ||||||
|  |  | ||||||
| require ( | require ( | ||||||
| 	github.com/joho/godotenv v1.5.1 | 	github.com/joho/godotenv v1.5.1 | ||||||
| 	github.com/prometheus/client_golang v1.16.0 | 	github.com/prometheus/client_golang v1.16.0 | ||||||
| 	github.com/warthog618/gpiod v0.8.0 | 	github.com/warthog618/gpiod v0.8.2 | ||||||
| 	golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 | 	golang.org/x/crypto v0.12.0 | ||||||
| ) | ) | ||||||
|  |  | ||||||
| require ( | require ( | ||||||
| @@ -14,9 +14,9 @@ require ( | |||||||
| 	github.com/cespare/xxhash/v2 v2.2.0 // indirect | 	github.com/cespare/xxhash/v2 v2.2.0 // indirect | ||||||
| 	github.com/golang/protobuf v1.5.3 // indirect | 	github.com/golang/protobuf v1.5.3 // indirect | ||||||
| 	github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect | 	github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect | ||||||
| 	github.com/prometheus/client_model v0.3.0 // indirect | 	github.com/prometheus/client_model v0.4.0 // indirect | ||||||
| 	github.com/prometheus/common v0.42.0 // indirect | 	github.com/prometheus/common v0.44.0 // indirect | ||||||
| 	github.com/prometheus/procfs v0.10.1 // indirect | 	github.com/prometheus/procfs v0.11.1 // indirect | ||||||
| 	golang.org/x/sys v0.8.0 // indirect | 	golang.org/x/sys v0.11.0 // indirect | ||||||
| 	google.golang.org/protobuf v1.30.0 // indirect | 	google.golang.org/protobuf v1.31.0 // indirect | ||||||
| ) | ) | ||||||
|   | |||||||
							
								
								
									
										41
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								go.sum
									
									
									
									
									
								
							| @@ -3,38 +3,45 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r | |||||||
| github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= | github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= | ||||||
| github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= | github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= | ||||||
| github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= | ||||||
|  | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||||
| github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | ||||||
| github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= |  | ||||||
| github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= | github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= | ||||||
| github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= | github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= | ||||||
| github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= | github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= | ||||||
| github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||||||
| github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= | github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= | ||||||
|  | github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||||||
| github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= | github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= | ||||||
| github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= | github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= | ||||||
| github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= | github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= | ||||||
| github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= | github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= | ||||||
| github.com/pilebones/go-udev v0.0.0-20180820235104-043677e09b13 h1:Y+ynP+0QIjUejN2tsuIlWOJG1CThJy6amRuWlBL94Vg= | github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= | ||||||
|  | github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | ||||||
| github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | ||||||
|  | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||||||
| github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= | github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= | ||||||
| github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= | github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= | ||||||
| github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= | github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= | ||||||
| github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= | github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= | ||||||
| github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= | github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= | ||||||
| github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= | github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= | ||||||
| github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= | github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI= | ||||||
| github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= | github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY= | ||||||
| github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= | github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= | ||||||
| github.com/warthog618/gpiod v0.8.0 h1:qxH9XVvWHpTxzWFSndBcujFyNH5zVRzHM63tcmm85o4= | github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= | ||||||
| github.com/warthog618/gpiod v0.8.0/go.mod h1:a7Csa+IJtDBZ39++zC/6Srjo01qWejt/5velrDWuNkY= | github.com/warthog618/go-gpiosim v0.1.0 h1:2rTMTcKUVZxpUuvRKsagnKAbKpd3Bwffp87xywEDVGI= | ||||||
| golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 h1:tkVvjkPTB7pnW3jnid7kNyAMPVWllTNOf/qKDze4p9o= | github.com/warthog618/go-gpiosim v0.1.0/go.mod h1:Ngx/LYI5toxHr4E+Vm6vTgCnt0of0tktsSuMUEJ2wCI= | ||||||
| golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= | github.com/warthog618/gpiod v0.8.2 h1:2HgQ9pNowPp7W77sXhX5ut5Tqq1WoS3t7bXYDxtYvxc= | ||||||
|  | github.com/warthog618/gpiod v0.8.2/go.mod h1:O7BNpHjCn/4YS5yFVmoFZAlY1LuYuQ8vhPf0iy/qdi4= | ||||||
|  | golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= | ||||||
|  | golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= | ||||||
| golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||||
| golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= | golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= | ||||||
| golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
| golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||||
| google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= | google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= | ||||||
| google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= | google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= | ||||||
| google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= | google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= | ||||||
| google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= | google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= | ||||||
| gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | ||||||
|  | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||||||
|   | |||||||
							
								
								
									
										58
									
								
								godoor.go
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								godoor.go
									
									
									
									
									
								
							| @@ -6,10 +6,6 @@ import ( | |||||||
| 	"context" | 	"context" | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"github.com/joho/godotenv" |  | ||||||
| 	"github.com/prometheus/client_golang/prometheus" |  | ||||||
| 	"github.com/prometheus/client_golang/prometheus/promauto" |  | ||||||
| 	"github.com/prometheus/client_golang/prometheus/promhttp" |  | ||||||
| 	"io" | 	"io" | ||||||
| 	"log" | 	"log" | ||||||
| 	"net/http" | 	"net/http" | ||||||
| @@ -22,13 +18,20 @@ import ( | |||||||
| 	"syscall" | 	"syscall" | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
|  | 	"github.com/joho/godotenv" | ||||||
|  | 	"github.com/prometheus/client_golang/prometheus" | ||||||
|  | 	"github.com/prometheus/client_golang/prometheus/promauto" | ||||||
|  | 	"github.com/prometheus/client_golang/prometheus/promhttp" | ||||||
|  |  | ||||||
| 	"godoor/hash" | 	"godoor/hash" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| const wiegand_a_default = 17 | const ( | ||||||
| const wiegand_b_default = 18 | 	wiegand_a_default   = 17 | ||||||
| const wiegand_bit_timeout = time.Millisecond * 8 | 	wiegand_b_default   = 18 | ||||||
| const solenoid_default = 21 | 	wiegand_bit_timeout = time.Millisecond * 8 | ||||||
|  | 	solenoid_default    = 21 | ||||||
|  | ) | ||||||
|  |  | ||||||
| type card struct { | type card struct { | ||||||
| 	UidHash string `json:"uid_hash"` | 	UidHash string `json:"uid_hash"` | ||||||
| @@ -46,7 +49,7 @@ type ValidUids map[string]bool // bool has no meaning | |||||||
| type Config struct { | type Config struct { | ||||||
| 	door         string | 	door         string | ||||||
| 	uidSalt      string | 	uidSalt      string | ||||||
| 	doorOpenTime int | 	doorOpenTime time.Duration | ||||||
| 	mock         bool | 	mock         bool | ||||||
| 	api          struct { | 	api          struct { | ||||||
| 		allowed  string | 		allowed  string | ||||||
| @@ -86,11 +89,13 @@ var Commit = func() string { | |||||||
|  |  | ||||||
| var Version string | var Version string | ||||||
|  |  | ||||||
| var config Config | var ( | ||||||
| var globalLock sync.Mutex | 	config       Config | ||||||
| var validUids ValidUids | 	globalLock   sync.Mutex | ||||||
| var wiegand Wiegand | 	validUids    ValidUids | ||||||
| var keepDoorOpen KeepDoorOpen | 	wiegand      Wiegand | ||||||
|  | 	keepDoorOpen KeepDoorOpen | ||||||
|  | ) | ||||||
|  |  | ||||||
| var ( | var ( | ||||||
| 	godoorBuildInfo = promauto.NewGaugeVec(prometheus.GaugeOpts{ | 	godoorBuildInfo = promauto.NewGaugeVec(prometheus.GaugeOpts{ | ||||||
| @@ -153,10 +158,16 @@ func loadConfig() { | |||||||
| 	config.api.swipe = os.Getenv("KDOORPI_API_SWIPE") | 	config.api.swipe = os.Getenv("KDOORPI_API_SWIPE") | ||||||
| 	config.api.key = os.Getenv("KDOORPI_API_KEY") | 	config.api.key = os.Getenv("KDOORPI_API_KEY") | ||||||
| 	config.uidSalt = os.Getenv("KDOORPI_UID_SALT") | 	config.uidSalt = os.Getenv("KDOORPI_UID_SALT") | ||||||
| 	config.doorOpenTime, err = strconv.Atoi(os.Getenv("KDOORPI_OPEN_TIME")) |  | ||||||
| 	if err != nil { | 	config.doorOpenTime = 8 * time.Second | ||||||
| 		config.doorOpenTime = 3 | 	if doorOpenTimeStr, ok := os.LookupEnv("KDOORPI_OPEN_TIME"); ok { | ||||||
|  | 		if openTime, err := time.ParseDuration(doorOpenTimeStr); err != nil { | ||||||
|  | 			log.Printf("parsing KDOORPI_OPEN_TIME: %v, keeping default %v", err, config.doorOpenTime) | ||||||
|  | 		} else { | ||||||
|  | 			config.doorOpenTime = openTime | ||||||
| 		} | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	_, config.mock = os.LookupEnv("KDOORPI_MOCK_HW") | 	_, config.mock = os.LookupEnv("KDOORPI_MOCK_HW") | ||||||
| 	config.prometheusMetricsBind = os.Getenv("KDOORPI_PROMETHEUS_METRICS_BIND") | 	config.prometheusMetricsBind = os.Getenv("KDOORPI_PROMETHEUS_METRICS_BIND") | ||||||
| 	if config.prometheusMetricsBind == "" { | 	if config.prometheusMetricsBind == "" { | ||||||
| @@ -254,7 +265,7 @@ func OpenAndCloseDoor(w Wiegand) error { | |||||||
|  |  | ||||||
| 	fmt.Println("Door is now open") | 	fmt.Println("Door is now open") | ||||||
|  |  | ||||||
| 	time.Sleep(time.Duration(config.doorOpenTime) * time.Second) | 	time.Sleep(config.doorOpenTime) | ||||||
|  |  | ||||||
| 	err = CloseDoor(w) | 	err = CloseDoor(w) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| @@ -290,7 +301,7 @@ func cardRunner(w Wiegand) { | |||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		//printCardId(card) | 		// printCardId(card) | ||||||
| 		hashedHex := hash.HashCardUid(card) | 		hashedHex := hash.HashCardUid(card) | ||||||
| 		log.Println(hashedHex) | 		log.Println(hashedHex) | ||||||
|  |  | ||||||
| @@ -302,7 +313,7 @@ func cardRunner(w Wiegand) { | |||||||
| 			err := sendSwipeEvent(hashedHex, ok) | 			err := sendSwipeEvent(hashedHex, ok) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				apiFailuresCount.WithLabelValues("swipe", config.api.swipe).Inc() | 				apiFailuresCount.WithLabelValues("swipe", config.api.swipe).Inc() | ||||||
| 				log.Println("Failed to send swipe event: %v", err) | 				log.Printf("Failed to send swipe event: %v", err) | ||||||
| 			} | 			} | ||||||
| 		}() | 		}() | ||||||
|  |  | ||||||
| @@ -343,7 +354,6 @@ func ParseNextMessage(r *bufio.Reader) (string, error) { | |||||||
|  |  | ||||||
| 		r.UnreadByte() | 		r.UnreadByte() | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func waitEvents() error { | func waitEvents() error { | ||||||
| @@ -384,9 +394,6 @@ func waitEvents() error { | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	log.Printf("%v\n", resp) |  | ||||||
| 	return nil |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func reloadTokens() error { | func reloadTokens() error { | ||||||
| @@ -420,7 +427,7 @@ func reloadTokens() error { | |||||||
| 	validUids = make(ValidUids) | 	validUids = make(ValidUids) | ||||||
| 	var totalCardCount int = 0 | 	var totalCardCount int = 0 | ||||||
| 	for i, val := range cl.AllowedUids { | 	for i, val := range cl.AllowedUids { | ||||||
| 		//log.Printf("%d: %+v\n", i, val.Token.UidHash) | 		// log.Printf("%d: %+v\n", i, val.Token.UidHash) | ||||||
| 		validUids[val.Token.UidHash] = true | 		validUids[val.Token.UidHash] = true | ||||||
| 		totalCardCount = i | 		totalCardCount = i | ||||||
| 	} | 	} | ||||||
| @@ -437,7 +444,6 @@ func reloadTokens() error { | |||||||
| } | } | ||||||
|  |  | ||||||
| func updateKeepOpenDoor(newKeepOpenTime time.Time) { | func updateKeepOpenDoor(newKeepOpenTime time.Time) { | ||||||
|  |  | ||||||
| 	// is there one active? | 	// is there one active? | ||||||
| 	if keepDoorOpen.timer != nil { | 	if keepDoorOpen.timer != nil { | ||||||
| 		keepDoorOpen.timer.Stop() | 		keepDoorOpen.timer.Stop() | ||||||
|   | |||||||
| @@ -217,7 +217,7 @@ func (doobserver *DoorBoyServer) postKeepDoorOpen(w http.ResponseWriter, r *http | |||||||
| 	rs, _ := io.ReadAll(r.Body) | 	rs, _ := io.ReadAll(r.Body) | ||||||
| 	parsedTime, err := time.Parse(time.RFC3339, strings.TrimSpace(string(rs))) | 	parsedTime, err := time.Parse(time.RFC3339, strings.TrimSpace(string(rs))) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		fmt.Println("Error with parsing time: %v", err) | 		fmt.Printf("Error with parsing time: %v", err) | ||||||
| 		w.WriteHeader(http.StatusBadRequest) | 		w.WriteHeader(http.StatusBadRequest) | ||||||
| 	} | 	} | ||||||
| 	keepOpenUntil = &parsedTime | 	keepOpenUntil = &parsedTime | ||||||
| @@ -229,6 +229,9 @@ func main() { | |||||||
|  |  | ||||||
| 	var dumpKeys []cardToken | 	var dumpKeys []cardToken | ||||||
| 	savedKeys, err := os.ReadFile("keys.json") | 	savedKeys, err := os.ReadFile("keys.json") | ||||||
|  | 	if err != nil { | ||||||
|  | 		log.Fatalf("reading saved keys from keys.json: %v", err) | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	err = json.Unmarshal(savedKeys, &dumpKeys) | 	err = json.Unmarshal(savedKeys, &dumpKeys) | ||||||
| 	if err == nil { | 	if err == nil { | ||||||
| @@ -268,7 +271,7 @@ func main() { | |||||||
| 	keyLock.Lock() | 	keyLock.Lock() | ||||||
| 	data, err := json.Marshal(keys) | 	data, err := json.Marshal(keys) | ||||||
| 	if err == nil { | 	if err == nil { | ||||||
| 		os.WriteFile("keys.json", data, 0600) | 		os.WriteFile("keys.json", data, 0o600) | ||||||
| 		log.Println("Saved keys successfully!") | 		log.Println("Saved keys successfully!") | ||||||
| 	} | 	} | ||||||
| 	keyLock.Unlock() | 	keyLock.Unlock() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user