public AcmeRegistration Register(string[] contacts)
{
AssertInit();
var requMsg = new NewRegRequest
{
Contact = contacts,
};
var resp = RequestHttpPost(new Uri(RootUrl,
Directory[AcmeServerDirectory.RES_NEW_REG]), requMsg);
// HTTP 409 (Conflict) response for a previously registered pub key
// Location: still had the regUri
if (resp.IsError)
{
if (resp.StatusCode == HttpStatusCode.Conflict)
throw new AcmeWebException(resp.Error as WebException,
"Conflict due to previously registered public key", resp);
else if (resp.IsError)
throw new AcmeWebException(resp.Error as WebException,
"Unexpected error", resp);
}
var regUri = resp.Headers[AcmeProtocol.HEADER_LOCATION];
if (string.IsNullOrEmpty(regUri))
throw new AcmeException("server did not provide a registration URI in the response");
var respMsg = JsonConvert.DeserializeObject<RegResponse>(resp.ContentAsString);
var newReg = new AcmeRegistration
{
PublicKey = Signer.ExportJwk(),
RegistrationUri = regUri,
Contacts = respMsg.Contact,
Links = resp.Links,
/// Extracts the "Terms of Service" related link header if there is one and
/// returns the URI associated with it. Otherwise returns <c>null</c>.
TosLinkUri = resp.Links[AcmeProtocol.LINK_HEADER_REL_TOS].FirstOrDefault(),
AuthorizationsUri = respMsg.Authorizations,
CertificatesUri = respMsg.Certificates,
TosAgreementUri = respMsg.Agreement,
};
Registration = newReg;
return Registration;
}