Skip to content

[On Hold #44778] Submit Expense - Inconsistent Error Messages for Password Protected PDFs on Mweb and Android #44091

Closed

Description

@lanitochka17

If you haven’t already, check out our contributing guidelines for onboarding and email contributors@expensify.com to request to join our Slack channel!


Version Number: 1.4.86-0
Reproducible in staging?: Y
Reproducible in production?: Y
If this was caught during regression testing, add the test name, ID and link from TestRail: N/A
Email or phone of affected tester (no customers): abebemiherat@gmail.com
Issue reported by: Applause - Internal Team

Action Performed:

  1. On Android: Sign in with Expensify > FAB > Submit Expense
  2. Add an amount and attach a password-protected PDF
  3. On Mweb: Repeat the above steps
  4. Observe the error messages

Expected Result:

The error message should be consistent for the same password-protected PDF across both platforms

Actual Result:

Different error messages appear for password-protected PDFs on Mweb and Android

Workaround:

Unknown

Platforms:

Which of our officially supported platforms is this issue occurring on?

  • Android: Native
  • Android: mWeb Chrome
  • iOS: Native
  • iOS: mWeb Safari
  • MacOS: Chrome / Safari
  • MacOS: Desktop

Screenshots/Videos

Add any screenshot/video evidence

Bug6519420_1718889532550.ju.mp4

9!1

19!2

View all open jobs on GitHub

Upwork Automation - Do Not Edit
  • Upwork Job URL: https://www.upwork.com/jobs/~01a71dc36f6e73ac8e
  • Upwork Job ID: 1806742272201940772
  • Last Price Increase: 2024-07-05
Issue OwnerCurrent Issue Owner: @s77rt

Activity

  1. added
    BugSomething is broken. Auto assigns a BugZero manager.
    on Jun 20, 2024
  2. melvin-bot commented on Jun 20, 2024

    @melvin-bot

    Triggered auto assignment to @CortneyOfstad (Bug), see https://stackoverflow.com/c/expensify/questions/14418 for more details. Please add this bug to a GH project, as outlined in the SO.

  3. lanitochka17 commented on Jun 20, 2024

    @lanitochka17
    Author

    @CortneyOfstad FYI I haven't added the External label as I wasn't 100% sure about this issue. Please take a look and add the label if you agree it's a bug and can be handled by external contributors

  4. Krishna2323 commented on Jun 20, 2024

    @Krishna2323
    Contributor

    Proposal

    Please re-state the problem that we are trying to solve in this issue.

    Submit Expense - Inconsistent Error Messages for Password Protected PDFs on Mweb and Android

    What is the root cause of that problem?

    The error title is wrong attachmentPicker.wrongFileType.

    setUploadReceiptError(true, 'attachmentPicker.wrongFileType', 'attachmentPicker.protectedPDFNotSupported');

    What changes do you think we should make in order to solve the problem?

    We should be using attachmentPicker.attachmentError.

    What alternative solutions did you explore? (Optional)

  5. etCoderDysto commented on Jun 20, 2024

    @etCoderDysto
    Contributor

    Proposal

    Please re-state the problem that we are trying to solve in this issue.

    Inconsistent Error Messages for Password Protected PDFs on Mweb and Android

    What is the root cause of that problem?

    The root cause is that we are handling errors concerning password protected pdf files for native apps in MoneyRequestConfirmationList. That is because password protected pdf error is not caught by the validation put in IOURequestStepScan for native devices. Hence 'Attachment error' message is displayed because of the default error key attachmentPicker.attachmentError put in MoneyRequestConfirmationList

    <ConfirmModal
    title={translate('attachmentPicker.attachmentError')}

    For web, we handle password protected pdf in IOURequestStepScan.index

    if (fileExtension === 'pdf') {
    return isPdfFilePasswordProtected(file).then((isProtected: boolean) => {
    if (isProtected) {
    setUploadReceiptError(true, 'attachmentPicker.wrongFileType', 'attachmentPicker.protectedPDFNotSupported');

    What changes do you think we should make in order to solve the problem?

    Change web error message key to attachmentPicker.attachmentError in IOURequestStepScan.index

    if (fileExtension === 'pdf') {
    return isPdfFilePasswordProtected(file).then((isProtected: boolean) => {
    if (isProtected) {
    setUploadReceiptError(true, 'attachmentPicker.wrongFileType', 'attachmentPicker.protectedPDFNotSupported');

    This will change web error message to Attachment error

    What alternative solutions did you explore? (Optional)

    Change native platform error message to attachmentPicker.wrongFileType in MoneyRequestConfirmationList

    <ConfirmModal
    title={translate('attachmentPicker.attachmentError')}

    This will change native platforms error message to Invalid file type

  6. cretadn22 commented on Jun 20, 2024

    @cretadn22
    Contributor

    Proposal

    Please re-state the problem that we are trying to solve in this issue.

    Error Messages for Password Protected PDFs on Android is incorrect

    What is the root cause of that problem?

    On web (only web), we implemented a check to identify Password Protected PDF files and show the correct error message

    if (fileExtension === 'pdf') {
    return isPdfFilePasswordProtected(file).then((isProtected: boolean) => {
    if (isProtected) {
    setUploadReceiptError(true, 'attachmentPicker.wrongFileType', 'attachmentPicker.protectedPDFNotSupported');
    return false;

    However, the isPdfFilePasswordProtected function only operates on the web platform (it is not defined for native). Therefore, if we upload a password-protected PDF file on the native platform, the Scan page will not generate an error. Instead, the error message occurs on the confirmation page on the native

    What changes do you think we should make in order to solve the problem?

    Fortunately, we can determine whether the PDF file requires a password by utilizing the onPassword callback of the PDFThumbnail Component on the confirmation page

    1. Need to define new state
        const [invalidAttachmentTitle, setInvalidAttachmentTitle] = useState(translate('attachmentPicker.attachmentError'));
    
    1. Update this state on onPassword and onLoadError callback
    setInvalidAttachmentTitle(translate('attachmentPicker.wrongFileType'));
    

    setInvalidAttachmentTitle(translate('attachmentPicker.attachmentError'));
    
    1. Using new state
      title={translate('attachmentPicker.attachmentError')}
    title={invalidAttachmentTitle}
    

    What alternative solutions did you explore? (Optional)

  7. melvin-bot commented on Jun 25, 2024

    @melvin-bot

    @CortneyOfstad Huh... This is 4 days overdue. Who can take care of this?

  8. CortneyOfstad commented on Jun 25, 2024

    @CortneyOfstad
    Contributor

    Sorry was OoO!

    I think this may be more BE (tied to design) so going to get confirmation!

  9. CortneyOfstad commented on Jun 25, 2024

    @CortneyOfstad
    Contributor

    Asked here

  10. CortneyOfstad commented on Jun 28, 2024

    @CortneyOfstad
    Contributor

    Bumped the thread in design again 👍

  11. 18 remaining items

  12. s77rt commented on Jul 4, 2024

    @s77rt
    Member

    Still waiting on proposals

  13. melvin-bot commented on Jul 5, 2024

    @melvin-bot

    📣 It's been a week! Do we have any satisfactory proposals yet? Do we need to adjust the bounty for this issue? 💸

  14. cretadn22 commented on Jul 5, 2024

    @cretadn22
    Contributor

    @s77rt, thank you for your suggestion. Currently, we're using react-native-pdf to detect if a PDF file requires a password in our native setup. However, this method requires rendering the PDF file using the PDF component from react-native-pdf. Upon further investigation into react-native-pdf, I found that it doesn't offer a direct API specifically for checking password protection.

    We have two potential solutions:

    1. Integrate another library that handles PDF password detection.
    2. Extend react-native-pdf by implementing native code for both Android and iOS.

    Personally, neither of these methods seems justified for addressing such a minor issue. My proposal seems like a workaround, but it effectively resolves the issue without making significant alterations

  15. s77rt commented on Jul 6, 2024

    @s77rt
    Member

    @cretadn22 Your proposal will only change the text error but still keep the inconsistency where on web the validation is done on the scan page while on native it's done on the confirmation page.

    I would prefer doing one of the following:

    1. Make the pdfjs library work on native (only for checking if the pdf is password protected and not rendering)
    2. Extend react-native-pdf as you mentioned
  16. s77rt commented on Jul 6, 2024

    @s77rt
    Member

    @cretadn22

    Upon further investigation into react-native-pdf, I found that it doesn't offer a direct API specifically for checking password protection.

    There is an exported PdfManager that we can use to load the file without rendering.

  17. Krishna2323 commented on Jul 6, 2024

    @Krishna2323
    Contributor

    @s77rt, sorry for delay on this, we are already handling PDF validation here. I think we can close this out.

  18. s77rt commented on Jul 7, 2024

    @s77rt
    Member

    @CortneyOfstad Let hold this on #44778

  19. CortneyOfstad commented on Jul 9, 2024

    @CortneyOfstad
    Contributor

    Sounds good — thanks @s77rt!

  20. changed the title [-][$250] Submit Expense - Inconsistent Error Messages for Password Protected PDFs on Mweb and Android[/-] [+][On Hold #44778] Submit Expense - Inconsistent Error Messages for Password Protected PDFs on Mweb and Android[/+] on Jul 9, 2024
  21. CortneyOfstad commented on Jul 31, 2024

    @CortneyOfstad
    Contributor

    Deployed to production! Going to close 🎉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

BugSomething is broken. Auto assigns a BugZero manager.ExternalAdded to denote the issue can be worked on by a contributorHelp WantedApply this label when an issue is open to proposals by contributorsWeeklyKSv2

Type

No type

Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions