internally `SubscriptionInfo` already uses the `parse_next_due` helper
to parse the next due date to an epoch. this exposes a function that
allows us to use the epoch outside of this crate too. for example, a
user of pom may have multiple subscription for the same system. in
that case we want to apply the one with the due date that is furthest
in the future.
Signed-off-by: Stefan Sterz <s.sterz@proxmox.com>
previously this type lived inside of pom. this made it harder to
access the product type from a `SubscriptionInfo` trait in other
products. move the type here so we can check product types more
consistently across products (e. g. in pom and pbs)
Signed-off-by: Stefan Sterz <s.sterz@proxmox.com>
signed subscription info files should always be checked to catch
attempts of invalid signatures, but the age and serverid checks only
need to apply to "active" files, else the status might switch from a
more meaningful one to "invalid" by accident.
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
and handle signed keys differently w.r.t. age checks, since they will be
refreshed less frequently.
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
taking over slighlty generified helpers and types:
- subscription info and status
- checking subscription status with shop
- reading/writing local subscription-related files
the perl-based code uses base64 with newlines for the data, and base64
without padding for the checksum. accordingly, calculate the checksum
with and without newlines, and compare the decoded checksum instead of
the encoded one.
furthermore, the perl-based code encodes the subscription status using
Capitalized values instead of lowercase, so alias those for the time
being.
PVE also stores the serverid as 'validdirectory', so add that as alias
as well.
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>