// Copyright (c) 2017 The Go Authors. All rights reserved.
//
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
// Package uncheckedconversions provides functions to create values of package
// safehtml types from plain strings. Use of these functions could potentially
// result in instances of safe HTML types that violate their type contracts,
// and hence result in security vulnerabilties.
//
// Avoid use of the functions in this file whenever possible; instead prefer to
// create instances of package safehtml types using inherently safe builders or
// template systems.
//
// Example appropriate uses include:
// * Wrapping the result of general-purpose or application-specific content
// sanitizer libraries.
// * Wrapping the result of rendering strictly contextually autoescaping
// templates (assuming the template's autoescaping implementation is indeed
// strict enough to support the type contract).
package uncheckedconversions
import (
"github.com/google/safehtml/internal/raw"
"github.com/google/safehtml"
)
var html = raw.HTML.(func(string) safehtml.HTML)
var script = raw.Script.(func(string) safehtml.Script)
var style = raw.Style.(func(string) safehtml.Style)
var styleSheet = raw.StyleSheet.(func(string) safehtml.StyleSheet)
var url = raw.URL.(func(string) safehtml.URL)
var trustedResourceURL = raw.TrustedResourceURL.(func(string) safehtml.TrustedResourceURL)
var identifier = raw.Identifier.(func(string) safehtml.Identifier)
// HTMLFromStringKnownToSatisfyTypeContract converts a string into a HTML.
//
func HTMLFromStringKnownToSatisfyTypeContract(s string) safehtml.HTML {
return html(s)
}
// ScriptFromStringKnownToSatisfyTypeContract converts a string into a Script.
//
// Users of this function must ensure themselves that the string does not
// contain unsafe script. Note in particular that '<' is dangerous, even when
// inside JavaScript strings, and so should always be forbidden or JavaScript
// escaped in user controlled input. For example, if
// "" were interpolated inside a JavaScript
// string,it would break out of the context of the original script element and
// "evil" would execute. Also note that within an HTML script (raw text)
// element, HTML character references, such as "<" are not allowed. See
// http://www.w3.org/TR/html5/scripting-1.html#restrictions-for-contents-of-script-elements.
func ScriptFromStringKnownToSatisfyTypeContract(s string) safehtml.Script {
return script(s)
}
// StyleFromStringKnownToSatisfyTypeContract converts a string into a Style.
//
// Users of thie function must ensure themselves that the string:
// * Does not contain unsafe CSS.
// * Does not contain literal angle brackets. Otherwise, it could be unsafe to
// place a Style into the contents of a " were interpolated inside a CSS string, it
// would break out of the context of the original style element and "evil" would
// execute. Also note that within an HTML style (raw text) element, HTML
// character references, such as "<", are not allowed.See
// http://www.w3.org/TR/html5/scripting-1.html#restrictions-for-contents-of-script-elements
// (Similar considerations apply to the style element.)
func StyleSheetFromStringKnownToSatisfyTypeContract(s string) safehtml.StyleSheet {
return styleSheet(s)
}
// URLFromStringKnownToSatisfyTypeContract converts a string into a URL.
//
func URLFromStringKnownToSatisfyTypeContract(s string) safehtml.URL {
return url(s)
}
// TrustedResourceURLFromStringKnownToSatisfyTypeContract converts a string into a TrustedResourceURL.
//
func TrustedResourceURLFromStringKnownToSatisfyTypeContract(s string) safehtml.TrustedResourceURL {
return trustedResourceURL(s)
}
// IdentifierFromStringKnownToSatisfyTypeContract converts a string into a Identifier.
//
func IdentifierFromStringKnownToSatisfyTypeContract(s string) safehtml.Identifier {
return identifier(s)
}