diff --git a/README.md b/README.md index 4d5e23d..14e047b 100644 --- a/README.md +++ b/README.md @@ -12,10 +12,8 @@ inputs.actualbudget-report.url = "git+https://git.wanderingcrow.net/TheWandering Then in your configuration (using sops-nix, you will need to adjust it if you use agenix or alternatives): ```nix -nixpkgs.overlays = [ inputs.actualbudget-report.overlays.default ]; - imports = [ - inputs.actualbudget-report.nixosModules.default + inputs.actualbudget-report.nixosModules.default; ]; # Fill out all the following environment variables for the service @@ -27,7 +25,6 @@ sops.templates."actualbudget-report-env".content = '' SMTP_PASSWORD= SMTP_HOST= SMTP_RECIPIENTS= - BUDGET_ENCRYPTION_KEY= ''; services.actualbudget-report = { diff --git a/flake.nix b/flake.nix index 21fc84e..5caf0c0 100644 --- a/flake.nix +++ b/flake.nix @@ -7,52 +7,44 @@ }; outputs = - inputs@{ - self, - flake-parts, - ... - }: - flake-parts.lib.mkFlake - { - inherit inputs; - } - { - imports = [ inputs.flake-parts.flakeModules.easyOverlay ]; - systems = [ - "x86_64-linux" - "aarch64-linux" - "aarch64-darwin" - "x86_64-darwin" - ]; - flake.nixosModules.default = ./modules/actualbudget-report; - perSystem = - { - config, - self', - inputs', - pkgs, - system, - ... - }: - { - overlayAttrs = { inherit (config.packages) actualbudget-report; }; - packages.actualbudget-report = pkgs.buildGoModule { - name = "actualbudget-report"; - src = pkgs.fetchFromGitea { - domain = "git.wanderingcrow.net"; - owner = "TheWanderingCrow"; - repo = "actualbudget-report"; - rev = "v2.0"; - hash = "sha256-H+pA9dFsP5QQ3W32NEU1TWYiOiti53jnzN3Bnq+QJ5Q="; - }; - vendorHash = "sha256-NHTKwUSIbNCUco88JbHOo3gt6S37ggee+LWNbHaRGEs="; - }; - devShells.default = pkgs.mkShell { - ENVIRONMENT = "dev"; - nativeBuildInputs = with pkgs; [ - devenv - ]; - }; - }; + inputs@{ flake-parts, ... }: + flake-parts.lib.mkFlake { inherit inputs; } { + systems = [ + "x86_64-linux" + "aarch64-linux" + "aarch64-darwin" + "x86_64-darwin" + ]; + flake.nixosModules = { + default = ./modules/actualbudget-report; }; + perSystem = + { + config, + self', + inputs', + pkgs, + system, + ... + }: + { + packages.default = pkgs.buildGoModule { + name = "actualbudget-report"; + src = pkgs.fetchFromGitea { + domain = "git.wanderingcrow.net"; + owner = "TheWanderingCrow"; + repo = "actualbudget-report"; + rev = "v0.1"; + hash = "sha256-1Z3+Efx0MCsZhfz49nKsdaWgyVt9+7kekwgfQyaYUxQ="; + }; + vendorHash = "sha256-NHTKwUSIbNCUco88JbHOo3gt6S37ggee+LWNbHaRGEs="; + }; + devShells.default = pkgs.mkShell { + ENVIRONMENT = "dev"; + nativeBuildInputs = with pkgs; [ + devenv + ]; + }; + }; + }; } diff --git a/main.go b/main.go index 38d12d0..195a22a 100644 --- a/main.go +++ b/main.go @@ -32,11 +32,10 @@ import ( ) type BudgetClient struct { - baseUrl string - apiKey string - syncId string - fullUrl string - encryptionKey string + baseUrl string + apiKey string + syncId string + fullUrl string } type BudgetMonthsResponse struct { @@ -74,12 +73,9 @@ type BudgetMonthsResponse struct { } `json:"data"` } -// Create budget client, you may pass empty strings to optional parameters -// Required: baseUrl, apiKey, syncId -// Optional: encryptionKey -func CreateBudgetClient(baseUrl string, apiKey string, syncId string, encryptionKey string) *BudgetClient { +func CreateBudgetClient(baseUrl string, apiKey string, syncId string) *BudgetClient { fullUrl := baseUrl + "/v1/budgets/" + syncId - client := BudgetClient{baseUrl, apiKey, syncId, fullUrl, encryptionKey} + client := BudgetClient{baseUrl, apiKey, syncId, fullUrl} return &client } @@ -115,9 +111,7 @@ func (b BudgetClient) GetBudgetMonths() *BudgetMonthsResponse { currentTime := time.Now() year, month := currentTime.Year(), int(currentTime.Month()) budgetMonth := fmt.Sprintf("%v-%v", year, month) - resp := b.callApi("GET", "/months/"+budgetMonth, map[string]string{ - "budget-encryption-password": b.encryptionKey, - }) + resp := b.callApi("GET", "/months/"+budgetMonth, nil) defer resp.Body.Close() if resp.StatusCode != http.StatusOK { log.Fatal("GetBudgetAmounts failed with: " + string(resp.Status)) @@ -145,13 +139,11 @@ func main() { var baseUrl = os.Getenv("BASE_URL") var apiKey = os.Getenv("API_KEY") var syncId = os.Getenv("SYNC_ID") - var encryptionKey = os.Getenv("BUDGET_ENCRYPTION_KEY") var smtpUsername = os.Getenv("SMTP_USERNAME") var smtpPassword = os.Getenv("SMTP_PASSWORD") var smtpHost = os.Getenv("SMTP_HOST") - var smtpPort = os.Getenv("SMTP_PORT") var smtpRecipients = os.Getenv("SMTP_RECIPIENTS") - client := CreateBudgetClient(baseUrl, apiKey, syncId, encryptionKey) + client := CreateBudgetClient(baseUrl, apiKey, syncId) if !client.BankSync() { log.Println("Bank Sync failed, information may not be up to date") } @@ -185,8 +177,12 @@ func main() { message := []byte(subject + mime + body + categories.String()) var auth smtp.Auth - auth = smtp.PlainAuth("", smtpUsername, smtpPassword, smtpHost) - err := smtp.SendMail(smtpHost+":"+smtpPort, auth, smtpUsername, strings.Split(smtpRecipients, ","), []byte(message)) + if os.Getenv("ENVIRONMENT") == "dev" { + auth = nil + } else { + auth = smtp.PlainAuth("", smtpUsername, smtpPassword, smtpHost) + } + err := smtp.SendMail(smtpHost, auth, smtpUsername, strings.Split(smtpRecipients, ","), []byte(message)) if err != nil { log.Fatal(err) } diff --git a/modules/actualbudget-report/default.nix b/modules/actualbudget-report/default.nix index c856982..d3e3763 100644 --- a/modules/actualbudget-report/default.nix +++ b/modules/actualbudget-report/default.nix @@ -1,8 +1,8 @@ { - pkgs, config, options, lib, + pkgs, ... }: let @@ -10,8 +10,8 @@ let opt = options.services.actualbudget-report; inherit (lib) mkEnableOption - mkPackageOption mkOption + mkPackageOption mkIf types ; @@ -20,12 +20,12 @@ in options = { services.actualbudget-report = { enable = mkEnableOption "Actualbudget email reports"; - interval = mkOption { + package = mkPackageOption pkgs.default; + interval = { type = types.str; default = "Sun 12:00:00"; description = "systemd-timer OnCalendar legal string for sending reports."; }; - package = mkPackageOption pkgs "actualbudget-report" { }; environmentFile = mkOption { type = types.path; default = ""; @@ -39,11 +39,11 @@ in description = "Actualbudget report sender service"; serviceConfig = { Type = "oneshot"; - ExecStart = "${pkgs.actualbudget-report}/bin/actualbudget-report"; + ExecStart = "${cfg.package}/bin/actualbudget-report"; EnvironmentFile = cfg.environmentFile; }; }; - systemd.timers.actualbudget-report = { + systemd.timers.flamesite-backup = { enable = true; wantedBy = [ "timers.target" ]; timerConfig = {