ebics_code.rs (6210B)
1 /* 2 * This file is part of LibEuFin. 3 * Copyright (C) 2026 Taler Systems S.A. 4 5 * LibEuFin is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU Affero General Public License as 7 * published by the Free Software Foundation; either version 3, or 8 * (at your option) any later version. 9 10 * LibEuFin is distributed in the hope that it will be useful, but 11 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 12 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General 13 * Public License for more details. 14 15 * You should have received a copy of the GNU Affero General Public 16 * License along with LibEuFin; see the file COPYING. If not, see 17 * <http://www.gnu.org/licenses/> 18 */ 19 20 use taler_macros::EnumMeta; 21 22 /// EBICS Error Class (First two digits of the return code) 23 #[derive(Debug, Clone, Copy, PartialEq, Eq)] 24 pub enum EbicsKind { 25 /// 00 - Success / General Information 26 Information, 27 /// 01 - Positive notification, but action might be required 28 Note, 29 /// 03 - Warning 30 Warning, 31 /// 06 - Recoverable Error 32 RecoverableError, 33 /// 09 - Non-recoverable Error 34 NonRecoverableError, 35 } 36 #[derive(Debug, Clone, Copy, PartialEq, Eq, EnumMeta)] 37 #[enum_meta(DomainCode, Str)] 38 #[allow(non_camel_case_types)] 39 pub enum EbicsReturnCode { 40 // --- 00: Information --- 41 #[code = "000000"] 42 EBICS_OK, 43 44 // --- 01: Notes --- 45 #[code = "011000"] 46 EBICS_DOWNLOAD_POSTPROCESS_DONE, 47 #[code = "011001"] 48 EBICS_DOWNLOAD_POSTPROCESS_SKIPPED, 49 #[code = "011101"] 50 EBICS_TX_SEGMENT_NUMBER_UNDERRUN, 51 #[code = "011301"] 52 EBICS_NO_ONLINE_CHECKS, 53 54 // --- 03: Warnings --- 55 #[code = "031001"] 56 EBICS_ORDER_PARAMS_IGNORED, 57 58 // --- 06: Technical Errors (Recoverable) --- 59 #[code = "061001"] 60 EBICS_AUTHENTICATION_FAILED, 61 #[code = "061002"] 62 EBICS_INVALID_REQUEST, 63 #[code = "061099"] 64 EBICS_INTERNAL_ERROR, 65 #[code = "061101"] 66 EBICS_TX_RECOVERY_SYNC, 67 68 // --- 09: Business Errors (Non-Recoverable) --- 69 #[code = "090003"] 70 EBICS_AUTHORISATION_ORDER_IDENTIFIER_FAILED, 71 #[code = "090004"] 72 EBICS_INVALID_ORDER_DATA_FORMAT, 73 #[code = "090005"] 74 EBICS_NO_DOWNLOAD_DATA_AVAILABLE, 75 #[code = "090006"] 76 EBICS_UNSUPPORTED_REQUEST_FOR_ORDER_INSTANCE, 77 78 // --- 09: Transaction Administration --- 79 #[code = "091002"] 80 EBICS_INVALID_USER_OR_USER_STATE, 81 #[code = "091003"] 82 EBICS_USER_UNKNOWN, 83 #[code = "091004"] 84 EBICS_INVALID_USER_STATE, 85 #[code = "091005"] 86 EBICS_INVALID_ORDER_TYPE, 87 #[code = "091006"] 88 EBICS_UNSUPPORTED_ORDER_TYPE, 89 #[code = "091007"] 90 EBICS_DISTRIBUTED_SIGNATURE_AUTHORISATION_FAILED, 91 #[code = "091008"] 92 EBICS_BANK_PUBKEY_UPDATE_REQUIRED, 93 #[code = "091009"] 94 EBICS_SEGMENT_SIZE_EXCEEDED, 95 #[code = "091010"] 96 EBICS_INVALID_XML, 97 #[code = "091011"] 98 EBICS_INVALID_HOST_ID, 99 100 // --- 09: Transaction Processing --- 101 #[code = "091101"] 102 EBICS_TX_UNKNOWN_TXID, 103 #[code = "091102"] 104 EBICS_TX_ABORT, 105 #[code = "091103"] 106 EBICS_TX_MESSAGE_REPLAY, 107 #[code = "091104"] 108 EBICS_TX_SEGMENT_NUMBER_EXCEEDED, 109 #[code = "091105"] 110 EBICS_RECOVERY_NOT_SUPPORTED, 111 #[code = "091111"] 112 EBICS_INVALID_SIGNATURE_FILE_FORMAT, 113 #[code = "091112"] 114 EBICS_INVALID_ORDER_PARAMS, 115 #[code = "091113"] 116 EBICS_INVALID_REQUEST_CONTENT, 117 #[code = "091114"] 118 EBICS_ORDERID_UNKNOWN, 119 #[code = "091115"] 120 EBICS_ORDERID_ALREADY_FINAL, 121 #[code = "091116"] 122 EBICS_PROCESSING_ERROR, 123 #[code = "091117"] 124 EBICS_MAX_ORDER_DATA_SIZE_EXCEEDED, 125 #[code = "091118"] 126 EBICS_MAX_SEGMENTS_EXCEEDED, 127 #[code = "091119"] 128 EBICS_MAX_TRANSACTIONS_EXCEEDED, 129 #[code = "091120"] 130 EBICS_PARTNER_ID_MISMATCH, 131 #[code = "091121"] 132 EBICS_INCOMPATIBLE_ORDER_ATTRIBUTE, 133 #[code = "091122"] 134 EBICS_ORDER_ALREADY_EXISTS, 135 136 // --- 09: Key Management (X.509 & Keys) --- 137 #[code = "091201"] 138 EBICS_KEYMGMT_UNSUPPORTED_VERSION_SIGNATURE, 139 #[code = "091202"] 140 EBICS_KEYMGMT_UNSUPPORTED_VERSION_AUTHENTICATION, 141 #[code = "091203"] 142 EBICS_KEYMGMT_UNSUPPORTED_VERSION_ENCRYPTION, 143 #[code = "091204"] 144 EBICS_KEYMGMT_KEYLENGTH_ERROR_SIGNATURE, 145 #[code = "091205"] 146 EBICS_KEYMGMT_KEYLENGTH_ERROR_AUTHENTICATION, 147 #[code = "091206"] 148 EBICS_KEYMGMT_KEYLENGTH_ERROR_ENCRYPTION, 149 #[code = "091207"] 150 EBICS_KEYMGMT_NO_X509_SUPPORT, 151 #[code = "091208"] 152 EBICS_X509_CERTIFICATE_EXPIRED, 153 #[code = "091209"] 154 EBICS_X509_CERTIFICATE_NOT_VALID_YET, 155 #[code = "091210"] 156 EBICS_X509_WRONG_KEY_USAGE, 157 #[code = "091211"] 158 EBICS_X509_WRONG_ALGORITHM, 159 #[code = "091212"] 160 EBICS_X509_INVALID_THUMBPRINT, 161 #[code = "091213"] 162 EBICS_X509_CTL_INVALID, 163 #[code = "091214"] 164 EBICS_X509_UNKNOWN_CERTIFICATE_AUTHORITY, 165 #[code = "091215"] 166 EBICS_X509_INVALID_POLICY, 167 #[code = "091216"] 168 EBICS_X509_INVALID_BASIC_CONSTRAINTS, 169 #[code = "091217"] 170 EBICS_ONLY_X509_SUPPORT, 171 #[code = "091218"] 172 EBICS_KEYMGMT_DUPLICATE_KEY, 173 #[code = "091219"] 174 EBICS_CERTIFICATES_VALIDATION_ERROR, 175 176 // --- 09: Pre-verification / Signature Logic --- 177 #[code = "091301"] 178 EBICS_SIGNATURE_VERIFICATION_FAILED, 179 #[code = "091302"] 180 EBICS_ACCOUNT_AUTHORISATION_FAILED, 181 #[code = "091303"] 182 EBICS_AMOUNT_CHECK_FAILED, 183 #[code = "091304"] 184 EBICS_SIGNER_UNKNOWN, 185 #[code = "091305"] 186 EBICS_INVALID_SIGNER_STATE, 187 #[code = "091306"] 188 EBICS_DUPLICATE_SIGNATURE, 189 } 190 191 impl EbicsReturnCode { 192 /// Automatically classifies the severity/kind based on standard EBICS prefixes. 193 pub fn kind(&self) -> EbicsKind { 194 match &self.code()[..2] { 195 "00" => EbicsKind::Information, 196 "01" => EbicsKind::Note, 197 "03" => EbicsKind::Warning, 198 "06" => EbicsKind::RecoverableError, 199 "09" => EbicsKind::NonRecoverableError, 200 prefix => unreachable!("Internal parser mapping error {prefix}"), 201 } 202 } 203 204 pub fn is_error(&self) -> bool { 205 matches!( 206 self.kind(), 207 EbicsKind::RecoverableError | EbicsKind::NonRecoverableError 208 ) 209 } 210 }