helper.go (3867B)
1 package helpers 2 3 import ( 4 "context" 5 "log" 6 7 protocol "github.com/MTRNord/matrix_protobuf_fed/proto/federation/v1" 8 "github.com/MTRNord/matrix_protobuf_fed/proto/federation/v1/types" 9 ) 10 11 func QuoteString(s string) string { 12 return "\"" + s + "\"" 13 } 14 15 type KeyStreamCallback struct { 16 } 17 18 func NewKeyStreamCallback() KeyStreamCallback { 19 return KeyStreamCallback{} 20 } 21 22 func (k KeyStreamCallback) Write(ctx context.Context, call protocol.StreamCallback_write) error { 23 log.Println("StreamCallback.Write") 24 p := call.Args() 25 26 response_ptr, err := p.Value() 27 if err != nil { 28 return err 29 } 30 response := types.ServerKeysResponse(response_ptr.Struct()) 31 32 if response.HasMetadata() { 33 metadata, err := response.Metadata() 34 if err != nil { 35 return err 36 } 37 38 servername, err := metadata.ServerName() 39 if err != nil { 40 return err 41 } 42 valid_until_ts := metadata.ValidUntilTS() 43 44 log.Println("Server keys metadata:\n", "servername:", QuoteString(servername), "valid_until_ts:", valid_until_ts) 45 } else if response.HasVerifyKeys() { 46 verify_keys, err := response.VerifyKeys() 47 if err != nil { 48 return err 49 } 50 51 entries, err := verify_keys.Entries() 52 if err != nil { 53 return err 54 } 55 len_of_entries := entries.Len() 56 57 // Print the verify keys 58 for i := 0; i < len_of_entries; i++ { 59 entry := entries.At(i) 60 61 key_id_ptr, err := entry.Key() 62 if err != nil { 63 return err 64 } 65 66 key_id := key_id_ptr.Text() 67 68 key_ptr, err := entry.Value() 69 if err != nil { 70 return err 71 } 72 73 key := key_ptr.Data() 74 75 log.Println("Server keys verify_keys entry:", "key_id:", QuoteString(key_id), "key:", key) 76 } 77 } else if response.HasOldVerifyKeys() { 78 old_verify_keys, err := response.OldVerifyKeys() 79 if err != nil { 80 return err 81 } 82 83 entries, err := old_verify_keys.Entries() 84 if err != nil { 85 return err 86 } 87 len_of_entries := entries.Len() 88 89 // Print the verify keys 90 for i := 0; i < len_of_entries; i++ { 91 entry := entries.At(i) 92 93 key_id_ptr, err := entry.Key() 94 if err != nil { 95 return err 96 } 97 98 key_id := key_id_ptr.Text() 99 100 key_ptr, err := entry.Value() 101 if err != nil { 102 return err 103 } 104 105 key_wrapper := types.ServerKeysResponse_OldVerifyKey(key_ptr.Struct()) 106 key, err := key_wrapper.Key() 107 if err != nil { 108 return err 109 } 110 111 expired_ts := key_wrapper.ExpiredTS() 112 113 log.Println("Server keys old_verify_keys entry:", "key_id:", QuoteString(key_id), "key:", key, "expired_ts:", expired_ts) 114 } 115 } else { 116 log.Println("Server keys response has no metadata, verify_keys, or old_verify_keys") 117 } 118 119 // Print the signatures 120 if response.HasSignatures() { 121 signatures, err := response.Signatures() 122 if err != nil { 123 return err 124 } 125 len_of_signatures := signatures.Len() 126 127 for i := 0; i < len_of_signatures; i++ { 128 signature := signatures.At(i) 129 130 server, err := signature.Server() 131 if err != nil { 132 return err 133 } 134 135 signatures_map, err := signature.Signatures() 136 if err != nil { 137 return err 138 } 139 signatures_map_entries, err := signatures_map.Entries() 140 if err != nil { 141 return err 142 } 143 len_of_signatures_map_entries := signatures_map_entries.Len() 144 145 for j := 0; j < len_of_signatures_map_entries; j++ { 146 signature_entry := signatures_map_entries.At(j) 147 148 key_id_ptr, err := signature_entry.Key() 149 if err != nil { 150 return err 151 } 152 key_id := key_id_ptr.Text() 153 154 signature_ptr, err := signature_entry.Value() 155 if err != nil { 156 return err 157 } 158 159 signature := signature_ptr.Data() 160 161 log.Println("Server keys signature:", "server:", QuoteString(server), "key_id:", QuoteString(key_id), "signature:", signature) 162 } 163 } 164 165 } else { 166 log.Println("Server keys response has no signatures") 167 } 168 return nil 169 } 170 171 func (k KeyStreamCallback) Done(ctx context.Context, call protocol.StreamCallback_done) error { 172 log.Println("StreamCallback.Done") 173 return nil 174 }