1
0
mirror of https://github.com/moepman/acertmgr.git synced 2024-09-27 23:34:46 +02:00

standalone: Fix server start+stop with multiple handlers

This commit is contained in:
Kishi85 2019-02-12 10:27:53 +01:00
parent 48a55c0dc4
commit 3570baacda
3 changed files with 42 additions and 31 deletions

View File

@ -131,6 +131,8 @@ class ACMEAuthority(AbstractACMEAuthority):
time.sleep(1) time.sleep(1)
for domain in domains: for domain in domains:
challenge_handlers[domain].start_challenge()
try:
print("Starting key authorization") print("Starting key authorization")
# notify challenge are met # notify challenge are met
keyauthorization = "{0}.{1}".format(tokens[domain], account_thumbprint) keyauthorization = "{0}.{1}".format(tokens[domain], account_thumbprint)
@ -158,7 +160,11 @@ class ACMEAuthority(AbstractACMEAuthority):
raise ValueError("{0} challenge did not pass: {1}".format( raise ValueError("{0} challenge did not pass: {1}".format(
domain, challenge_status)) domain, challenge_status))
finally: finally:
for domain in domains: challenge_handlers[domain].stop_challenge()
finally:
# Destroy challenge handlers in reverse order to replay
# any saved state information in the handlers correctly
for domain in reversed(domains):
try: try:
challenge_handlers[domain].destroy_challenge(domain, account_thumbprint, tokens[domain]) challenge_handlers[domain].destroy_challenge(domain, account_thumbprint, tokens[domain])
except: except:

View File

@ -20,3 +20,11 @@ class AbstractChallengeHandler:
def destroy_challenge(self, domain, thumbprint, token): def destroy_challenge(self, domain, thumbprint, token):
raise NotImplemented raise NotImplemented
# Optional: Indicate when a challenge request is imminent
def start_challenge(self):
pass
# Optional: Indicate when a challenge response has been received
def stop_challenge(self):
pass

View File

@ -70,15 +70,12 @@ class ChallengeHandler(WebChallengeHandler):
self.server_thread = None self.server_thread = None
self.server = HTTPServer(("", port), ACMERequestHandler) self.server = HTTPServer(("", port), ACMERequestHandler)
def create_challenge(self, domain, thumbprint, token): def start_challenge(self):
WebChallengeHandler.create_challenge(self, domain, thumbprint, token)
self.server_thread = threading.Thread(target=start_standalone, args=(self.server,)) self.server_thread = threading.Thread(target=start_standalone, args=(self.server,))
os.chdir(self.challenge_directory) os.chdir(self.challenge_directory)
self.server_thread.start() self.server_thread.start()
return datetime.datetime.now()
def destroy_challenge(self, domain, thumbprint, token): def stop_challenge(self):
self.server.shutdown() self.server.shutdown()
self.server_thread.join() self.server_thread.join()
os.chdir(self.current_directory) os.chdir(self.current_directory)
WebChallengeHandler.destroy_challenge(self, domain, thumbprint, token)