Search code examples
firebasefirebase-storagefirebase-security

Firebase storage rules, Libre Office contentTypes


I'm trying to write firebase storage rules that allows uploads with some specific extensions. I can't figure out how to write a rule for Libre office files. I've tried:

request.resource.contentType.matches('.odt') ||
request.resource.contentType.matches('.ods') ||
request.resource.contentType.matches('.odp') ||

and also:

request.resource.contentType.matches('application/odt') ||
request.resource.contentType.matches('application/ods') ||
request.resource.contentType.matches('application/odp') ||

None of these are working. How to write a rule to load Libre Office files?


Solution

  • According to this Libre Office repo, the MIME content types for those file extensions are:

    MIME type Extension
    application/vnd.oasis.opendocument.text (IANA) .odt
    application/vnd.oasis.opendocument.spreadsheet (IANA) .ods
    application/vnd.oasis.opendocument.presentation (IANA) .odp

    These are "vendor tree" media types, thus they start with vnd.VENDOR.. Some extensions, like application/json are IANA defined types and do not have this prefix - you normally can't just throw an extension after the /.

    Your rules would then be:

    request.resource.contentType.matches('application/vnd.oasis.opendocument.text') ||
    request.resource.contentType.matches('application/vnd.oasis.opendocument.spreadsheet') ||
    request.resource.contentType.matches('application/vnd.oasis.opendocument.presentation') ||