I spent some more time on this, but I’m not sure how to get the compiler to realize that we need the goog files.
For Event we have this: goog.addDependency('../../../org/apache/royale/events/Event.js', ['org.apache.royale.events.Event'], ['goog.events.Event', 'org.apache.royale.events.IRoyaleEvent']); But Royale Event subclasses goog.events.Event. How do I tell the compiler that org.apache.royale.utils.string.sanitizeUrl requires goog.html.SafeUrl ? The same for org.apache.royale.utils.string.sanitizeHtml with goog.html.sanitizer.HtmlSanitizer and goog.html.SafeHtml. Alex? Josh? Greg? Thanks, Harbs > On Dec 12, 2021, at 2:13 AM, Harbs <harbs.li...@gmail.com> wrote: > > I added code for sanitizing, but it’s not working because the goog.html files > are not being copied. I don’t know what needs to be done to make that happen. > > Harbs > >> On Dec 12, 2021, at 2:12 AM, ha...@apache.org wrote: >> >> This is an automated email from the ASF dual-hosted git repository. >> >> harbs pushed a commit to branch feature/sanitize >> in repository https://gitbox.apache.org/repos/asf/royale-asjs.git >> >> commit 1b12594c60420d3503f9e366f314c9d875e16ddb >> Author: Harbs <ha...@in-tools.com> >> AuthorDate: Sun Dec 12 02:12:05 2021 +0200 >> >> Added sanitizeUrl and sanitizeHtml >> --- >> .../projects/Core/src/main/royale/CoreClasses.as | 2 + >> .../org/apache/royale/utils/string/sanitizeHtml.as | 38 ++++++++++++++ >> .../org/apache/royale/utils/string/sanitizeUrl.as | 36 +++++++++++++ >> .../src/test/royale/flexUnitTests/CoreTester.as | 1 + >> .../{CoreTester.as => SanitizeTest.as} | 59 >> ++++++++++++++-------- >> 5 files changed, 115 insertions(+), 21 deletions(-) >> >> diff --git a/frameworks/projects/Core/src/main/royale/CoreClasses.as >> b/frameworks/projects/Core/src/main/royale/CoreClasses.as >> index 21593fd..dd088eb 100644 >> --- a/frameworks/projects/Core/src/main/royale/CoreClasses.as >> +++ b/frameworks/projects/Core/src/main/royale/CoreClasses.as >> @@ -342,6 +342,8 @@ internal class CoreClasses >> import org.apache.royale.utils.string.trimRight; trimRight; >> import org.apache.royale.utils.string.trimLeft; trimLeft; >> import org.apache.royale.utils.string.cacheBust; cacheBust; >> + import org.apache.royale.utils.string.sanitizeHtml; sanitizeHtml; >> + import org.apache.royale.utils.string.sanitizeUrl; sanitizeUrl; >> >> import org.apache.royale.utils.date.addDays; addDays; >> import org.apache.royale.utils.date.addHours; addHours; >> diff --git >> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/string/sanitizeHtml.as >> >> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/string/sanitizeHtml.as >> new file mode 100644 >> index 0000000..360ef63 >> --- /dev/null >> +++ >> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/string/sanitizeHtml.as >> @@ -0,0 +1,38 @@ >> +//////////////////////////////////////////////////////////////////////////////// >> +// >> +// Licensed to the Apache Software Foundation (ASF) under one or more >> +// contributor license agreements. See the NOTICE file distributed with >> +// this work for additional information regarding copyright ownership. >> +// The ASF licenses this file to You under the Apache License, Version 2.0 >> +// (the "License"); you may not use this file except in compliance with >> +// the License. You may obtain a copy of the License at >> +// >> +// http://www.apache.org/licenses/LICENSE-2.0 >> +// >> +// Unless required by applicable law or agreed to in writing, software >> +// distributed under the License is distributed on an "AS IS" BASIS, >> +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. >> +// See the License for the specific language governing permissions and >> +// limitations under the License. >> +// >> +//////////////////////////////////////////////////////////////////////////////// >> +package org.apache.royale.utils.string >> +{ >> + COMPILE::JS{ >> + import goog.html.sanitizer.HtmlSanitizer; >> + import goog.html.SafeHtml; >> + } >> + >> + public function sanitizeHtml(html:String):String >> + { >> + COMPILE::JS >> + { >> + return SafeHtml.unwrap(HtmlSanitizer.sanitize(html)); >> + } >> + //TODO sanitize in swf >> + COMPILE::SWF >> + { >> + return html; >> + } >> + } >> +} >> \ No newline at end of file >> diff --git >> a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/string/sanitizeUrl.as >> >> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/string/sanitizeUrl.as >> new file mode 100644 >> index 0000000..cd4151d >> --- /dev/null >> +++ >> b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/string/sanitizeUrl.as >> @@ -0,0 +1,36 @@ >> +//////////////////////////////////////////////////////////////////////////////// >> +// >> +// Licensed to the Apache Software Foundation (ASF) under one or more >> +// contributor license agreements. See the NOTICE file distributed with >> +// this work for additional information regarding copyright ownership. >> +// The ASF licenses this file to You under the Apache License, Version 2.0 >> +// (the "License"); you may not use this file except in compliance with >> +// the License. You may obtain a copy of the License at >> +// >> +// http://www.apache.org/licenses/LICENSE-2.0 >> +// >> +// Unless required by applicable law or agreed to in writing, software >> +// distributed under the License is distributed on an "AS IS" BASIS, >> +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. >> +// See the License for the specific language governing permissions and >> +// limitations under the License. >> +// >> +//////////////////////////////////////////////////////////////////////////////// >> +package org.apache.royale.utils.string >> +{ >> + COMPILE::JS{ >> + import goog.html.SafeUrl; >> + import goog.html.SafeUrl; >> + } >> + public function sanitizeUrl(url:String):String >> + { >> + COMPILE::JS{ >> + return SafeUrl.unwrap(SafeUrl.sanitize(url)); >> + } >> + >> + //TODO sanitize in swf >> + COMPILE::SWF{ >> + return url; >> + } >> + } >> +} >> \ No newline at end of file >> diff --git >> a/frameworks/projects/Core/src/test/royale/flexUnitTests/CoreTester.as >> b/frameworks/projects/Core/src/test/royale/flexUnitTests/CoreTester.as >> index c8adc02..9441daf 100644 >> --- a/frameworks/projects/Core/src/test/royale/flexUnitTests/CoreTester.as >> +++ b/frameworks/projects/Core/src/test/royale/flexUnitTests/CoreTester.as >> @@ -42,5 +42,6 @@ package flexUnitTests >> public var keyConverterTest:KeyConverterTest; >> public var keyboardEventConverterTest:KeyboardEventConverterTest; >> public var stringUtilsTest:StringUtilsTest; >> + public var sanitizerTest:SanitizeTest; >> } >> } >> diff --git >> a/frameworks/projects/Core/src/test/royale/flexUnitTests/CoreTester.as >> b/frameworks/projects/Core/src/test/royale/flexUnitTests/SanitizeTest.as >> similarity index 50% >> copy from >> frameworks/projects/Core/src/test/royale/flexUnitTests/CoreTester.as >> copy to >> frameworks/projects/Core/src/test/royale/flexUnitTests/SanitizeTest.as >> index c8adc02..7173f52 100644 >> --- a/frameworks/projects/Core/src/test/royale/flexUnitTests/CoreTester.as >> +++ b/frameworks/projects/Core/src/test/royale/flexUnitTests/SanitizeTest.as >> @@ -18,29 +18,46 @@ >> //////////////////////////////////////////////////////////////////////////////// >> package flexUnitTests >> { >> - import flexUnitTests.language.* >> + import org.apache.royale.utils.string.*; >> + import org.apache.royale.test.asserts.*; >> >> - [Suite] >> - [RunWith("org.apache.royale.test.runners.SuiteRunner")] >> - public class CoreTester >> - { >> + public class SanitizeTest >> + { >> + [Before] >> + public function setUp():void >> + { >> + } >> >> - //language tests >> - public var languageTestIs:LanguageTesterTestIs; >> - public var languageTestIntUint:LanguageTesterIntUint; >> - public var languageTestVector:LanguageTesterTestVector; >> - public var languageTestClass:LanguageTesterTestClass; >> - public var languageTestLoopVariants:LanguageTesterTestLoopVariants; >> - public var languageTestArraySort:LanguageTesterArraySort; >> - public var languageTesttryCatch:LanguageTesterTestTryCatch; >> + [After] >> + public function tearDown():void >> + { >> + } >> >> - //core tests >> - public var strandTesterTest:StrandTesterTest; >> - public var binaryDataTesterTest:BinaryDataTesterTest; >> - public var arrayUtilsTest:ArrayUtilsTest; >> - public var dateUtilsTest:DateUtilsTest; >> - public var keyConverterTest:KeyConverterTest; >> - public var keyboardEventConverterTest:KeyboardEventConverterTest; >> - public var stringUtilsTest:StringUtilsTest; >> + [BeforeClass] >> + public static function setUpBeforeClass():void >> + { >> + } >> + >> + [AfterClass] >> + public static function tearDownAfterClass():void >> + { >> + } >> + >> + [Test] >> + public function testHTML():void >> + { >> + var safeHtml:String = 'Hello <em>World</em>'; >> + assertEquals(safeHtml, sanitizeHtml(safeHtml)); >> + } >> + >> + [Test] >> + public function testUrl():void >> + { >> + var safeUrl:String = "https://foobaz.com" >> + assertEquals(safeUrl, sanitizeUrl(safeUrl)); >> + } >> + >> + >> + >> } >> } >