クライアントを優先したアイデンティティヘッダーを上流に転送しない
forward()、forwardWebhook()、forwardCallback()は、すべてのインバウンドをコピーしました ホスト以外のヘッダ(およびセッションレス2の場合、クレデンシャルヘッダ) 上流リクエストに。 BillingService は、許可なく、 X-Org-Id、X-Member-Id、および ...
運送業者 SMS の webhooks、すべてで何もに達した
Traefik は api.kamocrm.com の全てのパスをパスの分割なしでこのゲートウェイに送信します。 そして、このクラスは /api/voip/** を転送しました。 お問い合わせ /api/bulktext/inbound/{carrier} — VOIPService で書かれ、テスト、デプロイ インタ...
運送業者 SMS の webhooks、すべてで何もに達した
Traefik は api.kamocrm.com の全てのパスをパスの分割なしでこのゲートウェイに送信します。 そして、このクラスは /api/voip/** を転送しました。 お問い合わせ /api/bulktext/inbound/{carrier} — VOIPService で書かれ、テスト、デプロイ インタ...
タグではなく、ダイジェストによるデプロイを生成
前のコミットは、 `set image` をサイレント no-op と停止します。 これは、 結果: ロールアウト後、タグはレジストリでダイジェストに解決され、 実行中のPodはそれに対してチェックされます。 Podが画像を実行していない場合、この実行 生成されたビルドは、レポートの成功の代わりに失敗します。 タグが...
同じコミットの再構築は何も展開し、成功を報告しました
この画像はコミット SHA でタグ付けされます。 同一の画像参照。 `kubectl set image` は何も変更しません。 デプロイメントは触れず、「ロールアウト状態」はすぐに反対に成功します OLD Pod と、このパイプラインは何もデプロイした成功したデプロイを報告します。 サービスが再構築されなければなら...
/api/settingsを先にドロップすると、何も意味しません
EmailService は、同期統合コントローラーを ************************************ /api/settings/integrations — なので、 転送は、サービスがマッピングされず、404を返すパスに達しました。 上記の /api/email ワイルドカードは既に持ち...
ルート/api/contacts、/api/calendar、/api/settingsをメールサービスへ
カモモバイルの連絡先とカレンダーは、すべてのリクエストで404'd画面を表示します。 ネイザー api ホストでパスがルーティングされたため、EmailService や 何も記録されていないサービス — 故障は遠くから見えない。 kamo-internal はこれらを必要としません: それは自分自身を通して3つに達...
2つのポッドを実行
レプリカ1 -> 2. このサービスは、 @Scheduled 作業を実行し、排他的な NATS を耐久性に結合しないので、 2番目のPodは何も重複しません。それはステートレスリクエストのサービングであり、それを維持する唯一のもの 1つのレプリカは、何も番号を上げなかったことだった. 1つのレプリカでmaxSurg...
15秒のminReadySecondsのロールアウトルームを今すぐコストで与える
progressDeadlineSeconds は 60 でした。 これは、ロールアウトが進行前に表示しなければならないウィンドウです Kubernetes は、失敗してマークアップし、以前のコミットは minReadySeconds の 15 を追加しました。 画面上の全てのロールアウトとアプリの起動。 冷たい引きだ...
このマニフェストのCRLFラインの終了を復元する
前のコミットは、それをLFに正規化したスクリプトでファイルを書き換えます。 ダース線に触れた変化のための全ファイル差分。 コンテンツの変更なし;終了を復元 ファイルが常にあるので、実際の編集は見直し可能です.
APIServiceは、すべてで優雅にシャットダウンしません
デプロイは、各サービスの唯一のPodを、リクエストをキャッチするために何も交換しました フライト 車両全体に適用される3つの設定: - プロセスがSIGTERMを見る前に、プレストップスリープ10秒。 Kubernetesは、そのPodからPodを削除します EndpointSlice と信号を同時に、Traefik...
顧客PBXからのライブコールイベントのためのAPIキー表面
VoipRecordingUploadController へのコンパニオン, 意図的に別々に VOIP CALL EVENTS スコープ: 事実の後に録音をアップロードして作成する 誰かの電話リングは今別の力であり、管理者 一方の鍵を発行することは、黙って他人を付与するべきではありません。 インスタンスは X-Ph...
転送/api/email/oauth/callback へメールサービス
GoogleのOAuthリダイレクトターゲット。 電子メールおよび大会のプロバイダと同じ形 その横にあるコールバック: 公共とセッションレス, このポップアップの土地のために ゲートウェイの起源は、テナントセッションと ?state の org 旅行なし。 正確なパスは /api/email/** のワイルドカードを...
追跡ビーコンをMediaServiceに転送する
Clones ForwardPublicWebinarではなく、一般的な転送():その方法 すべての URI、ヘッダマップ、およびボディの長さをレベル無しでstdout に印刷し、 訪問者のビーコンはIPとレファラーを運ぶ。 ここで API キーは、テナントの境界ではなく、レート・リミットと不正な制御です。 ワンポイ...
共有ライブラリ @Lob LONGVARCHAR の修正に対する再構築
Hibernate の PostgreSQL のダイアレクトは、getLong() 経由で OID として @Lob 文字列カラムを読み込みます。 ノート、連絡先、カレンダー、OAuthトークン、IMAPパスワード、メールキャンペーンの影響 組織、webhook の秘密、Canva および社会的資格情報.
YugabyteDBのポイントとPostgreSQLDialectを使う
CockroachDB は YugabyteDB に置き換えられました。 接続文字列から移動 cockroachdb-public:26257 へ yb-tserver-service:5433, と Hibernate のダイアレクト **************** から PostgreSQLDialect.
Google GCS のコピーを通したミラー Maven セントラル
すべてのドッカーステージは、寒さ〜/.m2から始まり、依存関係ツリー全体を refetches するので、セントラルビュー あらゆる同時サービス構築の全重量。 今日は429sと2回、破損して答えます 転送: BillingService は、Tomcat-embed-core を fetching "Tag misma...
一度にデコードされたトークンを上流にエンコードする
21670e5 は、UpstreamUri の FULLY-PRE-ENCODED エントリーを通じてソーシャルWebhookController をルーティングしました しかし、その URL はハイブリッドです。 `token` は @PathVariable なので、春は手が getQueryString() が生...
コールワーのクエリバイトをパブリックフェーシングプロキシーで転送
ゲートウェイは 3c24d32 でダブルエンコード転送されたクエリ文字列を停止しましたが、4 このサービスの他のプロキシは、まだ、すでにパーセントエンコードされたバイトを連結 文字列に渡すと、ResendTemplate の文字列の積み過ぎに渡します。 URIテンプレートとして、2番目の時間をエンコードします。%2C ...
呼び出し者のクエリバイトを 2 回エンコーディングするのではなく転送します
全ての URL は getRequestURI() と getRequestURI() からビルドされます。 getQueryString() — 両方とも既にパーセントエンコード済みで、 RestTemplate を文字列として書きます。 RestTemplate の String のオーバーロードは URL を呼び...
ゲートウェイでテナントアクセスルールを強化
このフィルタは、書き込まれたので、不活性です。 resolveOrgId は org:domain:<host> を読みました。 Redis から、キーを書いたことはなく、null のリターンは許可するために落ちました。 ジオブランチは、コメントがSecurityServiceに委任したと空の if-blockでした。...
ミーティングプロバイダ OAuth コールバックのルート
ズームとMicrosoftは、このゲートウェイにブラウザをリダイレクトします。 カモのアプリ。 ここにポップアップランドはテナントセッションなしで - orgは、 ?state — なので、コールバックはセッションレス、auth-stripping パススルーが必要です 通常の /api/meet/** ではなく、既に...
Kubectlのダウンロードをフラッキ・エグレッシにハードン [skip ci]
dl.k8s.io オーバー ランナーのエグレッション 断続的にミッドトランスファーをドロップ: curl: (56) OpenSSL SSL read: 復号化が失敗したか、悪いレコードマック それ以外の緑のビルドでデプロイが失敗する。 繰り返し観察 kamo-signer-monorepoとkamo-transla...
パブリックAI->human handoffのルートをプロキシする
メニュー メディアサービス createSupportSession の兄弟と一緒に。 このハンドオフ機能は到着時に死にました: MediaServiceのエンドポイント X-Internal-Auth, X-Public-Chat-Org-Id, X-Public-Chat-Key-Hash, X-Public-C...
ルート /api/email + /api/ api ホストによるサポート
(メールサービス)およびサポート(メディアサービス、/api/media と同じ上流) ルートされていない → 404. 転送とメールの修正の両方を追加します。 localhostからのservice.url クラスターサービスへのデフォルト。 Forward() は、発信者のセッションのみを渡す ヘッダ (X-***...
GET /api/public-chat/bootstrap ゲートウェイ ルート
既存の proxyWithAuth パイプラインを再利用する boottrap エンドポイントを追加します。 (キーバリデーション+オプトインオリジン+ PUBLIC CHATスコープ+レートリミット+ X-Public-Chat-Key-Hash と MediaService ブートストラップエンドポイントへのプロキ...
フェーズ1に必須originを宣言 — OriginMatcher オプトイン (空の許可リスト / 欠如 許可)
Phase-0 ウィジェットはサーバー側のプロキシを介してまだ呼び出します。そのため、オリジンロックは何もありません しかし、すべてのライブパブリックチャットキーには空の許可リストがあります。 ストリクト 執行(empty=deny、欠落-Origin=deny)はマーケティング+記号.pinkを破りました チャットと...
キャッシュ無効なキーのみ、元の拒否されていない(有効なキーのDoSを防ぎます)
風邪のRedisキャッシュでは、間違った/機密の起源を持つ有効なpublic-chatキーが 60秒のINVALIDとしてキャッシュされ、その正しい起源の要求を否定 ウィンドウ。 HTTP と WebSocket の両方のコールドキャッシュフォールバックが区別できるようになりました ******************...
Bind WS はオリジンにハンドシェイクを中継 + コールドキャッシュキーの検証フォールバックを追加します
PublicChatController のプライベートな validateViaDownstream() を共有に抽出 PublicChatKeyResolver bean so PublicChatWebSocketHandler 同じを再利用することができます downstream DB のバリデーション + 強...
メディアサービスに対するプロキシGET /lo-presence
サポートセッションプロキシはすでに生体を転送しているので、マージされたウィジェットの mediaService untouched にアクセスします。 プレゼンスプロキシを追加 借り手ポータルは、割り当てられた融資役員がオンラインかどうかを問い合わせることができます.
電子メールOAuthプロバイダコールバックのためのパブリックパススルー
転送GET ******************** に Eメールサービス セッションレス (strips auth, 以下リダイレクトなし), RingCentral OAuth コールバックをミラーリング. これは、Microsoft/Google/Zohoに登録された固定公開リダイレクトURIです.
パブリックプログラム型e-sign APIゲートウェイ(API SIGNATUREスコープ)
PublicApiController に /api/public/esign/** を追加: org API キーを検証します。 API SIGNATURE スコープ、レート・リムジン、および ESigService の転送を要求します。 X-Internal-Auth + X-Org-Id を使用した内部エンベロー...
Proxy support-message translate endpoint
Adds a passthrough route for the new MediaService endpoint that translates a single support-chat message into the visitor's URL locale. The marketing-side chat ...
Scope concurrency to build jobs, not Kubernetes deploys
Workflow-level concurrency serialized the whole pipeline (including kubectl rollouts). Move the group to the build job only so deploy jobs from different runs c...
Carve /api/voip/recordings/** out of the wildcard VOIP forwarder
The /api/voip/** catch-all in APIGatewayController was shadowing the dedicated VoipRecordingUploadController POST /api/voip/recordings/upload mapping when Sprin...
Kamo-asterisk-supportのアップロードのためのVoipRecordingUploadController
POST /api/voip/recordings/upload は、kamo-asterisk-support からマルチパートボディを受け入れます FreePBX ホスト上で実行します。 X-Api-Key が新しい VOIP RECORDING UPLOADS を検証 スコープ(*****************...
アップロードサイズを500MBに上げる
Spring Boot のデフォルトは 1MB の複数の部分を、背景イメージを引き起こします アップロードして500リクエストで失敗します。.getParts()。 マッチセキュリティサービス 既存の 500MB が制限されるため、APIService は大きなファイルアップロードをプロキシできます.
Move CORS to Traefik via kamo-middlewares, remove in-app CorsFilter
The CorsFilter @Bean in the Spring app was silently not applying headers after WebConfig.java was removed. CORS is now handled entirely at the Traefik layer by ...
重複したCorsFilterを削除し、ゲートウェイ内のCORSヘッダーを上流に除去
WebConfig.java は、CortsConfig と競合する第 2 回 CorsFilter ビーンを定義しました。 javaの bean、重複ヘッダーの書き込みを危険にさらす。 削除すると、CorsFilter が 1 つしか存在しません。 Forward() メソッドは、上流から Access-Contr...
SecurityService に転送される JSON ボディに application/json を設定
RestTemplate to upstream は、春とコンテンツタイプの互換性がないままにできます。 @RequestBody は 415 を引き起こします。 生体を読んだ後、力の適用 JSON ペイロードがJSONのように見えるとき.