Skip to content

Commit 6ae2a6a

Browse files
authored
Use enums for EventShield fields (#188)
Follow-up to #182
1 parent 0c191ba commit 6ae2a6a

3 files changed

Lines changed: 61 additions & 43 deletions

File tree

internal/api/client.go

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -369,10 +369,49 @@ type Event struct {
369369
}
370370

371371
type EventShield struct {
372-
Colour string // "Red" or "Grey"
373-
Code string // "VerificationViolation" or similar
372+
Colour EventShieldColour
373+
Code EventShieldCode
374374
}
375375

376+
type EventShieldColour string
377+
378+
var (
379+
EventShieldColourRed EventShieldColour = "Red"
380+
EventShieldColourGrey EventShieldColour = "Grey"
381+
)
382+
383+
type EventShieldCode string
384+
385+
var (
386+
// "An unknown reason from the crypto library (if you see this, it is a bug in matrix-js-sdk)."
387+
EventShieldCodeUnknown EventShieldCode = "Unknown"
388+
389+
// "Encrypted by an unverified user."
390+
EventShieldCodeUnverifiedIdentity EventShieldCode = "UnverifiedIdentity"
391+
392+
// "Encrypted by a device not verified by its owner."
393+
EventShieldCodeUnsignedDevice EventShieldCode = "UnsignedDevice"
394+
395+
// "Encrypted by an unknown or deleted device."
396+
EventShieldCodeUnknownDevice EventShieldCode = "UnknownDevice"
397+
398+
// "The authenticity of this encrypted message can't be guaranteed on this device."
399+
//
400+
// i.e.: the key has been forwarded, or retrieved from an insecure backup.
401+
EventShieldCodeAuthenticityNotGuaranteed EventShieldCode = "AuthenticityNotGuaranteed"
402+
403+
// "The (deprecated) sender_key field in the event does not match the Ed25519 key of the device that sent us the decryption keys.
404+
//
405+
// No longer used with rust crypto stack, since it doesn't check the sender_key field.
406+
EventShieldCodeMismatchedSenderKey EventShieldCode = "MismatchedSenderKey"
407+
408+
// "The event was sent unencrypted in an encrypted room."
409+
EventShieldCodeSentInClear EventShieldCode = "SentInClear"
410+
411+
// "The sender was previously verified but changed their identity."
412+
EventShieldCodeVerificationViolation EventShieldCode = "VerificationViolation"
413+
)
414+
376415
type Waiter interface {
377416
// Wait for something to happen, up until the timeout s. If nothing happens,
378417
// fail the test with the formatted string provided.

internal/api/js/js.go

Lines changed: 10 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -587,58 +587,37 @@ func (c *JSClient) GetEventShield(t ct.TestLike, roomID, eventID string) (*api.E
587587
var eventShield api.EventShield
588588
switch encryptionInfo.ShieldColour {
589589
case 1:
590-
eventShield.Colour = "grey"
590+
eventShield.Colour = api.EventShieldColourGrey
591591
case 2:
592-
eventShield.Colour = "red"
592+
eventShield.Colour = api.EventShieldColourRed
593593
default:
594594
return nil, fmt.Errorf("unknown shield colour: %d", encryptionInfo.ShieldColour)
595595
}
596596

597597
switch encryptionInfo.ShieldReason {
598598
case 0:
599-
/** An unknown reason from the crypto library (if you see this, it is a bug in matrix-js-sdk). */
600-
eventShield.Code = "Unknown"
599+
eventShield.Code = api.EventShieldCodeUnknown
601600

602601
case 1:
603-
/** "Encrypted by an unverified user." */
604-
eventShield.Code = "UnverifiedIdentity"
602+
eventShield.Code = api.EventShieldCodeUnverifiedIdentity
605603

606604
case 2:
607-
/** "Encrypted by a device not verified by its owner." */
608-
eventShield.Code = "UnsignedDevice"
605+
eventShield.Code = api.EventShieldCodeUnsignedDevice
609606

610607
case 3:
611-
/** "Encrypted by an unknown or deleted device." */
612-
eventShield.Code = "UnknownDevice"
608+
eventShield.Code = api.EventShieldCodeUnknownDevice
613609

614610
case 4:
615-
/**
616-
* "The authenticity of this encrypted message can't be guaranteed on this device."
617-
*
618-
* i.e.: the key has been forwarded, or retrieved from an insecure backup.
619-
*/
620-
eventShield.Code = "AuthenticityNotGuaranteed"
611+
eventShield.Code = api.EventShieldCodeAuthenticityNotGuaranteed
621612

622613
case 5:
623-
/**
624-
* The (deprecated) sender_key field in the event does not match the Ed25519 key of the device that sent us the
625-
* decryption keys.
626-
*
627-
* No longer used with rust crypto stack, since it doesn't check the sender_key field.
628-
*/
629-
eventShield.Code = "MismatchedSenderKey"
614+
eventShield.Code = api.EventShieldCodeMismatchedSenderKey
630615

631616
case 6:
632-
/**
633-
* The event was sent unencrypted in an encrypted room.
634-
*/
635-
eventShield.Code = "SentInClear"
617+
eventShield.Code = api.EventShieldCodeSentInClear
636618

637619
case 7:
638-
/**
639-
* The sender was previously verified but changed their identity.
640-
*/
641-
eventShield.Code = "VerificationViolation"
620+
eventShield.Code = api.EventShieldCodeVerificationViolation
642621

643622
default:
644623
return nil, fmt.Errorf("unknown shield reason code: %d", encryptionInfo.ShieldReason)

internal/api/rust/rust.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -350,21 +350,21 @@ func (c *RustClient) GetEventShield(t ct.TestLike, roomID, eventID string) (*api
350350
}
351351
shieldState := timelineItem.LazyProvider.GetShields(false)
352352

353-
codeToString := func(code matrix_sdk_common.ShieldStateCode) string {
354-
var result string
353+
codeToString := func(code matrix_sdk_common.ShieldStateCode) api.EventShieldCode {
354+
var result api.EventShieldCode
355355
switch code {
356356
case matrix_sdk_common.ShieldStateCodeAuthenticityNotGuaranteed:
357-
result = "AuthenticityNotGuaranteed"
357+
result = api.EventShieldCodeAuthenticityNotGuaranteed
358358
case matrix_sdk_common.ShieldStateCodeUnknownDevice:
359-
result = "UnknownDevice"
359+
result = api.EventShieldCodeUnknownDevice
360360
case matrix_sdk_common.ShieldStateCodeUnsignedDevice:
361-
result = "UnsignedDevice"
361+
result = api.EventShieldCodeUnsignedDevice
362362
case matrix_sdk_common.ShieldStateCodeUnverifiedIdentity:
363-
result = "UnverifiedIdentity"
363+
result = api.EventShieldCodeUnverifiedIdentity
364364
case matrix_sdk_common.ShieldStateCodeSentInClear:
365-
result = "SentInClear"
365+
result = api.EventShieldCodeSentInClear
366366
case matrix_sdk_common.ShieldStateCodeVerificationViolation:
367-
result = "VerificationViolation"
367+
result = api.EventShieldCodeVerificationViolation
368368
default:
369369
log.Panicf("Unknown shield code %d", code)
370370
}
@@ -381,13 +381,13 @@ func (c *RustClient) GetEventShield(t ct.TestLike, roomID, eventID string) (*api
381381

382382
case matrix_sdk_ffi.ShieldStateGrey:
383383
eventShield = &api.EventShield{
384-
Colour: "grey",
384+
Colour: api.EventShieldColourGrey,
385385
Code: codeToString(shield.(matrix_sdk_ffi.ShieldStateGrey).Code),
386386
}
387387

388388
case matrix_sdk_ffi.ShieldStateRed:
389389
eventShield = &api.EventShield{
390-
Colour: "red",
390+
Colour: api.EventShieldColourRed,
391391
Code: codeToString(shield.(matrix_sdk_ffi.ShieldStateRed).Code),
392392
}
393393
}

0 commit comments

Comments
 (0)