104 lines
3.4 KiB
Plaintext
104 lines
3.4 KiB
Plaintext
// Example 10: Communication - Email Verification
|
|
|
|
print("=== Communication & Email Verification Example ===\n");
|
|
|
|
// Get a context to work with
|
|
print("1. Getting context...");
|
|
let ctx = get_context(["alice", "bob"]);
|
|
print(" ✓ Context created: " + ctx.context_id());
|
|
|
|
// Create verification for a user
|
|
print("\n2. Creating verification...");
|
|
|
|
let verification = new_verification(
|
|
"user_123",
|
|
"alice@example.com"
|
|
)
|
|
.callback_url("https://example.com/verify");
|
|
|
|
print(" ✓ Created verification");
|
|
print(" Entity ID: " + verification.get_entity_id());
|
|
print(" Contact: " + verification.get_contact());
|
|
print(" Code: " + verification.get_code());
|
|
print(" Nonce: " + verification.get_nonce());
|
|
print(" Verification URL: " + verification.get_verification_url());
|
|
print(" Status: " + verification.get_status());
|
|
|
|
// Create email client
|
|
print("\n3. Creating email client...");
|
|
let email_client = new_email_client();
|
|
print(" ✓ Email client created");
|
|
|
|
// Send verification email with link
|
|
print("\n4. Sending verification email...");
|
|
email_client.send_verification_link(verification);
|
|
verification.mark_sent();
|
|
print(" ✓ Verification email sent");
|
|
print(" Status: " + verification.get_status());
|
|
|
|
// Save the verification
|
|
print("\n5. Saving verification to context...");
|
|
let verification_id = ctx.save(verification);
|
|
print(" ✓ Saved verification with ID: " + verification_id);
|
|
|
|
// Simulate user clicking link (nonce verification)
|
|
print("\n6. Simulating URL click verification...");
|
|
let nonce = verification.get_nonce();
|
|
print(" User clicks: " + verification.get_verification_url());
|
|
verification.verify_nonce(nonce);
|
|
print(" ✓ Verification successful via URL!");
|
|
print(" Status: " + verification.get_status());
|
|
|
|
// Save verified status
|
|
ctx.save(verification);
|
|
|
|
// Create another verification for code-based flow
|
|
print("\n7. Creating code-based verification for Bob...");
|
|
|
|
let bob_verification = new_verification(
|
|
"user_456",
|
|
"bob@example.com"
|
|
);
|
|
|
|
print(" ✓ Created verification for Bob");
|
|
print(" Contact: " + bob_verification.get_contact());
|
|
print(" Code: " + bob_verification.get_code());
|
|
|
|
// Send code via email
|
|
print("\n8. Sending code-based verification email...");
|
|
email_client.send_verification_code(bob_verification);
|
|
bob_verification.mark_sent();
|
|
print(" ✓ Code sent");
|
|
|
|
// Save Bob's verification
|
|
let bob_verification_id = ctx.save(bob_verification);
|
|
print(" ✓ Saved with ID: " + bob_verification_id);
|
|
|
|
// Simulate user entering wrong code
|
|
print("\n9. Simulating code verification attempts...");
|
|
print(" Attempt 1 with wrong code...");
|
|
try {
|
|
bob_verification.verify_code("000000");
|
|
print(" ✗ Unexpected success");
|
|
} catch(err) {
|
|
print(" ✗ Verification failed (expected): " + err);
|
|
print(" Attempts: " + bob_verification.get_attempts());
|
|
}
|
|
|
|
// Verify with correct code
|
|
print("\n10. Verifying with correct code...");
|
|
let correct_code = bob_verification.get_code();
|
|
print(" Using code: " + correct_code);
|
|
bob_verification.verify_code(correct_code);
|
|
print(" ✓ Verification successful!");
|
|
print(" Status: " + bob_verification.get_status());
|
|
|
|
ctx.save(bob_verification);
|
|
|
|
// List all verifications
|
|
print("\n11. Listing all verifications in context...");
|
|
let verification_ids = ctx.list("verifications");
|
|
print(" ✓ Found " + verification_ids.len() + " verifications");
|
|
|
|
print("\n=== Communication & Email Verification Example Complete ===");
|