HTTP/2.0 400 Bad Request PUTting a page

Francisco Mendez Losada
I'm New Here
I'm New Here
Those new to the Atlassian Community have posted less than three times. Give them a warm welcome!
November 2, 2023

Hello all:

 

I'm trying to launch the following request (sorry for the big post I was not able to find anything smaller):

 


2023-11-02 13:00:38.365 TRACE rest: PUT /wiki/rest/api/content/XXXX HTTP/1.1
Host: XXXX.atlassian.net
Authorization: Basic XXXX
Content-Type: application/json

{"ancestors":[{"id":"17856824786"}],"body":{"storage":{"representation":"storage","value":"\u003cp\u003e[[\u003cem\u003eTOC\u003c/em\u003e]]\u003c/p\u003e\n\u003ch1 id=\"introduccin\"\u003eIntroducción\u003c/h1\u003e\n\u003cp\u003eEn el presente documento se desarrolla técnicamente la propuesta de Autenticación para Magenda indicando las referencias y los trabajos a realizar.\u003c/p\u003e\n\u003cp\u003etl;dr -\u0026gt; Ir directamente a Análisis Técnico para saber los trabajos a realizar.\u003c/p\u003e\n\u003ch1 id=\"propuesta-inicial\"\u003ePropuesta inicial\u003c/h1\u003e\n\u003ch2 id=\"api-de-usuarios\"\u003eAPI de usuarios\u003c/h2\u003e\n\u003cp\u003eSe requiere modificar la API de Magenda para incluir, en las llamadas a la API de usuarios, todos los campos que pueda necesitar Cognito para realizar su operación (por ejemplo, email).\nLa API de Magenda usará, a su vez, la API de AWS para crear y modificar usuarios en Cognito.\u003c/p\u003e\n\u003ch2 id=\"autenticacin\"\u003eAutenticación\u003c/h2\u003e\n\u003cp\u003eSe requiere modificar el sistema de autenticación en la API de Magenda para integrarla con la autenticación de Cognito.\nEllo requiere cambiar los endpoints de obtención de token de usuario para delegarlos en Cognito.\u003c/p\u003e\n\u003ch2 id=\"frontend\"\u003eFrontend\u003c/h2\u003e\n\u003cp\u003eSe requiere la modificación del Frontend de Magenda para permitir la autenticación mediante Cognito, que se realizará de dos formas:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eLogin desde la aplicación: se validará el login con los usuarios propios de Cognito.\u003c/li\u003e\n\u003cli\u003eToken de autenticación: se validará el token de autenticación con el backend de Magenda.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eEl Login desde la aplicación Magenda se realizar únicamente para que puedan acceder usuarios que no existen en la Web del Profesional, por ejemplo, Operarios o Empresas (futuro). En ese caso el Id de usuario será, probablemente, un email.\u003c/p\u003e\n\u003ch2 id=\"llamadas-api-desde-systematheootros\"\u003eLlamadas API desde Systema/Theo/Otros\u003c/h2\u003e\n\u003cp\u003ePara realizar llamadas a la API de Magenda se usará el tipo de autenticación Client Credentials, que requiere un client_id y un client_secret asociados al usuario que realiza la llamada.\nPara la obtención del token de acceso se llamará al endpoint “token” definido en Cognito que será similar al mostrado:\nhttps://\u003cyour-domain\u003e/oauth2/token\nEste usuario estará asociado a una aplicación concreta de Cognito que le otorgará ciertos permisos:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdministrador (para Theo/Systema).\u003c/li\u003e\n\u003cli\u003eProveedor (para uso por proveedores externos).\u003c/li\u003e\n\u003cli\u003eOtros: para uso futuro, a definir, por ejemplo, administrador de empresa.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"autorizacin-de-usuarios-desde-systemaweb-del-profesional\"\u003eAutorización de usuarios desde Systema/Web del Profesional\u003c/h2\u003e\n\u003cp\u003eSe requiere la delegación de la autenticación de los usuarios que accedan a Magenda para poder permitir el acceso de los usuarios de Systema/Web del profesional sin necesidad de realizar login en Magenda.\u003c/p\u003e\n\u003cp\u003ePara ello desde la web del profesional se deberá realizar la siguiente secuencia de autorización, que es un SSO (Single Sign-on) personalizado:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMultiasistencia realizará una llamada con el flujo “Client Credentials” para obtener un token de acceso.\u003c/li\u003e\n\u003cli\u003eEse token de acceso implica que hay una relación de confianza entre Systema/Theo y Magenda, por lo que posteriores operaciones con ese token no requerirán que sea validada en Cognito.\u003c/li\u003e\n\u003cli\u003eMultiasistencia realizará una llamada a un endpoint de impersonación en Magenda (todavía por definir), en la que enviará un usuario de la web del profesional con el que impersonarse.\u003c/li\u003e\n\u003cli\u003eMagenda generará un nuevo token de acceso que podrá ser usado en la integración de Magenda dentro de la Web del Profesional.\no\tEl token de acceso a Magenda puede ser recibido tanto en la cabecera de Authorization de HTTP, como en la URL, como un Query Param de HTTP (ejemplo \u003ca href=\"https://magenda.com/home?token=12345678)\"\u003ehttps://magenda.com/home?token=12345678)\u003c/a\u003e.\no\tMagenda se encargará de gestionar y validar ese token y las operaciones que puede realizar, que serán las que otorgue el rol/grupo del usuario con el que se ha impersonado.\no\tLa validez del token de acceso a MAgenda desde la web del profesional se establecerá, en principio en 24 horas.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eLo importante a destacar en este punto es que, una vez que Systema obtiene un token de acceso desde Cognito se establece una Relación de Confianza entre los dominios de MAgenda y Systema/Theo.\u003c/p\u003e\n\u003ch2 id=\"sincronizacin-de-usuarios-desde-systema\"\u003eSincronización de usuarios desde Systema\u003c/h2\u003e\n\u003cp\u003eEl sistema de autenticación de Magenda necesita conocer los usuarios de Systema y almacenarlos en su base de datos para poder realizar la impersonación y gestionar el acceso.\nPara ello es necesario que Systema realice llamadas a la API de Magenda cada vez que se agrega o elimina un usuario.\nMagenda habilita una API de creación, modificación y borrado de usuarios que puede ser accedida por sistema mediante autenticación de tipo Client Credentials.\u003c/p\u003e\n\u003cp\u003ePara la primera carga masiva de usuarios desde Systema se recomienda la generación de un fichero CSV que incluya su nombre de usuario y, como mínimo, su grupo (administrador o proveedor).\nLos datos pueden ser cargados después mediante un script de bash/powershell que realice llamadas a la API de Magenda (usando Client Credentials para la autorización).\u003c/p\u003e\n\u003ch1 id=\"anlisis-tcnico\"\u003eAnálisis técnico\u003c/h1\u003e\n\u003ch2 id=\"observaciones\"\u003eObservaciones\u003c/h2\u003e\n\u003ch2 id=\"aws-cognito-api-aws-cli\"\u003eAWS Cognito API (aws cli)\u003c/h2\u003e\n\u003cp\u003ePara el manejo de usuarios se conectará la API actual con Cognito, tanto para la autorización como para el alta/baja y modificación de los mismos.\u003c/p\u003e\n\u003cp\u003ePara el acceso a la API de AWS se usará la librería boto3 y en este documento se presentarán los comandos equivalentes de la aws cli que se han de ejecutar.\u003c/p\u003e\n\u003cp\u003eMuestra de comandos a ejecutar:\u003c/p\u003e\n\u003cac:structured-macro ac:name=\"code\"\u003e\u003cac:parameter ac:name=\"language\"\u003e\u003c/ac:parameter\u003e\u003cac:parameter ac:name=\"collapse\"\u003efalse\u003c/ac:parameter\u003e\u003cac:plain-text-body\u003e\u003c![CDATA[# Crear user\naws cognito-idp admin-create-user --user-pool-id us-west-2_aaaaaaaaa --username diego --user-attributes Name=email,Value=diego@example.com Name=phone_number,Value=\"+15555551212\" --message-action SUPPRESS\n\n# Add user to group\naws cognito-idp admin-add-user-to-group --user-pool-id us-west-2_aaaaaaaaa --username Jane --group-name MyGroup\n\n# Cambiar password\naws cognito-idp admin-set-user-password --region eu-west-1 --user-pool-id eu-west-1_dZGTfAWJx --username impalah --password Temporary2! --permanent\n\n# Autorizar user\naws cognito-idp initiate-auth --region eu-west-1 --auth-flow USER_PASSWORD_AUTH --client-id b7g15gh2uhumbk580prm9ve60 --auth-parameters USERNAME=impalah,PASSWORD=Temporary2!]]\u003e\u003c/ac:plain-text-body\u003e\u003c/ac:structured-macro\u003e\u003ch2 id=\"client-credentials-login\"\u003eClient credentials login\u003c/h2\u003e\n\u003cp\u003eCuando una API quiere operar con magenda (server-to-server) ha de usar el flujo Client Credentials de OAuth, que devolverá una token JWT que puede ser validada en backend y el grupo de funcionalidades al que tiene acceso puede ser validado en su scope.\u003c/p\u003e\n\u003cp\u003eLa token se enviará después en cada llamada a la API.\u003c/p\u003e\n\u003ch3 id=\"obtener-access-token\"\u003eObtener access token\u003c/h3\u003e\n\u003cp\u003eSe enviará una petición POST hacia \u003ca href=\"https://magenda-dev.auth.eu-west-1.amazoncognito.com/oauth2/token\"\u003ehttps://magenda-dev.auth.eu-west-1.amazoncognito.com/oauth2/token\u003c/a\u003e con el ContenType application/x-www-form-urlencoded y los siguientes parámetros:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003egrant_type: client_credentials\u003c/li\u003e\n\u003cli\u003eclient_id\u003c/li\u003e\n\u003cli\u003eclient_secret\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eSi la operación tiene éxito se devolverá una token JWT que puede ser validad y examinada (por ejemplo en jwt.io). A continuación está una muestra de la información de la misma:\u003c/p\u003e\n\u003cac:structured-macro ac:name=\"code\"\u003e\u003cac:parameter ac:name=\"language\"\u003e\u003c/ac:parameter\u003e\u003cac:parameter ac:name=\"collapse\"\u003efalse\u003c/ac:parameter\u003e\u003cac:plain-text-body\u003e\u003c![CDATA[{\n \"sub\": \"5736qi3i63b30h2eaud2p0g7s0\",\n \"token_use\": \"access\",\n \"scope\": \"http://magenda-dev-web.s3-website-eu-west-1.amazonaws.com/admin\",\n \"auth_time\": 1685957358,\n \"iss\": \"https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_rOLfFdxMG\",\n \"exp\": 1685960958,\n \"iat\": 1685957358,\n \"version\": 2,\n \"jti\": \"9d407569-27c4-46d8-a428-17f6ae49d978\",\n \"client_id\": \"5736qi3i63b30h2eaud2p0g7s0\"\n}]]\u003e\u003c/ac:plain-text-body\u003e\u003c/ac:structured-macro\u003e\u003cp\u003eLas partes importantes aquí son \u0026quot;sub\u0026quot;, que indica el usuario que hace la operación y \u0026quot;scope\u0026quot;, que indica su \u0026quot;grupo\u0026quot; o a qué operaciones tiene acceso (se ha de eliminar la url del inicio).\u003c/p\u003e\n\u003ch2 id=\"login-cognito\"\u003eLogin Cognito\u003c/h2\u003e\n\u003cp\u003ePara aceder a la pantalla de login de Cognito se usa la URL de login, que es:\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ehttps://magenda-dev.auth.eu-west-1.amazoncognito.com/oauth2/authorize?response_type=token\u0026amp;client_id=56jfer20n3u8t2ap9smv72oulo\u0026amp;redirect_uri=http://localhost\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eTras una respuesta correcta redireccionará a la redirect_uri enviando los parámetros en la URL. Por ejemplo:\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ehttp://localhost/#id_token=BIG_BIG_JWT_TOKEN\u0026amp;expires_in=3600\u0026amp;token_type=Bearer\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eEl contenido de la token ha de incluir los datos del usuario, tal como se muestra en este ejemplo:\u003c/p\u003e\n\u003cac:structured-macro ac:name=\"code\"\u003e\u003cac:parameter ac:name=\"language\"\u003e\u003c/ac:parameter\u003e\u003cac:parameter ac:name=\"collapse\"\u003efalse\u003c/ac:parameter\u003e\u003cac:plain-text-body\u003e\u003c![CDATA[{\n \"at_hash\": \"ZvBJ8Rvg1jcGfnC5S1M-yA\",\n \"sub\": \"bdba6c75-de6b-445a-bac9-6ad114a7d2ef\",\n \"cognito:groups\": [\n \"admin\"\n ],\n \"iss\": \"https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_7ufxB5ewH\",\n \"cognito:username\": \"godzilla\",\n \"aud\": \"56jfer20n3u8t2ap9smv72oulo\",\n \"token_use\": \"id\",\n \"auth_time\": 1685965294,\n \"exp\": 1685968894,\n \"iat\": 1685965294,\n \"jti\": \"cb666841-38c3-4b52-aff5-be8a025b06f5\",\n \"email\": \"lino.figueroa@softwareone.com\"\n}]]\u003e\u003c/ac:plain-text-body\u003e\u003c/ac:structured-macro\u003e\u003cp\u003eA destacar los campos:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eiss\u003c/strong\u003e que contiene el identificador de usuario.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ecognito:groups\u003c/strong\u003e que contiene los grupos a los que pertenece el usuario\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"distinguir-el-tipo-de-conexin\"\u003eDistinguir el tipo de conexión\u003c/h2\u003e\n\u003cp\u003eA la hora de distinguir el tipo de conexión que se ha efectuado, y poder averiguar los grupos de usuarios, se ha de comprobar que en la token JWT se recibe o no el parámetro \u0026quot;client_id\u0026quot;.\u003c/p\u003e\n\u003cp\u003eDe esta forma, en Backend se redirigirá a un método u otro para cargar en el objeto \u0026quot;user\u0026quot; el grupo del usuario:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eclient_id usar el parámetro \u0026quot;scope\u0026quot;.\u003c/li\u003e\n\u003cli\u003eno client_id usar el parámetro \u0026quot;cognito:groups\u0026quot;.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"modificacin-usuarios\"\u003eModificación usuarios\u003c/h2\u003e\n\u003ch3 id=\"backend-modelo-de-datos\"\u003eBackend: Modelo de datos\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAgregar nuevos campos a usuario:\nemail (opcional): de tipo email, con regex adecuada\norigin (default \u0026quot;system\u0026quot;): enum de string con valores \u0026quot;system\u0026quot;, \u0026quot;external\u0026quot;, \u0026quot;api\u0026quot;\n--\u0026quot;system\u0026quot; - Proviene de sistemas de Multiasistencia.\n--\u0026quot;external\u0026quot; - Solo login externo (operarios).\n--\u0026quot;api\u0026quot; - Autenticación con client credentials: api externa\nclient_id (opcional): asociación de usuario con \u0026quot;client_id\u0026quot; de JWT, para poder realizar filtros mediante la API. Uso futuro.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAgregar nuevos tipos de usuarios:\n\u0026quot;api\u0026quot; - Usuario de tipo API\n\u0026quot;operator\u0026quot; - Usuario de tipo operario.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eModificar tests en repositorio (y quizás mocks en servicios).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"backend-api\"\u003eBackend: API\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAgregar nuevos parámetros en Settings (preguntar a Lino los valores de estos parámetros):\nAWS_COGNITO_USER_POOL_ID: string, default ''\nAWS_COGNITO_USER_POOL_REGION: string, default ''\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAgregar nuevos campos de usuario (email) en Request, Response y domain entities.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eModificar tests de servicios y mocks.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"backend-domain\"\u003eBackend: Domain\u003c/h3\u003e\n\u003cp\u003e(hablar con Lino para solicitar claves de conexión a AWS)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAgregar boto3 a dependencias de poetry.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSe asume que la configuración de AWS está establecida en las variables de entorno de AWS.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCrear clase AwsCognito (aws_cognito.py) en magenda/infrastructure/aws para conexión con sistema Cognito e implementar métodos básicos.\ncreate_user: crea usuario en cognito.\nadd_group: añade un usuario a un grupo.\nchange_password: cambia la password del usuario por una password fija especificada.\nauthorize_user: inicia la autorización de un usuario (usado para la impersonación).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCrear servicio de negocio en domain UserService para llamar a la clase AwsCognito y realizar operaciones de creación/modificación/eliminación de usuario. Recibirá siempre una entidad de dominio User.\ncreate: crea un usuario, lo añade a un grupo y, dependiendo de su tipo, le resetea la password o envía una confirmación por email. \u003cstrong\u003e(PTE definir reglas)\u003c/strong\u003e\nupdate: modifica un usuario, pero por el momento solo cambiará su grupo.\ndelete: desactiva un usuario (cambia su estado a deactivated).\nget_by_id: obtiene datos de usuario por su id.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"configurar-cognito-en-aws-arquitecto\"\u003eConfigurar Cognito en AWS: Arquitecto\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eConfigurar sistema: activar tipos de autenticación (para usuarios y aplicaciones), configurar roles/grupos AWS de acceso para Magenda, configurar flujos.\u003c/li\u003e\n\u003cli\u003eCrear scripts IaC (Terraform) y pruebas.\u003c/li\u003e\n\u003cli\u003eCrear usuario Master para Magenda.\u003c/li\u003e\n\u003cli\u003eCrear client credentials de aplicación para Magenda.\u003c/li\u003e\n\u003cli\u003eCrear usuario en tabla MAgenda.\u003c/li\u003e\n\u003cli\u003eDocumentación para administradores del sistema.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"backend-autenticacin\"\u003eBackend: Autenticación\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eLa password de settings (USERS_MASTER_PASSWORD) ha de cambiar, ya que necesita minúsculas, mayúsculas, números y símbolos.\u003c/li\u003e\n\u003cli\u003eCrear nuevo parámetro de settings con nombre AUTH_PASSWORD_SALT , de tipo string e incluir una cadena aleatoria.\u003c/li\u003e\n\u003cli\u003eAgregar parámetro para descargar certificado de validación de JWT. Es la JWKS URI: https://cognito-idp.\u003cRegion\u003e.amazonaws.com/\u003cuserPoolId\u003e/.well-known/jwks.json (preguntar a Lino el UserPoolId)\u003c/li\u003e\n\u003cli\u003eValidación de token JWT contra cognito: \u003ca href=\"https://gntrm.medium.com/jwt-authentication-with-fastapi-and-aws-cognito-1333f7f2729e\"\u003ehttps://gntrm.medium.com/jwt-authentication-with-fastapi-and-aws-cognito-1333f7f2729e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eManejo de usuarios de flujo Client Credentials (APIs externas)\nAl validar la token se ha de comprobar en la base de datos su grupo usando su id de usuario y asignarlo a la clase User.\u003c/li\u003e\n\u003cli\u003eReconstrucción de usuario interno User (grupo, permisos, nombre, etc.) para su uso en la gestión de API (current_user)\u003c/li\u003e\n\u003cli\u003eAgregar funcion de generación de password única para usuario usando AUTH_PASSWORD_SALT, cuyo algoritmo será:\nf\u0026quot;MA{hashlib.sha256(f\u0026quot;{username}{USERS_MASTER_PASSWORD}{AUTH_PASSWORD_SALT}\u0026quot;)}!\u0026quot;\nEs decir, concatena los campos, hace algoritmo SHA256 y añade MA al principio y ! al final.\u003c/li\u003e\n\u003cli\u003eAgregar endpoint de impersonación (POST).\nRecibe en la request un id de usuario ({\u0026quot;username\u0026quot;: \u0026quot;1234567890\u0026quot;}), ha de realizar la operación de \u0026quot;initiate-auth\u0026quot; (ver más arriba en comandos cli), la password será la indicada en el algoritnmo anterior.\nSolo el tipo de usuario \u0026quot;admin\u0026quot; puede realizar la impersonación.\nDevuelve la token JWT recibida desde cognito.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"frontend-modificar-autenticacin\"\u003eFrontend: Modificar Autenticación\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAgregar parámetro de configuración de URL de Login de cognito.\u003c/li\u003e\n\u003cli\u003eAgregar parámetro para descargar certificado de validación de JWT. Es la JWKS URI: https://cognito-idp.\u003cRegion\u003e.amazonaws.com/\u003cuserPoolId\u003e/.well-known/jwks.json (preguntar a Lino el UserPoolId)\u003c/li\u003e\n\u003cli\u003eValidación de Token JWT contra cognito usando aws-amplify (\u003ca href=\"https://dev.to/rodrigokamada/authentication-using-the-amazon-cognito-to-an-angular-application-ilh)\"\u003ehttps://dev.to/rodrigokamada/authentication-using-the-amazon-cognito-to-an-angular-application-ilh)\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eRedirección a pantalla de login de cognito si no está loggeado.\u003c/li\u003e\n\u003cli\u003e¿Crear URL de entrada en aplicación para post-login?\u003c/li\u003e\n\u003cli\u003eAdmitir token en URLs (/?id_token=12345) y validarlas como si viniesen en header token.\nA valorar: se agregará la token como Authorization Bearer y se eliminará de la URL o se seguirá manteniendo SIEMPRE?\u003c/li\u003e\n\u003cli\u003ePersonalización pantalla de login para usuarios externos (modificar CSS y añadir en AWS): \u003ca href=\"https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-app-ui-customization.html\"\u003ehttps://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-app-ui-customization.html\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n"}},"id":"XXXX","metadata":{"labels":[],"properties":{"content-appearance-published":{"value":"full-width"}}},"title":"ID 24 Autenticación","type":"page","version":{"minorEdit":false,"number":2}}

 

But I get this answer (HTTP 400). Apart from using a deprecated API (which is fine for me at this moment, because others similar requests work just OK) I think the problem has to do with some content present in the input.

 


2023-11-02 13:00:38.949 TRACE rest: HTTP/2.0 400 Bad Request
Atl-Confluence-Via: h:confluence-prod-ap-3-3.prod.atl-paas.net
Atl-Traceid: 8754563b5ea74704849c1b0e4a4b46a2
Cache-Control: no-cache, no-store, must-revalidate
Content-Type: application/json
Date: Thu, 02 Nov 2023 12:00:38 GMT
Deprecation: Wed, 1 Mar 2023 00:00:00 GMT
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Link: <https://developer.atlassian.com/cloud/confluence/changelog/#CHANGE-864>; rel="deprecation"
Nel: {"failure_fraction": 0.001, "include_subdomains": true, "max_age": 600, "report_to": "endpoint-1"}
Report-To: {"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": "endpoint-1", "include_subdomains": true, "max_age": 600}
Server: AtlassianEdge
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
Vary: Accept-Encoding
Warning: 299 - "Deprecated API"
X-Content-Type-Options: nosniff
X-Xss-Protection: 1; mode=block

{"statusCode":400,"data":{"authorized":true,"valid":true,"errors":[],"successful":true},"message":"com.atlassian.confluence.api.service.exceptions.BadRequestException: Content body cannot be converted to new editor format"}

 

Any ideas are welcome. Perhaps it is something obvious...

Regards.

2 answers

1 accepted

0 votes
Answer accepted
Fabio Racobaldo _Herzum_
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
November 19, 2023

Hi @Francisco Mendez Losada  and welcome,

it seems that there are some missing parameters :

  • version : current
  • type : page

https://developer.atlassian.com/cloud/confluence/rest/v1/api-group-content/#api-wiki-rest-api-content-id-put

Please could you verify?

Fabio

0 votes
Francisco Mendez Losada
I'm New Here
I'm New Here
Those new to the Atlassian Community have posted less than three times. Give them a warm welcome!
November 19, 2023

Thank you for your answer @Fabio Racobaldo _Herzum_. After some trial and error I was able to determine that some HTML tag was unbalanced.

Suggest an answer

Log in or Sign up to answer
DEPLOYMENT TYPE
CLOUD
PRODUCT PLAN
PREMIUM
TAGS
AUG Leaders

Atlassian Community Events