glpi-project / glpi

GLPI is a Free Asset and IT Management Software package, Data center management, ITIL Service Desk, licenses tracking and software auditing.
https://glpi-project.org
GNU General Public License v3.0
4.24k stars 1.29k forks source link

Can't set user email address with API Rest #15576

Closed renanredel closed 1 year ago

renanredel commented 1 year ago

Code of Conduct

Is there an existing issue for this?

Version

10.0.9

Bug description

I'm trying to set the user email address using the API Rest. When I try the GET method to the endpoint <glpi-url>apirest.php/user/<userID>/UserEmail I get the email address from the user.

[
    {
        "id": 1,
        "users_id": 9,
        "is_default": 1,
        "is_dynamic": 0,
        "email": "oldEmail@test.com.br",
        "links": [
            {
                "rel": "User",
                "href": "https://glpi-url/apirest.php/User/9"
            }
        ]
    }
]

If i try the POST method to the same endpoint, its return to me the error:

[
    "ERROR_GLPI_ADD",
    "You don't have permission to perform this action."
]

I'm using:

URL: https://glpi-url/apirest.php/user/9/UserEmail

Headers: Session-Token; user_token; App-Token;

GLPI super-admin account.

Post Payload:

{
  "input": {    
    "is_default":1,
    "is_dynamic":0,
    "email": "newEmail@test.com.br"
  }
}

Edit

Checking the /apirest.php/getActiveEntities and /apirest.php/getActiveProfile return for me the right information:

ActiveProfile:

{
    "active_profile": {
        "id": 4,
        "name": "Super-Admin",
        "interface": "central",
        "is_default": 0,

...

Active Entitites:

{
    "active_entity": {
        "id": 0,
        "active_entity_recursive": 0,
        "active_entities": [
            {
                "id": 0
            }
        ]
    }
}

Relevant log output

No logs related

Page URL

No response

Steps To reproduce

  1. Get Session-Token
  2. Send POST request to the endpoind /apirest.php/user//UserEmail with the correct payload.

Your GLPI setup information

GLPI 10.0.9 ( => /var/www/html/glpi) Installation mode: TARBALL Current language:en_US

Operating system: Linux glpi-6cd9978f5b-jtcbf 5.15.0-1042-azure #49-Ubuntu SMP Tue Jul 11 17:28:46 UTC 2023 x86_64 PHP 8.1.22 apache2handler (Core, FFI, PDO, Phar, Reflection, SPL, SimpleXML, Zend OPcache, apache2handler, bz2, calendar, ctype, curl, date, dom, exif, fileinfo, filter, ftp, gd, gettext, hash, iconv, igbinary, imap, intl, json, ldap, libxml, mbstring, mysqli, mysqlnd, openssl, pcre, pdo_mysql, posix, readline, redis, session, shmop, sockets, sodium, standard, sysvmsg, sysvsem, sysvshm, tokenizer, xml, xmlreader, xmlrpc, xmlwriter, xsl, zip, zlib) Setup: max_execution_time="30" memory_limit="128M" post_max_size="8M" safe_mode="" session.save_handler="files" upload_max_filesize="2M" Software: Apache/2.4.56 (Debian) (Apache/2.4.56 (Debian) Server at glpi-dev.cebrace.com.br Port 80 ) Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Server Software: Source distribution Server Version: 8.0.32 Server SQL Mode: STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO Parameters: tdxdwbbnnn@10.252.4.13/glpi-qas Host info: 10.252.4.13 via TCP/IP

PHP version (8.1.22) is supported.PHP version (8.1.22) is supported. Sessions configuration is OK.Sessions configuration is OK. Allocated memory is sufficient.Allocated memory is sufficient. mysqli extension is installed.mysqli extension is installed. Following extensions are installed: dom, fileinfo, filter, libxml, json, simplexml, xmlreader, xmlwriter.Following extensions are installed: dom, fileinfo, filter, libxml, json, simplexml, xmlreader, xmlwriter. curl extension is installed.curl extension is installed. gd extension is installed.gd extension is installed. intl extension is installed.intl extension is installed. zlib extension is installed.zlib extension is installed. The constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES is present.The constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES is present. Database engine version (8.0.32) is supported.Database engine version (8.0.32) is supported. No files from previous GLPI version detected.No files from previous GLPI version detected. The log file has been created successfully.The log file has been created successfully. Write access to /var/www/html/glpi/files/_cache has been validated. Write access to /var/www/html/glpi/config has been validated. Write access to /var/www/html/glpi/files/_cron has been validated. Write access to /var/www/html/glpi/files has been validated. Write access to /var/www/html/glpi/files/_dumps has been validated. Write access to /var/www/html/glpi/files/_graphs has been validated. Write access to /var/www/html/glpi/files/_lock has been validated. Write access to /var/www/html/glpi/files/_pictures has been validated. Write access to /var/www/html/glpi/files/_plugins has been validated. Write access to /var/www/html/glpi/files/_rss has been validated. Write access to /var/www/html/glpi/files/_sessions has been validated. Write access to /var/www/html/glpi/files/_tmp has been validated. Write access to /var/www/html/glpi/files/_uploads has been validated.Write access to /var/www/html/glpi/files/_cache has been validated. Write access to /var/www/html/glpi/config has been validated. Write access to /var/www/html/glpi/files/_cron has been validated. Write access to /var/www/html/glpi/files has been validated. Write access to /var/www/html/glpi/files/_dumps has been validated. Write access to /var/www/html/glpi/files/_graphs has been validated. Write access to /var/www/html/glpi/files/_lock has been validated. Write access to /var/www/html/glpi/files/_pictures has been validated. Write access to /var/www/html/glpi/files/_plugins has been validated. Write access to /var/www/html/glpi/files/_rss has been validated. Write access to /var/www/html/glpi/files/_sessions has been validated. Write access to /var/www/html/glpi/files/_tmp has been validated. Write access to /var/www/html/glpi/files/_uploads has been validated.

Web server root directory configuration seems safe.Web server root directory configuration seems safe. PHP directive "session.cookie_httponly" should be set to "on" to prevent client-side script to access cookie values.PHP directive "session.cookie_httponly" should be set to "on" to prevent client-side script to access cookie values. OS and PHP are relying on 64 bits integers.OS and PHP are relying on 64 bits integers. exif extension is installed.exif extension is installed. ldap extension is installed.ldap extension is installed. openssl extension is installed.openssl extension is installed. Following extensions are installed: bz2, Phar, zip.Following extensions are installed: bz2, Phar, zip. Zend OPcache extension is installed.Zend OPcache extension is installed. Following extensions are installed: ctype, iconv, mbstring, sodium.Following extensions are installed: ctype, iconv, mbstring, sodium. Write access to /var/www/html/glpi/marketplace has been validated.Write access to /var/www/html/glpi/marketplace has been validated. Timezones seems loaded in database.Timezones seems loaded in database.

GLPI_ROOT: "/var/www/html/glpi" GLPI_CONFIG_DIR: "/var/www/html/glpi/config" GLPI_VAR_DIR: "/var/www/html/glpi/files" GLPI_MARKETPLACE_DIR: "/var/www/html/glpi/marketplace" GLPI_USE_CSRF_CHECK: "1" GLPI_CSRF_EXPIRES: "7200" GLPI_CSRF_MAX_TOKENS: "100" GLPI_USE_IDOR_CHECK: "1" GLPI_IDOR_EXPIRES: "7200" GLPI_ALLOW_IFRAME_IN_RICH_TEXT: false GLPI_SERVERSIDE_URL_ALLOWLIST: ["/^(https?|feed):\/\/[^@:]+(\/.*)?$/"] GLPI_TELEMETRY_URI: "https://telemetry.glpi-project.org" GLPI_INSTALL_MODE: "TARBALL" GLPI_NETWORK_MAIL: "glpi@teclib.com" GLPI_NETWORK_SERVICES: "https://services.glpi-network.com" GLPI_MARKETPLACE_ALLOW_OVERRIDE: true GLPI_MARKETPLACE_MANUAL_DOWNLOADS: true GLPI_USER_AGENT_EXTRA_COMMENTS: "" GLPI_DISABLE_ONLY_FULL_GROUP_BY_SQL_MODE: "1" GLPI_AJAX_DASHBOARD: "1" GLPI_CALDAV_IMPORT_STATE: 0 GLPI_DEMO_MODE: "0" GLPI_CENTRAL_WARNINGS: "1" GLPI_DOC_DIR: "/var/www/html/glpi/files" GLPI_CACHE_DIR: "/var/www/html/glpi/files/_cache" GLPI_CRON_DIR: "/var/www/html/glpi/files/_cron" GLPI_DUMP_DIR: "/var/www/html/glpi/files/_dumps" GLPI_GRAPH_DIR: "/var/www/html/glpi/files/_graphs" GLPI_LOCAL_I18N_DIR: "/var/www/html/glpi/files/_locales" GLPI_LOCK_DIR: "/var/www/html/glpi/files/_lock" GLPI_LOG_DIR: "/var/www/html/glpi/files/_log" GLPI_PICTURE_DIR: "/var/www/html/glpi/files/_pictures" GLPI_PLUGIN_DOC_DIR: "/var/www/html/glpi/files/_plugins" GLPI_RSS_DIR: "/var/www/html/glpi/files/_rss" GLPI_SESSION_DIR: "/var/www/html/glpi/files/_sessions" GLPI_TMP_DIR: "/var/www/html/glpi/files/_tmp" GLPI_UPLOAD_DIR: "/var/www/html/glpi/files/_uploads" GLPI_INVENTORY_DIR: "/var/www/html/glpi/files/_inventories" GLPI_NETWORK_REGISTRATION_API_URL: "https://services.glpi-network.com/api/registration/" GLPI_MARKETPLACE_PLUGINS_API_URI: "https://services.glpi-network.com/api/marketplace/" GLPI_I18N_DIR: "/var/www/html/glpi/locales" GLPI_VERSION: "10.0.9" GLPI_SCHEMA_VERSION: "10.0.9@77fc44668eaae89b61d95fe606d20d93d66110cd" GLPI_MARKETPLACE_PRERELEASES: false GLPI_MIN_PHP: "7.4.0" GLPI_MAX_PHP: "8.3.0" GLPI_YEAR: "2023"

htmlawed/htmlawed version 1.2.14 in (/var/www/html/glpi/vendor/htmlawed/htmlawed) phpmailer/phpmailer version 6.8.0 in (/var/www/html/glpi/vendor/phpmailer/phpmailer/src) simplepie/simplepie version 1.5.8 in (/var/www/html/glpi/vendor/simplepie/simplepie/library) tecnickcom/tcpdf version 6.6.2 in (/var/www/html/glpi/vendor/tecnickcom/tcpdf) michelf/php-markdown in (/var/www/html/glpi/vendor/michelf/php-markdown/Michelf) true/punycode in (/var/www/html/glpi/vendor/true/punycode/src) iamcal/lib_autolink in (/var/www/html/glpi/vendor/iamcal/lib_autolink) sabre/dav in (/var/www/html/glpi/vendor/sabre/dav/lib/DAV) sabre/http in (/var/www/html/glpi/vendor/sabre/http/lib) sabre/uri in (/var/www/html/glpi/vendor/sabre/uri/lib) sabre/vobject in (/var/www/html/glpi/vendor/sabre/vobject/lib) laminas/laminas-i18n in (/var/www/html/glpi/vendor/laminas/laminas-i18n/src) laminas/laminas-servicemanager in (/var/www/html/glpi/vendor/laminas/laminas-servicemanager/src) monolog/monolog in (/var/www/html/glpi/vendor/monolog/monolog/src/Monolog) sebastian/diff in (/var/www/html/glpi/vendor/sebastian/diff/src) donatj/phpuseragentparser in (/var/www/html/glpi/vendor/donatj/phpuseragentparser/src/UserAgent) elvanto/litemoji in (/var/www/html/glpi/vendor/elvanto/litemoji/src) symfony/console in (/var/www/html/glpi/vendor/symfony/console) scssphp/scssphp in (/var/www/html/glpi/plugins/trademark/vendor/scssphp/scssphp/src) laminas/laminas-mail in (/var/www/html/glpi/vendor/laminas/laminas-mail/src/Protocol) laminas/laminas-mime in (/var/www/html/glpi/vendor/laminas/laminas-mime/src) rlanvin/php-rrule in (/var/www/html/glpi/vendor/rlanvin/php-rrule/src) blueimp/jquery-file-upload in (/var/www/html/glpi/vendor/blueimp/jquery-file-upload/server/php) ramsey/uuid in (/var/www/html/glpi/vendor/ramsey/uuid/src) psr/log in (/var/www/html/glpi/vendor/psr/log/Psr/Log) psr/simple-cache in (/var/www/html/glpi/vendor/psr/simple-cache/src) psr/cache in (/var/www/html/glpi/vendor/psr/cache/src) league/csv in (/var/www/html/glpi/vendor/league/csv/src) mexitek/phpcolors in (/var/www/html/glpi/vendor/mexitek/phpcolors/src/Mexitek/PHPColors) guzzlehttp/guzzle in (/var/www/html/glpi/vendor/guzzlehttp/guzzle/src) guzzlehttp/psr7 in (/var/www/html/glpi/vendor/guzzlehttp/psr7/src) glpi-project/inventory_format in (/var/www/html/glpi/vendor/glpi-project/inventory_format/lib/php) wapmorgan/unified-archive in (/var/www/html/glpi/vendor/wapmorgan/unified-archive/src) paragonie/sodium_compat in (/var/www/html/glpi/vendor/paragonie/sodium_compat/src) symfony/cache in (/var/www/html/glpi/vendor/symfony/cache) html2text/html2text in (/var/www/html/glpi/vendor/html2text/html2text/src) symfony/css-selector in (/var/www/html/glpi/vendor/symfony/css-selector) symfony/dom-crawler in (/var/www/html/glpi/vendor/symfony/dom-crawler) twig/twig in (/var/www/html/glpi/vendor/twig/twig/src) twig/string-extra in (/var/www/html/glpi/vendor/twig/string-extra) symfony/polyfill-ctype not found symfony/polyfill-iconv not found symfony/polyfill-mbstring not found symfony/polyfill-php80 not found symfony/polyfill-php81 not found symfony/polyfill-php82 in (/var/www/html/glpi/vendor/symfony/polyfill-php82) league/oauth2-client in (/var/www/html/glpi/vendor/league/oauth2-client/src/Provider) league/oauth2-google in (/var/www/html/glpi/vendor/league/oauth2-google/src/Provider) thenetworg/oauth2-azure in (/var/www/html/glpi/vendor/thenetworg/oauth2-azure/src/Provider) phpCas version 1.3.8 in (/usr/share/php/CAS/source)

Anything else?

No response

cconard96 commented 1 year ago

You are missing "users_id" in the input payload. It doesn't take that from the URL. In reality, the API doesn't even recognize the /User/2 part. The way it parses the URL, it only recognizes UserEmail as the type of item in the same way that it would with "apirest.php/UserEmail".

This will be improved with the new API coming in GLPI 10.1.0.

github-actions[bot] commented 1 year ago

This issue has been closed as we only track bugs here.

You can get community support on forums or you can consider taking a subscription to get professional support. You can also contact GLPI editor team directly.

leorbcamargo commented 5 months ago

I got it this way:

curl --location 'https://my_id.verdanadesk.com/apirest.php/UserEmail?session_token=sssssssssssssssss' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer bbbbbbbbbbbbbbbbbbbb' \ --header 'App-Token: ttttttttttttttttttttttt' \ --data-raw '{ "input" : {"users_id": 1136,"email": "email3@example.com" }}'