bool AWSScriptBehaviorS3::ValidateGetObjectRequest()

in Gems/AWSCore/Code/Source/ScriptCanvas/AWSScriptBehaviorS3.cpp [154:202]


    bool AWSScriptBehaviorS3::ValidateGetObjectRequest(S3NotificationFunctionType notificationFunc,
        const AZStd::string& bucket, const AZStd::string& objectKey, const AZStd::string& region, AZStd::string& outFile)
    {
        if (ValidateHeadObjectRequest(notificationFunc, bucket, objectKey, region))
        {
            AzFramework::StringFunc::Path::Normalize(outFile);
            if (outFile.empty())
            {
                AZ_Warning(AWSScriptBehaviorS3Name, false, OutputFileIsEmptyErrorMessage);
                AWSScriptBehaviorS3NotificationBus::Broadcast(notificationFunc, OutputFileIsEmptyErrorMessage);
                return false;
            }

            char resolvedPath[AZ_MAX_PATH_LEN] = { 0 };
            if (!AZ::IO::FileIOBase::GetInstance()->ResolvePath(outFile.c_str(), resolvedPath, AZ_MAX_PATH_LEN))
            {
                AZ_Warning(AWSScriptBehaviorS3Name, false, OutputFileFailedToResolveErrorMessage);
                AWSScriptBehaviorS3NotificationBus::Broadcast(notificationFunc, OutputFileFailedToResolveErrorMessage);
                return false;
            }
            outFile = resolvedPath;

            if (AZ::IO::FileIOBase::GetInstance()->IsDirectory(outFile.c_str()))
            {
                AZ_Warning(AWSScriptBehaviorS3Name, false, OutputFileIsDirectoryErrorMessage);
                AWSScriptBehaviorS3NotificationBus::Broadcast(notificationFunc, OutputFileIsDirectoryErrorMessage);
                return false;
            }
            auto lastSeparator = outFile.find_last_of(AZ_CORRECT_FILESYSTEM_SEPARATOR);
            if (lastSeparator != AZStd::string::npos)
            {
                auto parentPath = outFile.substr(0, lastSeparator);
                if (!AZ::IO::FileIOBase::GetInstance()->Exists(parentPath.c_str()))
                {
                    AZ_Warning(AWSScriptBehaviorS3Name, false, OutputFileDirectoryNotExistErrorMessage);
                    AWSScriptBehaviorS3NotificationBus::Broadcast(notificationFunc, OutputFileDirectoryNotExistErrorMessage);
                    return false;
                }
            }
            if (AZ::IO::FileIOBase::GetInstance()->IsReadOnly(outFile.c_str()))
            {
                AZ_Warning(AWSScriptBehaviorS3Name, false, OutputFileIsReadOnlyErrorMessage);
                AWSScriptBehaviorS3NotificationBus::Broadcast(notificationFunc, OutputFileIsReadOnlyErrorMessage);
                return false;
            }
            return true;
        }
        return false;
    }