@@ -7,7 +7,7 @@ import Text.PrettyPrint
77
88import Hix.Class.EncodeNix (EncodeNix (encodeNix ))
99import Hix.Data.NixExpr (Expr (.. ), ExprAttr (.. ))
10- import Hix.Managed.Cabal.Data.HackageLocation (HackagePassword ( HackagePassword ), HackageUser )
10+ import Hix.Managed.Cabal.Data.HackageLocation (HackageSecret ( .. ), HackageUser )
1111import Hix.Managed.Cabal.Data.HackageRepo (HackageDescription , HackageIndexState , HackageName )
1212import Hix.NixExpr (mkAttrs , single , singleOpt )
1313import Hix.Pretty (field , prettyFieldsV , prettyText )
@@ -20,52 +20,62 @@ newtype ContextHackageLocation =
2020instance Pretty ContextHackageLocation where
2121 pretty = prettyText . coerce
2222
23- data ContextHackagePassword =
23+ data ContextHackageSecret =
2424 -- | Password was intended to be printed, most likely in a test.
25- PasswordUnobscured HackagePassword
25+ SecretUnobscured HackageSecret
2626 |
27- PasswordPlain HackagePassword
27+ SecretPlain HackageSecret
2828 |
29- PasswordEnvVar Text
29+ SecretEnvVar Text
3030 |
31- PasswordExec Text
31+ SecretExec Text
3232 deriving stock (Eq , Show )
3333
34- instance Pretty ContextHackagePassword where
34+ instance Pretty ContextHackageSecret where
3535 pretty = \ case
36- PasswordUnobscured ( HackagePassword pw) -> prettyText pw
37- PasswordPlain _ -> " <password>"
38- PasswordEnvVar var -> prettyText var <+> brackets (text " env-var" )
39- PasswordExec exe -> prettyText exe <+> brackets (text " exec" )
36+ SecretUnobscured ( HackageSecret pw) -> prettyText pw
37+ SecretPlain _ -> " <password>"
38+ SecretEnvVar var -> prettyText var <+> brackets (text " env-var" )
39+ SecretExec exe -> prettyText exe <+> brackets (text " exec" )
4040
41- instance EncodeNix ContextHackagePassword where
41+ instance EncodeNix ContextHackageSecret where
4242 encodeNix = \ case
43- PasswordUnobscured ( HackagePassword pw) -> ExprString pw
44- PasswordPlain _ -> ExprString " <password>"
45- PasswordEnvVar var -> structured " env-var" var
46- PasswordExec exe -> structured " exec" exe
43+ SecretUnobscured ( HackageSecret pw) -> ExprString pw
44+ SecretPlain _ -> ExprString " <password>"
45+ SecretEnvVar var -> structured " env-var" var
46+ SecretExec exe -> structured " exec" exe
4747 where
4848 structured t value =
4949 ExprAttrs [
5050 ExprAttr " type" (ExprString t),
5151 ExprAttr {name = " value" , value = ExprString value}
5252 ]
5353
54- instance FromJSON ContextHackagePassword where
54+ instance FromJSON ContextHackageSecret where
5555 parseJSON v =
56- withText " ContextHackagePassword " plain v
56+ withText " ContextHackageSecret " plain v
5757 <|>
58- withObject " ContextHackagePassword " typed v
58+ withObject " ContextHackageSecret " typed v
5959 where
6060 typed o = do
6161 value <- o .: " value"
6262 o .: " type" >>= \ case
6363 (" plain" :: Text ) -> plain value
64- " env-var" -> pure (PasswordEnvVar value)
65- " exec" -> pure (PasswordExec value)
64+ " env-var" -> pure (SecretEnvVar value)
65+ " exec" -> pure (SecretExec value)
6666 t -> fail [exon |Invalid value for Hackage password type: ##{t}|]
6767
68- plain = pure . PasswordPlain . HackagePassword
68+ plain = pure . SecretPlain . HackageSecret
69+
70+ newtype ContextHackagePassword =
71+ ContextHackagePassword { secret :: ContextHackageSecret }
72+ deriving stock (Eq , Show , Generic )
73+ deriving newtype (Pretty , EncodeNix , FromJSON )
74+
75+ newtype ContextHackageToken =
76+ ContextHackageToken { secret :: ContextHackageSecret }
77+ deriving stock (Eq , Show , Generic )
78+ deriving newtype (Pretty , EncodeNix , FromJSON )
6979
7080data ContextHackageRepo =
7181 ContextHackageRepo {
@@ -75,6 +85,7 @@ data ContextHackageRepo =
7585 location :: Maybe ContextHackageLocation ,
7686 user :: Maybe HackageUser ,
7787 password :: Maybe ContextHackagePassword ,
88+ token :: Maybe ContextHackageToken ,
7889 secure :: Maybe Bool ,
7990 keys :: Maybe (NonEmpty Text ),
8091 indexState :: Maybe HackageIndexState ,
@@ -93,6 +104,7 @@ instance Pretty ContextHackageRepo where
93104 field " location" location,
94105 field " user" user,
95106 field " password" password,
107+ field " token" token,
96108 field " secure" secure,
97109 field " keys" keys,
98110 field " indexState" indexState,
@@ -125,6 +137,7 @@ contextHackageRepo name =
125137 location = Nothing ,
126138 user = Nothing ,
127139 password = Nothing ,
140+ token = Nothing ,
128141 secure = Nothing ,
129142 keys = Nothing ,
130143 indexState = Nothing ,
0 commit comments