From b29f36e60539bae922200a502d5ddae8c39fd129 Mon Sep 17 00:00:00 2001 From: OfficeGlobal Date: Tue, 10 Mar 2020 11:36:55 +0100 Subject: [PATCH] HB of localized readme files --- README-localized/README-es-es.md | 77 ++++++++++++++++++++++++++++++++ README-localized/README-fr-fr.md | 77 ++++++++++++++++++++++++++++++++ README-localized/README-ja-jp.md | 77 ++++++++++++++++++++++++++++++++ README-localized/README-pt-br.md | 77 ++++++++++++++++++++++++++++++++ README-localized/README-ru-ru.md | 77 ++++++++++++++++++++++++++++++++ README-localized/README-zh-cn.md | 77 ++++++++++++++++++++++++++++++++ 6 files changed, 462 insertions(+) create mode 100644 README-localized/README-es-es.md create mode 100644 README-localized/README-fr-fr.md create mode 100644 README-localized/README-ja-jp.md create mode 100644 README-localized/README-pt-br.md create mode 100644 README-localized/README-ru-ru.md create mode 100644 README-localized/README-zh-cn.md diff --git a/README-localized/README-es-es.md b/README-localized/README-es-es.md new file mode 100644 index 0000000..0d6f15a --- /dev/null +++ b/README-localized/README-es-es.md @@ -0,0 +1,77 @@ +--- +page_type: sample +products: +- office-outlook +- office-365 +languages: +- python +extensions: + contentType: samples + technologies: + - Actionable messages + createdDate: 11/17/2016 2:43:33 PM +--- + # Ejemplo de comprobación de token de solicitud de acción en Python + +Los servicios pueden enviar mensajes accionables a los usuarios para que realicen tareas sencillas en sus servicios. Cuando un usuario realiza una de las acciones de un mensaje, Microsoft enviará una solicitud de acción al servicio. La solicitud de Microsoft contendrá un token de portador en el encabezado de la autorización. En este ejemplo de código se muestra cómo comprobar el token para garantizar que la solicitud de acción es de Microsoft, y usar las notificaciones del token para validar la solicitud. + + @app.route("/api/expense", methods = ["POST"]) + def api_post_expense(): + # Obtener el token del encabezado de autorización + + authorization = request.headers['Authorization'] + token_type, token = authorization.rsplit(' ', 1) + + if token_type.lower() != "bearer": + abort(401) + + validator = ActionableMessageTokenValidator() + result = ActionableMessageTokenValidationResult() + + probar: + # Esto validará que el token fue emitido por Microsoft para la + # dirección URL de destino especificada, es decir, el destino coincide con el público deseado (notificación "aud" de token) + # + # En su código, reemplace https://api.contoso.com por la dirección URL base del servicio. + # Por ejemplo, si la dirección URL del servicio de destino es https://api.xyz.com/finance/expense?id=1234, + # reemplace https://api.contoso.com por https://api.xyz.com + + result = validator.validate_token(token, "https://api.contoso.com") + + except InvalidActionableMessageTokenError as e: + print(e) + abort(401) + + # Ya tenemos un token válido. Ahora verificaremos que el remitente y el ejecutante de la acción sean quiénes + # esperamos. El remitente es la identidad de la entidad que envió inicialmente el mensaje + # que requiere acción, y el ejecutante de la acción es la identidad del usuario que realmente + # realizó la acción (notificación "sub" de token) + # + # Debería reemplazar el código siguiente con su propia lógica de validación + # En este ejemplo, comprobamos que el correo electrónico es enviado por expense@contoso.com (remitente esperado) + # y el correo electrónico de la persona que realizó la acción es john@contoso.com (destinatario esperado) + # + # También debería devolver el encabezado CARD-ACTION-STATUS en la respuesta. + # El valor del encabezado se mostrará al usuario. + if result.sender.lower() != 'expense@contoso.com' or \ + result.action_performer.lower() != 'john@contoso.com'): + resp = flask.Response('') + resp.headers['CARD-ACTION-STATUS'] = 'Remitente no válido o no se permite el ejecutante de la acción.' + return resp, 403 + + # Código de lógica empresarial adicional para procesar el informe de gastos. + resp = flask.Response('') + resp.headers['CARD-ACTION-STATUS'] = 'Se ha aprobado el gasto.' + return resp + +El código de ejemplo usa la siguiente biblioteca para la validación de JWT. + +[PyJWT](https://pypi.python.org/pypi/PyJWT/1.5.0) + +Puede encontrar más información sobre los mensajes accionables de Outlook [aquí](https://dev.outlook.com/actions). + +## Derechos de autor +Copyright (c) 2017 Microsoft. Todos los derechos reservados. + + +Este proyecto ha adoptado el [Código de conducta de código abierto de Microsoft](https://opensource.microsoft.com/codeofconduct/). Para obtener más información, vea [Preguntas frecuentes sobre el código de conducta](https://opensource.microsoft.com/codeofconduct/faq/) o póngase en contacto con [opencode@microsoft.com](mailto:opencode@microsoft.com) si tiene otras preguntas o comentarios. diff --git a/README-localized/README-fr-fr.md b/README-localized/README-fr-fr.md new file mode 100644 index 0000000..dc72f10 --- /dev/null +++ b/README-localized/README-fr-fr.md @@ -0,0 +1,77 @@ +--- +page_type: sample +products: +- office-outlook +- office-365 +languages: +- python +extensions: + contentType: samples + technologies: + - Actionable messages + createdDate: 11/17/2016 2:43:33 PM +--- + # Exemple Python de vérification du jeton de demande d’action + +Les services peuvent envoyer des messages actionnables aux utilisateurs pour effectuer des tâches simples sur leurs services. Lorsqu’un utilisateur effectue l’une des actions dans un message, une demande d’action est envoyée au service par Microsoft. La demande de Microsoft contient un jeton du porteur dans l’en-tête d'autorisation. Cet exemple de code présente comment vérifier le jeton pour vous assurer que la demande d’action provient de Microsoft et utiliser les revendications dans le jeton pour valider la demande. + + @app.route("/api/dépense", methods = ["POST"]) + def api_post_expense(): + # Obtenir le jeton auprès de l'en-tête d’autorisation + + autorisation = request.headers['Authorization'] + token_type, token = authorization.rsplit(' ', 1) + + if token_type.lower() != "porteur": + abort(401) + + validateur = ActionableMessageTokenValidator() + résultat = ActionableMessageTokenValidationResult() + + essayer : + # Ceci valide l'émission du jeton par Microsoft pour le + # l'URL cible spécifiée, autrement dit, la cible correspond à l’audience prévue (demande « aud » dans le jeton) + # + # Dans votre code, remplacez https://api.contoso.com par l’URL de base de votre service. + #/ Par exemple, si l’URL cible du service est https://api.xyz.com/finance/expense ?id=1234, + # remplacez https://api.contoso.com par https://api.xyz.com + + résultat = validator.validate_token(token, "https://api.contoso.com") + + except InvalidActionableMessageTokenError as e: + print(e) + abort(401) + + # Un jeton valide existe. Vous allez maintenant vérifier que l’expéditeur et l'exécutant de l’action sont ceux + # prévus. L’expéditeur correspond à l’identité de l’entité qui a initialement envoyé le Message + # actionnable et l’exécutant de l’action correspond à l’identité de l’utilisateur qui a réellement + # réalisé l’action (« sous- » revendication dans le jeton). + # + # Vous devez remplacer le code ci-dessous par votre propre logique de validation. + # Dans cet exemple, vous vérifierez que le message électronique est envoyé par expense@contoso.com (expéditeur prévu) + # et que l’adresse de courrier de la personne qui a effectué l’action est john@contoso.com (destinataire prévu) + # + # Vous devez également retourner l’en-tête CARD-ACTION-STATUS dans la réponse. + # La valeur de l’en-tête s’affiche pour l’utilisateur. + if result.sender.lower() != 'expense@contoso.com' or \ + result.action_performer.lower() != 'john@contoso.com'): + resp = flask.Response('') + resp.headers['CARD-ACTION-STATUS'] = 'Expéditeur non valide ou l'exécutant de l'action n'est pas autorisé.' + return resp, 403 + + # Code de logique métier plus précis ici pour traiter le rapport sur les dépenses. + resp = flask.Response('') + resp.headers['CARD-ACTION-STATUS'] = 'La dépense a été approuvée.' + return resp + +L’exemple de code utilise la bibliothèque suivante pour la validation JWT. + +[PyJWT](https://pypi.python.org/pypi/PyJWT/1.5.0) + +D'autres informations sur les Messages actionnables d'Outlook sont disponibles [ici](https://dev.outlook.com/actions). + +## Copyright +Copyright (c) 2017 Microsoft. Tous droits réservés. + + +Ce projet a adopté le [code de conduite Open Source de Microsoft](https://opensource.microsoft.com/codeofconduct/). Pour en savoir plus, reportez-vous à la [FAQ relative au code de conduite](https://opensource.microsoft.com/codeofconduct/faq/) ou contactez [opencode@microsoft.com](mailto:opencode@microsoft.com) pour toute question ou tout commentaire. diff --git a/README-localized/README-ja-jp.md b/README-localized/README-ja-jp.md new file mode 100644 index 0000000..7ea3617 --- /dev/null +++ b/README-localized/README-ja-jp.md @@ -0,0 +1,77 @@ +--- +page_type: sample +products: +- office-outlook +- office-365 +languages: +- python +extensions: + contentType: samples + technologies: + - Actionable messages + createdDate: 11/17/2016 2:43:33 PM +--- + # アクション要求トークンの検証 Python サンプル + +サービスは、アクション可能メッセージをユーザーに送信して、サービスに対する単純なタスクを完了することができます。ユーザーがメッセージに含まれるいずれかのアクションを実行すると、Microsoft によりアクション要求がサービスに対して送信されます。Microsoft からの要求には、認証ヘッダーにベアラー トークンが含まれています。このコード サンプルでは、トークンを検証して、アクション要求が Microsoft からのものであることを確認し、トークンの要求を使用して要求を検証する方法を示します。 + + @app.route("/api/expense", methods = ["POST"]) + def api_post_expense(): + # Get the token from the Authorization header + + authorization = request.headers['Authorization'] + token_type, token = authorization.rsplit(' ', 1) + + if token_type.lower() != "bearer": + abort(401) + + validator = ActionableMessageTokenValidator() + result = ActionableMessageTokenValidationResult() + + try: + # This will validate that the token has been issued by Microsoft for the + # specified target URL i.e. the target matches the intended audience (“aud” claim in token) + # + # In your code, replace https://api.contoso.com with your service’s base URL. + # For example, if the service target URL is https://api.xyz.com/finance/expense?id=1234, + # then replace https://api.contoso.com with https://api.xyz.com + + result = validator.validate_token(token, "https://api.contoso.com") + + except InvalidActionableMessageTokenError as e: + print(e) + abort(401) + + # We have a valid token.We will now verify that the sender and action performer are who + # we expect.The sender is the identity of the entity that initially sent the Actionable + # Message, and the action performer is the identity of the user who actually + # took the action (“sub” claim in token). + # + # You should replace the code below with your own validation logic + # In this example, we verify that the email is sent by expense@contoso.com (expected sender) + # and the email of the person who performed the action is john@contoso.com (expected recipient) + # + # You should also return the CARD-ACTION-STATUS header in the response. + # The value of the header will be displayed to the user. + if result.sender.lower() != 'expense@contoso.com' or \ + result.action_performer.lower() != 'john@contoso.com'): + resp = flask.Response('') + resp.headers['CARD-ACTION-STATUS'] = 'Invalid sender or the action performer is not allowed.' + return resp, 403 + + # Further business logic code here to process the expense report. + resp = flask.Response('') + resp.headers['CARD-ACTION-STATUS'] = 'The expense was approved.' + return resp + +このコード サンプルでは、JWT 認証に次のライブラリを使用しています。 + +[PyJWT](https://pypi.python.org/pypi/PyJWT/1.5.0) + +Outlook のアクション可能メッセージの詳細については、[こちら](https://dev.outlook.com/actions)をクリックしてください。 + +## 著作権 +Copyright (c) 2017 Microsoft.All rights reserved. + + +このプロジェクトでは、[Microsoft オープン ソース倫理規定](https://opensource.microsoft.com/codeofconduct/)が採用されています。詳細については、「[倫理規定の FAQ](https://opensource.microsoft.com/codeofconduct/faq/)」を参照してください。また、その他の質問やコメントがあれば、[opencode@microsoft.com](mailto:opencode@microsoft.com) までお問い合わせください。 diff --git a/README-localized/README-pt-br.md b/README-localized/README-pt-br.md new file mode 100644 index 0000000..951401f --- /dev/null +++ b/README-localized/README-pt-br.md @@ -0,0 +1,77 @@ +--- +page_type: sample +products: +- office-outlook +- office-365 +languages: +- python +extensions: + contentType: samples + technologies: + - Actionable messages + createdDate: 11/17/2016 2:43:33 PM +--- + # Exemplo em Python de verificação de token de solicitação de ação + +Serviços podem enviar mensagens acionáveis para usuários para que os mesmos completem tarefas simples em oposição aos seus serviços. Quando um usuário executar uma das ações em uma mensagem, uma solicitação de ação será enviada pela Microsoft para o serviço. A solicitação da Microsoft conterá um token de portador no cabeçalho de autorização. Este exemplo de código mostra como verificar o token para garantir que a solicitação de ação veio mesmo da Microsoft e como usar as declarações do token para validar a solicitação. + + @app.route("/api/expense", methods = ["POST"]) + def api_post_expense(): + # Solicite um novo token do servidor de autorização. + + autorização = solicitação headers ['Autorização'] + token_type, token = authorization.rsplit(' ', 1) + + if token_type.lower() != "bearer": + abort(401) + + validator = ActionableMessageTokenValidator() + result = ActionableMessageTokenValidationResult() + + tentar: + # Isto verificará se o token foi emitido pela Microsoft para o + # URL de destino especificada, ou seja, o destino corresponde à audiência desejada (declaração de "AUD" no token) + # + # Em seu código, substitua https://api.contoso.com pela URL base do seu serviço. + # Por exemplo, se a URL de destino do serviço for https://api.xyz.com/finance/expense?id=1234, + # em seguida, substitua https://api.contoso.com por https://api.xyz.com + + result = validator.validate_token(token, "https://api.contoso.com") + + exceto InvalidActionableMessageTokenError como e: + print(e) + abort(401) + + # Temos um token válido. Agora, verificaremos se o remetente e a ação executores são quem + # Esperamos. O remetente é a identidade da entidade que enviou a ação + # Mensagem, e o executor da ação é a identidade do usuário que + # tomou a ação ("sub" declaração no token). + # + # Você deve substituir o código abaixo por sua própria lógica de validação + # Neste exemplo, verificamos se o email foi enviado por expense@contoso.com (remetente esperado) + # e o email da pessoa que executou a ação é john@contoso.com (destinatário esperado) + # + # Você também deve retornar o cabeçalho do STATUS da ação de cartão na resposta. + # O valor do cabeçalho será exibido para o usuário. + se result.sender.lower() != 'expense@contoso.com' or \ + result.action_performer.lower() != 'john@contoso.com'): + resp = flask.Response('') + resp.headers [' CARD-ACTION-STATUS '] = ' remetente inválido ou o executor da ação não é permitido. ' + retornar resp, 403 + + # Outro código de lógica de negócios aqui para processar o relatório de despesas. + resp = flask.Response('') + resp.headers [' CARD-ACTION-STATUS '] = ' a despesa foi aprovada. ' + retornar resp + +O exemplo de código está usando a biblioteca a seguir para a validação de JWT. + +[PyJWT](https://pypi.python.org/pypi/PyJWT/1.5.0) + +Mais informações as Mensagens Acionáveis do Outlook estão disponíveis](https://dev.outlook.com/actions)aqui](https://dev.outlook.com/actions). + +## Direitos autorais +Copyright (c) 2017 Microsoft. Todos os direitos reservados. + + +Este projeto adotou o [Código de Conduta do Código Aberto da Microsoft](https://opensource.microsoft.com/codeofconduct/). Para saber mais, confira [Perguntas frequentes sobre o Código de Conduta](https://opensource.microsoft.com/codeofconduct/faq/) ou contate [opencode@microsoft.com](mailto:opencode@microsoft.com) se tiver outras dúvidas ou comentários. diff --git a/README-localized/README-ru-ru.md b/README-localized/README-ru-ru.md new file mode 100644 index 0000000..3877f89 --- /dev/null +++ b/README-localized/README-ru-ru.md @@ -0,0 +1,77 @@ +--- +page_type: sample +products: +- office-outlook +- office-365 +languages: +- python +extensions: + contentType: samples + technologies: + - Actionable messages + createdDate: 11/17/2016 2:43:33 PM +--- + # Пример кода Python для проверки маркера запроса + +Службы могут отправлять пользователям интерактивные сообщения для выполнения простых задач в отношении своих служб. При выполнении пользователем одного из действий в сообщении, ему будет отправлен запрос на обслуживание от Майкрософт. Запрос от Майкрософт будет содержать маркер носителя в заголовке авторизации. В этом примере кода показано, как проверить маркер, чтобы убедиться, что запрос получен от Майкрософт, и использовать утверждения в маркере для проверки запроса. + + @app.route("/api/expense", methods = ["POST"]) + def api_post_expense(): + # Получить маркер из заголовка авторизации + + authorization = request.headers['Authorization'] + token_type, token = authorization.rsplit(' ', 1) + + if token_type.lower() != "bearer": + abort(401) + + validator = ActionableMessageTokenValidator() + result = ActionableMessageTokenValidationResult() + + try: + # Данное действие подтверждает, что маркер был выдан корпорацией Майкрософт + # для указанного конечного URL-адреса, т. е. цель совпадает с целевой аудиторией (утверждение "aud" в маркере) + # + # Замените в вашем коде https://api.contoso.com на базовый URL-адрес вашей службы. + # Например, если целевой URL-адрес службы — https://api.xyz.com/finance/expense?id=1234, + # замените https://api.contoso.com на https://api.xyz.com + + result = validator.validate_token(token, "https://api.contoso.com") + + Кроме InvalidActionableMessageTokenError в виде e: + печать (e) + abort(401) + + # У нас действительный маркер. Теперь нужно убедиться, что отправитель и исполнитель действия являются теми, + # кого мы ожидаем. Отправитель — это идентификация субъекта, который изначально отправил интерактивное + # сообщение, а исполнитель действия — это идентификация пользователя, который в действительности + # выполнил действие (утверждение "sub" в маркере). + # + # Вам потребуется заменить указанный ниже код на собственную логику проверки + # В этом примере мы проверяем, что сообщение отправлено expense@contoso.com (ожидаемый отправитель) + # и электронная почта лица, выполнившего действие, — john@contoso.com (ожидаемый получатель) + # + # Вам потребуется также вернуть заголовок CARD-ACTION-STATUS в ответе. + # Значение заголовка будет отображаться для пользователя. + if result.sender.lower() != 'expense@contoso.com' or \ + result.action_performer.lower() != 'john@contoso.com'): + resp = flask.Response('') + resp.headers['CARD-ACTION-STATUS'] = 'Invalid sender or the action performer is not allowed.' + return resp, 403 + + # Дальнейший представленный здесь код бизнес-логики предназначен для обработки отчета о расходах. + resp = flask.Response('') + resp.headers['CARD-ACTION-STATUS'] = 'The expense was approved.' + return resp + +Образец кода использует следующую библиотеку для проверки JWT. + +[PyJWT](https://pypi.python.org/pypi/PyJWT/1.5.0) + +Дополнительные сведения об интерактивных сообщениях в Outlook доступны [здесь](https://dev.outlook.com/actions). + +## Авторские права +(c) Корпорация Майкрософт (Microsoft Corporation), 2017. Все права защищены. + + +Этот проект соответствует [Правилам поведения разработчиков открытого кода Майкрософт](https://opensource.microsoft.com/codeofconduct/). Дополнительные сведения см. в разделе [часто задаваемых вопросов о правилах поведения](https://opensource.microsoft.com/codeofconduct/faq/). Если у вас возникли вопросы или замечания, напишите нам по адресу [opencode@microsoft.com](mailto:opencode@microsoft.com). diff --git a/README-localized/README-zh-cn.md b/README-localized/README-zh-cn.md new file mode 100644 index 0000000..4448959 --- /dev/null +++ b/README-localized/README-zh-cn.md @@ -0,0 +1,77 @@ +--- +page_type: sample +products: +- office-outlook +- office-365 +languages: +- python +extensions: + contentType: samples + technologies: + - Actionable messages + createdDate: 11/17/2016 2:43:33 PM +--- + # 操作请求令牌验证 Python 示例 + +服务能够向用户发送可操作邮件,以针对其服务完成简单的任务。用户在邮件中执行其中一个操作时,Microsoft 将向该服务发送一个操作请求。来自 Microsoft 的请求将在授权标头中包含持有者令牌。此代码示例介绍如何验证令牌以确保操作请求来自 Microsoft,然后使用令牌中的声明验证此请求。 + + @app.route("/api/expense", methods = ["POST"]) + def api_post_expense(): + # 从授权标头获取令牌 + + authorization = request.headers['Authorization'] + token_type, token = authorization.rsplit(' ', 1) + + if token_type.lower() != "bearer": + abort(401) + + validator = ActionableMessageTokenValidator() + result = ActionableMessageTokenValidationResult() + + try: + # 这将验证令牌已由 Microsoft 针对具体的 + # 目标 URL 签发,即与指定受众匹配的目标(令牌中的“aud”声明) + # + # 在代码中,使用服务的基 URL 替换 https://api.contoso.com。 + # 例如,如果服务目标 URL 是 https://api.xyz.com/finance/expense?id=1234, + # 那么将 https://api.contoso.com 替换为 https://api.xyz.com + + result = validator.validate_token(token, "https://api.contoso.com") + + except InvalidActionableMessageTokenError as e: + print(e) + abort(401) + + # 我们拥有一个有效的令牌。我们现在将验证发件人和操作执行人是否是 + # 我们预计的人员。发件人是最初发送可操作邮件的实体身份, + # 操作执行者是实际执行操作的用户身份 + # (令牌中的“sub”声明)。 + # + # 应使用自有验证逻辑替换下列代码 + # 在此示例中,我们验证电子邮件是否是由 expense@contoso.com(预计发件人)发送的 + # 以及操作执行人是否是 john@contoso.com(预计收件人) + # + # 还应在响应中返回 CARD-ACTION-STATUS 标头。 + # 标头值将显示给用户。 + if result.sender.lower() != 'expense@contoso.com' or \ + result.action_performer.lower() != 'john@contoso.com'): + resp = flask.Response('') + resp.headers['CARD-ACTION-STATUS'] = 'Invalid sender or the action performer is not allowed.' + return resp, 403 + + # 这里的其他业务逻辑代码用于处理费用报表。 + resp = flask.Response('') + resp.headers['CARD-ACTION-STATUS'] = 'The expense was approved.' + return resp + +代码示例使用下列库来进行 JWT 验证。 + +[PyJWT](https://pypi.python.org/pypi/PyJWT/1.5.0) + +有关 Outlook 可操作邮件的更多信息,请参见[此处](https://dev.outlook.com/actions)。 + +## 版权信息 +版权所有 (c) 2017 Microsoft。保留所有权利。 + + +此项目已采用 [Microsoft 开放源代码行为准则](https://opensource.microsoft.com/codeofconduct/)。有关详细信息,请参阅[行为准则 FAQ](https://opensource.microsoft.com/codeofconduct/faq/)。如有其他任何问题或意见,也可联系 [opencode@microsoft.com](mailto:opencode@microsoft.com)。