Documentation
¶
Index ¶
- Constants
- Variables
- func CheckOrigin(r *http.Request, allowedOrigins string) bool
- func CopyDir(src string, dst string) (err error)
- func CopyFile(src, dst string) (err error)
- func CreateTestAnimatedGif(t *testing.T, width int, height int, frames int) []byte
- func CreateTestGif(t *testing.T, width int, height int) []byte
- func CreateTestJpeg(t *testing.T, width int, height int) []byte
- func CreateTestPng(t *testing.T, width int, height int) []byte
- func DisableDebugLogForTest()
- func EnableDebugLogForTest()
- func EndOfDay(t time.Time) time.Time
- func ExtractTarGz(gzipStream io.Reader, dst string) error
- func FuzzName() string
- func FuzzPost() string
- func GetAndValidateLicenseFileFromDisk(location string) (*model.License, []byte)
- func GetClientLicense(l *model.License) map[string]string
- func GetHostnameFromSiteURL(siteURL string) string
- func GetIpAddress(r *http.Request) string
- func GetLicenseFileFromDisk(fileName string) []byte
- func GetLicenseFileLocation(fileLocation string) string
- func GetLogFileLocation(fileLocation string) string
- func GetSubpathFromConfig(config *model.Config) (string, error)
- func GetSubpathScriptHash(subpath string) string
- func GetSupportedLocales() map[string]string
- func GetTranslationsAndLocale(w http.ResponseWriter, r *http.Request) (i18n.TranslateFunc, string)
- func GetTranslationsBySystemLocale() (i18n.TranslateFunc, error)
- func GetUserTranslations(locale string) i18n.TranslateFunc
- func HashSha256(text string) string
- func InitTranslations(localizationSettings model.LocalizationSettings) error
- func InitTranslationsWithDir(dir string) error
- func IsPasswordValid(password string) *model.AppError
- func IsPasswordValidWithSettings(password string, settings *model.PasswordSettings) *model.AppError
- func Merge(base interface{}, patch interface{}, mergeConfig *MergeConfig) (interface{}, error)
- func MillisFromTime(t time.Time) int64
- func MloggerConfigFromLoggerConfig(s *model.LogSettings) *mlog.LoggerConfiguration
- func OriginChecker(allowedOrigins string) func(*http.Request) bool
- func PathTraversesUpward(path string) bool
- func RandIntFromRange(r Range) int
- func RandString(l int, charset string) string
- func RandomName(length Range, charset string) string
- func RandomText(length Range, hashtags Range, mentions Range, users []string) string
- func RemoveDuplicatesFromStringArray(arr []string) []string
- func RenderWebAppError(config *model.Config, w http.ResponseWriter, r *http.Request, ...)
- func RenderWebError(config *model.Config, w http.ResponseWriter, r *http.Request, status int, ...)
- func SetRolePermissionsFromConfig(roles map[string]*model.Role, cfg *model.Config, isLicensed bool) map[string]*model.Role
- func StartOfDay(t time.Time) time.Time
- func StringArrayIntersection(arr1, arr2 []string) []string
- func StringInSlice(a string, slice []string) bool
- func StringSliceDiff(a, b []string) []string
- func TfuncWithFallback(pref string) i18n.TranslateFunc
- func TimeFromMillis(millis int64) time.Time
- func TranslateAsHtml(t i18n.TranslateFunc, translationID string, args map[string]interface{}) template.HTML
- func TranslationsPreInit() error
- func UpdateAssetsSubpath(subpath string) error
- func UpdateAssetsSubpathFromConfig(config *model.Config) error
- func UrlEncode(str string) string
- func ValidateLicense(signed []byte) (bool, string)
- func Yesterday() time.Time
- type Cache
- func (c *Cache) Add(key, value interface{})
- func (c *Cache) AddWithDefaultExpires(key, value interface{})
- func (c *Cache) AddWithExpiresInSecs(key, value interface{}, expireAtSecs int64)
- func (c *Cache) Get(key interface{}) (value interface{}, ok bool)
- func (c *Cache) GetInvalidateClusterEvent() string
- func (c *Cache) GetOrAdd(key, value interface{}, ttl time.Duration) (actual interface{}, loaded bool)
- func (c *Cache) Keys() []interface{}
- func (c *Cache) Len() int
- func (c *Cache) Name() string
- func (c *Cache) Purge()
- func (c *Cache) Remove(key interface{})
- type HTMLTemplate
- type HTMLTemplateWatcher
- type MergeConfig
- type Range
- type StructFieldFilter
Constants ¶
const ( LOG_ROTATE_SIZE = 10000 LOG_FILENAME = "mattermost.log" )
const ( ALPHANUMERIC = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890" LOWERCASE = "abcdefghijklmnopqrstuvwxyz" )
const GIBBERISH_TEXT = `` /* 9068-byte string literal not displayed */
Lovely giberish for all to use
Variables ¶
var FUZZY_STRINGS_EMAILS = []string{ "sue@thatmightbe", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", }
Strings that should pass as acceptable emails
var FUZZY_STRINGS_NAMES = []string{ "*", "?", ".", "}{][)(><", "{}[]()<>", "qahwah ( قهوة)", "שָׁלוֹם עֲלֵיכֶם", "Ramen チャーシュー chāshū", "言而无信", "Ṫ͌ó̍ ̍͂̓̍̍̀i̊ͯ͒", "& < &qu", "' or '1'='1' -- ", "' or '1'='1' ({ ", "' or '1'='1' /* ", "1;DROP TABLE users", "<b><i><u><strong><em>", "sue@thatmightbe", "sue@thatmightbe.", "[email protected]", "[email protected]", "sue @ thatmightbe.com", "apos'[email protected]", "apos''''[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "tom(comment)@thatmightbe.com", "(comment)[email protected]", "\"quotes\"@thatmightbe.com", "\"\\\"(),:;<>@[\\]\"@thatmightbe.com", "a!#$%&'*+-/=?^_`{|}[email protected]", "local@[127.0.0.1]", "jill@(comment)example.com", "[email protected](comment)", "a@b.中国", "[email protected]", "[email protected]", "[email protected]", "<a href=\"//www.google.com\">Teh Googles</a>", "<img src=\"//upload.wikimedia.org/wikipelogo-v2_2x.png\" />", "<b><i><u><strong><em>", "& < " '", ";alert('Well this is awkward.');", "<script type='text/javascript'>alert('yay puppies');</script>", "Ṫ͌ó̍ ̍͂̓̍̍̀i̊ͯ͒nͧ̍̓̃͋v", "H҉̵̞̟̠̖̗̘Ȅ̐̐̑̒̚OMI҉̵̞̟̠", }
Strings that should pass as acceptable team names
var FUZZY_STRINGS_POSTS = []string{ `**[1] - [Markdown Tests]** _italics_ more _italics_ **bold** more **bold** **_bold-italic_** more **_bold-italic_*8 ~~strikethrough~~ more ~~strikethrough~~ ` + "```" + ` multi-line code block<enter here> multi-line code block emoji that should not render in code block: :ice_cream: ` + "```" + ` ` + "`monospace`" + ` [Link to Mattermost](www.mattermost.com) Inline Image with link, alt text, and hover text: ](https://travis-ci.org/mattermost/mattermost-server) Three types of lines: *** ___ --- `, ` **[2] - **[More Markdown Tests]** > i am a blockquote! > i am a 2nd multiline > quote. i am text right after a multiline quote, but not in the quote * list item * another list item * indented list item 1. numbered list, item number 1 2. item number two `, ` **[3]** - **[More Markdown Tests]** Table | Left-Aligned | Center Aligned | Right Aligned | | :------------ |:---------------:| -----:| | Left column 1 | this text | $100 | | Left column 2 | is | $10 | | Left column 3 | centered | $1 | Ugly table Markdown | Less | Pretty --- | --- | --- *Still* | ~~renders~~ | **nicely** 1 | 2 | 3 # Large heading ## Smaller heading ### Even smaller heading # Large heading ## Smaller heading ### Even smaller heading `, ` **[4]** - **[More Markdown Tests]** # This is a heading I am a multiline text. #### I am a level four heading ` + "```tex" + ` f(x) = \int_{-\infty}^\infty \hat f(\xi)\,e^{2 \pi i \xi x} \,d\xi ` + "```" + ` * This was some tex code* `, `**[5]** - **[Markdown and automatic preview of content test]** ## This should display a preview for the given vine url Some text *before* the link And a smiley :) https://vine.co/v/eDeVgbFrt9L Some more text here and here and even more here `, `**[6]** - **[More markdown and automatic preview of content test]** ## Only the first given url should render an "attachment" Lets also add a table here, because why not | Left-Aligned | Center Aligned | Right Aligned | | :------------ |:---------------:| -----:| | Left column 1 | this text | $100 | | Left column 2 | is | $10 | | Left column 3 | centered | $1 | Wiki should render: http://en.wikipedia.org/wiki/Foo https://vine.co/v/eDeVgbFrt9L `, `**[7] [Image Test]** ## this *should* display an image http://37.media.tumblr.com/tumblr_mavsumGGAd1qboaw8o1_500.jpg `, `**[8] [Emoji Display Test 1]** :+1: :-1: :100: :1234: :8ball: :a: :ab: :abc: :abcd: :accept: :aerial_tramway: :airplane: :alarm_clock: :ambulance: :anchor: :angel: :anger: :angry: :anguished: :ant: :apple: :aquarius: :aries: :arrow_backward: :arrow_double_down: :arrow_double_up: :arrow_down: :arrow_down_small: :arrow_forward: :arrow_heading_down: :arrow_heading_up: :arrow_left: :arrow_lower_left: :arrow_lower_right: :arrow_right: :arrow_right_hook: :arrow_up: :arrow_up_down: :arrow_upper_left: :arrow_upper_right: :arrows_clockwise: :arrows_counterclockwise: :art: :articulated_lorry: :astonished: :atm: :arrow_up_small: :b: :baby: :baby_bottle: :baby_chick: :baby_symbol: :back: :baggage_claim: :balloon: :ballot_box_with_check: :bamboo: :banana: :bangbang: :bank: :bar_chart: :barber: :baseball: :basketball: :bath: :bathtub: :battery: :bear: :bee: :beer: :beers: :beetle: :beginner: :bell: :bento: :bicyclist: :bike: :bikini: :bird: :birthday: :black_circle: :black_joker: :black_medium_small_square: :black_medium_square: :black_nib: :black_small_square: :black_square: :black_square_button: :blossom: :blowfish: :blue_book: :blue_car: :blue_heart: :blush: :boar: :boat: :bomb: :book: :bookmark: :bookmark_tabs: :books: :boom: :boot: :bouquet: :bow: :bowling: :bowtie: :boy: :bread: :bride_with_veil: :bridge_at_night: :briefcase: :broken_heart: :bug: :bulb: :bullettrain_front: :bullettrain_side: :bus: :busstop: :bust_in_silhouette: :busts_in_silhouette: :cactus: :cake: :calendar: :calling: :camel: :camera: :cancer: :candy: :capital_abcd: :capricorn: :car: :card_index: :carousel_horse: :cat: :cat2: :cd: :chart: :chart_with_downwards_trend: :chart_with_upwards_trend: :checkered_flag: :cherries: :cherry_blossom: :chestnut: :chicken: :children_crossing: :chocolate_bar: :christmas_tree: :church: :cinema: :circus_tent: :city_sunrise: :city_sunset: :cl: :clap: :clapper: :clipboard: :clock1: :clock10: :clock1030: :clock11: :clock1130: :clock12: :clock1230: :clock130: :clock2: :clock230: :clock3: :clock330: :clock4: :clock430: :clock5: :clock530: :clock6: :clock630: :clock7: :clock730: :clock8: :clock830: :clock9: :clock930: :closed_book: :closed_lock_with_key: :closed_umbrella: :cloud: :clubs: :cn: :cocktail: :coffee: :cold_sweat: :collision: :computer: :confetti_ball: :confounded: :confused: :congratulations: :construction: :construction_worker: :convenience_store: :cookie: :cool: :cop: :copyright: :corn: :couple: :couple_with_heart: :couplekiss: :cow: :cow2: :credit_card: :crescent_moon: :crocodile: :crossed_flags: :crown: :cry: :crying_cat_face: :crystal_ball: :cupid: :curly_loop: :currency_exchange: :curry: :custard: :customs: :cyclone: :dancer: :dancers: :dango: :dart: :dash: :date: :de: :deciduous_tree: :department_store: :diamond_shape_with_a_dot_inside: :diamonds: :disappointed: :disappointed_relieved: :dizzy: :dizzy_face: :do_not_litter: :dog: :dog2: :dollar: :dolls: :dolphin: :donut: :door: :doughnut: :dragon: :dragon_face: :dress: :dromedary_camel: :droplet: :dvd: :e-mail: :ear: :ear_of_rice: :earth_africa: :earth_americas: :earth_asia: :egg: :eggplant: :eight: :eight_pointed_black_star: :eight_spoked_asterisk: :electric_plug: :elephant: :email: :end: :envelope: :es: :euro: :european_castle: :european_post_office: :evergreen_tree: :exclamation: :expressionless: :eyeglasses: :eyes: :facepunch: :factory: :fallen_leaf: :family: :fast_forward: :fax: :fearful: :feelsgood: :feet: :ferris_wheel: :file_folder: :finnadie: :fire: :fire_engine: :fireworks: :first_quarter_moon: :first_quarter_moon_with_face: :fish: :fish_cake: :fishing_pole_and_fish: :fist: :five: :flags: :flashlight: :floppy_disk: :flower_playing_cards: :flushed: :foggy: :football: :fork_and_knife: :fountain: :four: :four_leaf_clover: :fr: :free: :fried_shrimp: :fries: :frog: :frowning: :fu: :fuelpump: :full_moon: :full_moon_with_face: :game_die: :gb: :gem: :gemini: :ghost: :gift:`, `**[9] [Emoji Display Test 2]** :gift_heart: :girl: :globe_with_meridians: :goat: :goberserk: :godmode: :golf: :grapes: :green_apple: :green_book: :green_heart: :grey_exclamation: :grey_question: :grimacing: :grin: :grinning: :guardsman: :guitar: :gun: :haircut: :hamburger: :hammer: :hamster: :hand: :handbag: :hankey: :hash: :hatched_chick: :hatching_chick: :headphones: :hear_no_evil: :heart: :heart_decoration: :heart_eyes: :heart_eyes_cat: :heartbeat: :heartpulse: :hearts: :heavy_check_mark: :heavy_division_sign: :heavy_dollar_sign: :heavy_exclamation_mark: :heavy_minus_sign: :heavy_multiplication_x: :heavy_plus_sign: :helicopter: :herb: :hibiscus: :high_brightness: :high_heel: :hocho: :honey_pot: :honeybee: :horse: :horse_racing: :hospital: :hotel: :hotsprings: :hourglass: :hourglass_flowing_sand: :house: :house_with_garden: :hurtrealbad: :hushed: :ice_cream: :icecream: :id: :ideograph_advantage: :imp: :inbox_tray: :incoming_envelope: :information_desk_person: :information_source: :innocent: :interrobang: :iphone: :it: :izakaya_lantern: :jack_o_lantern: :japan: :japanese_castle: :japanese_goblin: :japanese_ogre: :jeans: :joy: :joy_cat: :jp: :key: :keycap_ten: :kimono: :kiss: :kissing: :kissing_cat: :kissing_closed_eyes: :kissing_face: :kissing_heart: :kissing_smiling_eyes: :koala: :koko: :kr: :large_blue_circle: :large_blue_diamond: :large_orange_diamond: :last_quarter_moon: :last_quarter_moon_with_face: :laughing: :leaves: :ledger: :left_luggage: :left_right_arrow: :leftwards_arrow_with_hook: :lemon: :leo: :leopard: :libra: :light_rail: :link: :lips: :lipstick: :lock: :lock_with_ink_pen: :lollipop: :loop: :loudspeaker: :love_hotel: :love_letter: :low_brightness: :m: :mag: :mag_right: :mahjong: :mailbox: :mailbox_closed: :mailbox_with_mail: :mailbox_with_no_mail: :man: :man_with_gua_pi_mao: :man_with_turban: :mans_shoe: :maple_leaf: :mask: :massage: :meat_on_bone: :mega: :melon: :memo: :mens: :metal: :metro: :microphone: :microscope: :milky_way: :minibus: :minidisc: :mobile_phone_off: :money_with_wings: :moneybag: :monkey: :monkey_face: :monorail: :mortar_board: :mount_fuji: :mountain_bicyclist: :mountain_cableway: :mountain_railway: :mouse: :mouse2: :movie_camera: :moyai: :muscle: :mushroom: :musical_keyboard: :musical_note: :musical_score: :mute: :nail_care: :name_badge: :neckbeard: :necktie: :negative_squared_cross_mark: :neutral_face: :new: :new_moon: :new_moon_with_face: :newspaper: :ng: :nine: :no_bell: :no_bicycles: :no_entry: :no_entry_sign: :no_good: :no_mobile_phones: :no_mouth: :no_pedestrians: :no_smoking: :non-potable_water: :nose: :notebook: :notebook_with_decorative_cover: :notes: :nut_and_bolt: :o: :o2: :ocean: :octocat: :octopus: :oden: :office: :ok: :ok_hand: :ok_woman: :older_man: :older_woman: :on: :oncoming_automobile: :oncoming_bus: :oncoming_police_car: :oncoming_taxi: :one: :open_file_folder: :open_hands: :open_mouth: :ophiuchus: :orange_book: :outbox_tray: :ox: :package: :page_facing_up: :page_with_curl: :pager: :palm_tree: :panda_face: :paperclip: :parking: :part_alternation_mark: :partly_sunny: :passport_control: :paw_prints: :peach: :pear: :pencil: :pencil2: :penguin: :pensive: :performing_arts: :persevere: :person_frowning: :person_with_blond_hair: :person_with_pouting_face: :phone: :pig: :pig2: :pig_nose: :pill: :pineapple: :pisces: :pizza: `, `**[10] [Emoji Display Test 3]** :plus1: :point_down: :point_left: :point_right: :point_up: :point_up_2: :police_car: :poodle: :poop: :post_office: :postal_horn: :postbox: :potable_water: :pouch: :poultry_leg: :pound: :pouting_cat: :pray: :princess: :punch: :purple_heart: :purse: :pushpin: :put_litter_in_its_place: :question: :rabbit: :rabbit2: :racehorse: :radio: :radio_button: :rage: :rage1: :rage2: :rage3: :rage4: :railway_car: :rainbow: :raised_hand: :raised_hands: :raising_hand: :ram: :ramen: :rat: :recycle: :red_car: :red_circle: :registered: :relaxed: :relieved: :repeat: :repeat_one: :restroom: :revolving_hearts: :rewind: :ribbon: :rice: :rice_ball: :rice_cracker: :rice_scene: :ring: :rocket: :roller_coaster: :rooster: :rose: :rotating_light: :round_pushpin: :rowboat: :ru: :rugby_football: :runner: :running: :running_shirt_with_sash: :sa: :sagittarius: :sailboat: :sake: :sandal: :santa: :satellite: :satisfied: :saxophone: :school: :school_satchel: :scissors: :scorpius: :scream: :scream_cat: :scroll: :seat: :secret: :see_no_evil: :seedling: :seven: :shaved_ice: :sheep: :shell: :ship: :shipit: :shirt: :shit: :shoe: :shower: :signal_strength: :six: :six_pointed_star: :ski: :skull: :sleeping: :sleepy: :slot_machine: :small_blue_diamond: :small_orange_diamond: :small_red_triangle: :small_red_triangle_down: :smile: :smile_cat: :smiley: :smiley_cat: :smiling_imp: :smirk: :smirk_cat: :smoking: :snail: :snake: :snowboarder: :snowflake: :snowman: :sob: :soccer: :soon: :sos: :sound: :space_invader: :spades: :spaghetti: :sparkle: :sparkler: :sparkles: :sparkling_heart: :speak_no_evil: :speaker: :speech_balloon: :speedboat: :squirrel: :star: :star2: :stars: :station: :statue_of_liberty: :steam_locomotive: :stew: :straight_ruler: :strawberry: :stuck_out_tongue: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_winking_eye: :sun_with_face: :sunflower: :sunglasses: :sunny: :sunrise: :sunrise_over_mountains: :surfer: :sushi: :suspect: :suspension_railway: :sweat: :sweat_drops: :sweat_smile: :sweet_potato: :swimmer: :symbols: :syringe: :tada: :tanabata_tree: :tangerine: :taurus: :taxi: :tea: :telephone: :telephone_receiver: :telescope: :tennis: :tent: :thought_balloon: :three: :thumbsdown: :thumbsup: :ticket: :tiger: :tiger2: :tired_face: :tm: :toilet: :tokyo_tower: :tomato: :tongue: :top: :tophat: :tractor: :traffic_light: :train: :train2: :tram: :triangular_flag_on_post: :triangular_ruler: :trident: :triumph: :trolleybus: :trollface: :trophy: :tropical_drink: :tropical_fish: :truck: :trumpet: :tshirt: :tulip: :turtle: :tv: :twisted_rightwards_arrows: :two: :two_hearts: :two_men_holding_hands: :two_women_holding_hands: :uk: :umbrella: :unamused: :underage: :unlock: :up: :us: :v: :vertical_traffic_light: :vhs: :vibration_mode: :video_camera: :video_game: :violin: :virgo: :volcano: :vs: :walking: :waning_crescent_moon: :waning_gibbous_moon: :warning: :watch: :water_buffalo: :watermelon: :wave: :wavy_dash: :waxing_crescent_moon: :waxing_gibbous_moon: :wc: :weary: :wedding: :whale: :whale2: :wheelchair: :white_check_mark: :white_circle: :white_flower: :white_large_square: :white_medium_small_square: :white_medium_square: :white_small_square: :white_square_button: :wind_chime: :wine_glass: :wink: :wolf: :woman: :womans_clothes: :womans_hat: :womens: :worried: :wrench: :x: :yellow_heart: :yen: :yum: :zap: :zero: :zzz: Unnamed: :u5272: :u5408: :u55b6: :u6307: :u6708: :u6709: :u6e80: :u7121: :u7533: :u7981: :u7a7a: `, `**[11] [Auto Linking]** #### should be turned into links: http://example.com https://example.com www.example.com www.example.com/index www.example.com/index.html www.example.com/index/sub www.example.com/index?params=1 www.example.com/index?params=1&other=2 www.example.com/index?params=1;other=2 http://example.com:8065 <http://example.com> <www.example.com> http://www.example.com/_/page www.example.com/_/page https://en.wikipedia.org/wiki/🐬 https://en.wikipedia.org/wiki/Rendering_(computer_graphics) http://127.0.0.1 http://192.168.1.1:4040 http://[::1]:80 http://[::1]:8065 https://[::1]:80 http://[2001:0:5ef5:79fb:303a:62d5:3312:ff42]:80 http://[2001:0:5ef5:79fb:303a:62d5:3312:ff42]:8065 https://[2001:0:5ef5:79fb:303a:62d5:3312:ff42]:443 http://username:[email protected] http://username:[email protected] http://username:password@[2001:0:5ef5:79fb:303a:62d5:3312:ff42]:80 [email protected] #### should be turned into links which link to the correct place: [example link](example.com) links to ` + "`" + `http://example.com` + "`" + ` [example.com](example.com) links to ` + "`" + `http://example.com` + "`" + ` [example.com/other](example.com) links to ` + "`" + `http://example.com` + "`" + ` [example.com/other_link](example.com/example) links to ` + "`" + `http://example.com/example` + "`" + ` www.example.com links to ` + "`" + `http://www.example.com` + "`" + ` https://example.com links to ` + "`" + `https://example.com` + "`" + `and not ` + "`" + `http://example.com` + "`" + ` https://en.wikipedia.org/wiki/🐬 links to the Wikipedia article on dolphins https://en.wikipedia.org/wiki/URLs#Syntax links to the Syntax section of the Wikipedia article on URLs [email protected] links to ` + "`" + `mailto:[email protected]` + "`" + ` [email link](mailto:[email protected]) links to ` + "`" + `mailto:[email protected]` + "`" + `and not ` + "`" + `http://mailto:[email protected]` + "`" + ` [other link](ts3server://example.com) links to ` + "`" + `ts3server://example.com` + "`" + `and not ` + "`" + `http://ts3server://example.com` + "`" + ` #### should not be turned into links: example.com readme.md <example.com> http:// @example.com #### should only turn the actual link into a link and not change surrounding text (http://example.com) ([email protected]) This is a sentence with a http://example.com in it. This is a sentence with a [link](http://example.com) in it. This is a sentence with a http://example.com/_/underscore in it. This is a sentence with a link (http://example.com) in it. This is a sentence with a (https://en.wikipedia.org/wiki/Rendering_(computer_graphics)) in it. This is a sentence with a http://192.168.1.1:4040 in it. This is a sentence with a https://::1 in it. This is a link to http://example.com. `, "*", "?", ".", "}{][)(><", "{}[]()<>", "qahwah ( قهوة)", "שָׁלוֹם עֲלֵיכֶם", "Ramen チャーシュー chāshū", "言而无信", "Ṫ͌ó̍ ̍͂̓̍̍̀i̊ͯ͒", "& < &qu", "' or '1'='1' -- ", "' or '1'='1' ({ ", "' or '1'='1' /* ", "1;DROP TABLE users", "<b><i><u><strong><em>", "sue@thatmightbe", "sue@thatmightbe.", "[email protected]", "[email protected]", "[email protected]", "a@b.中国", "[email protected]", "[email protected]", "[email protected]", "local@[127.0.0.1]", "!@$%^&:*.,/|;'\"+=?`~#", "'\"/\\\"\"''\\/", "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg", "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg", "ą ć ę ł ń ó ś ź ż č ď ě ň ř š ť ž ă î ø å æ á é í ó ú Ç Ğ İ Ö Ş Ü", "abcdefghijklmnopqrstuvwrxyz0123456789 -_", "Ṫ͌ó̍ ̍͂̓̍̍̀i̊ͯ͒nͧ̍̓̃͋vok̂̓ͤ̓̂ěͬ ͆tͬ̐́̐͆h̒̏͌̓e͂ ̎̊h̽͆ͯ̄ͮi͊̂ͧͫ̇̃vͥͦ́ẻͤ-͒m̈́̀i̓ͮ͗̑͌̆̅n̓̓ͨd̊̑͛̔̚ ͨͮ̊̾rͪeͭͭ͑ͧ́͋p̈́̅̚rͧe̒̈̌s̍̽ͩ̓̇e͗n̏͊ͬͭtͨ͆ͤ̚iͪ͗̍n͐͒g̾ͦ̎ ͥ͌̽̊ͩͥ͗c̀ͬͣha̍̏̉ͪ̈̚o̊̏s̊̋̀̏̽̚.͒ͫ͛͛̎ͥ", "H҉̵̞̟̠̖̗̘Ȅ̐̑̒̚̕̚ IS C̒̓̔̿̿̿̕̚̚̕̚̕̚̕̚̕̚̕̚OMI҉̵̞̟̠̖̗̘NG > ͡҉҉ ̵̡̢̛̗̘̙̜̝̞̟̠͇̊̋̌̍̎̏̿̿̿̚ ҉ ҉҉̡̢̡̢̛̛̖̗̘̙̜̝̞̟̠̖̗̘̙̜̝̞̟̠̊̋̌̍̎̏̐̑̒̓̔̊̋̌̍̎̏̐̑ ͡҉҉", "<a href=\"//www.google.com\">Teh Googles</a>", "<img src=\"//upload.wikimedia.org/wikipedia/meta/b/be/Wikipedia-logo-v2_2x.png\" />", "& < " '", " %21 %23 %24 %26 %27 %28 %29 %2A %2B %2C %2F %3A %3B %3D %3F %40 %5B %5D %0D %0A %0D%0A %20 %22 %25 %2D %2E %3C %3E %5C %5E %5F %60 %7B %7C %7D %7E", ";alert('Well this is awkward.');", "<script type='text/javascript'>alert('yay puppies');</script>", "http?q=foobar%0d%0aContent-\nLength:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-\nType:%20text/html%0d%0aContent-Length:%2019%0d%0a%0d%0a<html>Shazam</html>", "apos'[email protected]", "apos''''[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "tom(comment)@thatmightbe.com", "(comment)[email protected]", "\"quotes\"@thatmightbe.com", "\"\\\"(),:;<>@[\\]\"@thatmightbe.com", "a!#$%&'*+-/=?^_`{|}[email protected]", "jill@(comment)example.com", "[email protected](comment)", "ben@ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg.com", "judy@gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg.com", "ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.com", }
Strings that should pass as acceptable posts
var T i18n.TranslateFunc
var TDefault i18n.TranslateFunc
Functions ¶
func CopyDir ¶
CopyDir will copy a directory and all contained files and directories. src must exist and dst must not exist. Permissions are preserved when possible. Symlinks are skipped.
func CopyFile ¶
CopyFile will copy a file from src path to dst path. Overwrites any existing files at dst. Permissions are copied from file at src to the new file at dst.
func CreateTestAnimatedGif ¶
func DisableDebugLogForTest ¶
func DisableDebugLogForTest()
DON'T USE THIS Modify the level on the app logger
func EnableDebugLogForTest ¶
func EnableDebugLogForTest()
DON'T USE THIS Modify the level on the app logger
func ExtractTarGz ¶
ExtractTarGz takes in an io.Reader containing the bytes for a .tar.gz file and a destination string to extract to.
func GetHostnameFromSiteURL ¶
func GetIpAddress ¶
func GetLicenseFileFromDisk ¶
func GetLicenseFileLocation ¶
func GetLogFileLocation ¶
func GetSubpathScriptHash ¶
GetSubpathScriptHash computes the script-src addition required for the subpath script to bypass CSP protections.
func GetSupportedLocales ¶
func GetTranslationsAndLocale ¶
func GetTranslationsAndLocale(w http.ResponseWriter, r *http.Request) (i18n.TranslateFunc, string)
func GetTranslationsBySystemLocale ¶
func GetTranslationsBySystemLocale() (i18n.TranslateFunc, error)
func GetUserTranslations ¶
func GetUserTranslations(locale string) i18n.TranslateFunc
func HashSha256 ¶
func InitTranslations ¶
func InitTranslations(localizationSettings model.LocalizationSettings) error
func InitTranslationsWithDir ¶
func IsPasswordValid ¶
func IsPasswordValidWithSettings ¶
func IsPasswordValidWithSettings(password string, settings *model.PasswordSettings) *model.AppError
func Merge ¶
func Merge(base interface{}, patch interface{}, mergeConfig *MergeConfig) (interface{}, error)
Merge will return a new value of the same type as base and patch, recursively merging non-nil values from patch on top of base.
Restrictions/guarantees:
- base and patch must be the same type
- base and patch will never be modified
- values from patch are always selected when non-nil
- structs are merged recursively
- maps and slices are treated as pointers, and merged as a single value
Note that callers need to cast the returned interface back into the original type:
func mergeTestStruct(base, patch *testStruct) (*testStruct, error) { ret, err := merge(base, patch) if err != nil { return nil, err } retTS := ret.(testStruct) return &retTS, nil }
func MillisFromTime ¶
func MloggerConfigFromLoggerConfig ¶
func MloggerConfigFromLoggerConfig(s *model.LogSettings) *mlog.LoggerConfiguration
func PathTraversesUpward ¶
PathTraversesUpward will return true if the path attempts to traverse upwards by using ".." in the path.
func RandIntFromRange ¶
func RandString ¶
func RandomName ¶
func RandomText ¶
Random selection of text for post
func RenderWebAppError ¶
func RenderWebError ¶
func StringArrayIntersection ¶
func StringInSlice ¶
func StringSliceDiff ¶
func TfuncWithFallback ¶
func TfuncWithFallback(pref string) i18n.TranslateFunc
func TimeFromMillis ¶
func TranslateAsHtml ¶
func TranslationsPreInit ¶
func TranslationsPreInit() error
this functions loads translations from filesystem if they are not loaded already and assigns english while loading server config
func UpdateAssetsSubpath ¶
UpdateAssetsSubpath rewrites assets in the /client directory to assume the application is hosted at the given subpath instead of at the root. No changes are written unless necessary.
func UpdateAssetsSubpathFromConfig ¶
UpdateAssetsSubpathFromConfig uses UpdateAssetsSubpath and any path defined in the SiteURL.
func ValidateLicense ¶
Types ¶
type Cache ¶ added in v1.0.0
type Cache struct {
// contains filtered or unexported fields
}
Cache is a thread-safe fixed size LRU cache.
func NewLruWithParams ¶
func NewLruWithParams(size int, name string, defaultExpiry int64, invalidateClusterEvent string) *Cache
New creates an LRU with the given parameters.
func (*Cache) Add ¶ added in v1.0.0
func (c *Cache) Add(key, value interface{})
Add adds the given key and value to the store without an expiry.
func (*Cache) AddWithDefaultExpires ¶
func (c *Cache) AddWithDefaultExpires(key, value interface{})
Add adds the given key and value to the store with the default expiry.
func (*Cache) AddWithExpiresInSecs ¶ added in v1.0.0
AddWithExpiresInSecs adds the given key and value to the cache with the given expiry.
func (*Cache) Get ¶ added in v1.0.0
Get returns the value stored in the cache for a key, or nil if no value is present. The ok result indicates whether value was found in the cache.
func (*Cache) GetInvalidateClusterEvent ¶
GetInvalidateClusterEvent returns the cluster event configured when this cache was created.
func (*Cache) GetOrAdd ¶
func (c *Cache) GetOrAdd(key, value interface{}, ttl time.Duration) (actual interface{}, loaded bool)
GetOrAdd returns the existing value for the key if present. Otherwise, it stores and returns the given value. The loaded result is true if the value was loaded, false if stored. This API intentionally deviates from the Add-only variants above for simplicity. We should simplify the entire API in the future.
func (*Cache) Keys ¶ added in v1.0.0
func (c *Cache) Keys() []interface{}
Keys returns a slice of the keys in the cache, from oldest to newest.
type HTMLTemplate ¶
type HTMLTemplate struct { Templates *template.Template TemplateName string Props map[string]interface{} Html map[string]template.HTML }
func NewHTMLTemplate ¶
func NewHTMLTemplate(templates *template.Template, templateName string) *HTMLTemplate
func (*HTMLTemplate) Render ¶
func (t *HTMLTemplate) Render() string
func (*HTMLTemplate) RenderToWriter ¶
func (t *HTMLTemplate) RenderToWriter(w io.Writer) error
type HTMLTemplateWatcher ¶
type HTMLTemplateWatcher struct {
// contains filtered or unexported fields
}
func NewHTMLTemplateWatcher ¶
func NewHTMLTemplateWatcher(directory string) (*HTMLTemplateWatcher, error)
func (*HTMLTemplateWatcher) Close ¶
func (w *HTMLTemplateWatcher) Close()
func (*HTMLTemplateWatcher) Templates ¶
func (w *HTMLTemplateWatcher) Templates() *template.Template
type MergeConfig ¶
type MergeConfig struct {
StructFieldFilter StructFieldFilter
}
MergeConfig allows for optional merge customizations.
type StructFieldFilter ¶
type StructFieldFilter func(structField reflect.StructField, base reflect.Value, patch reflect.Value) bool
StructFieldFilter defines a callback function used to decide if a patch value should be applied.
Source Files
¶
Directories
¶
Path | Synopsis |
---|---|
This package implements a parser for the subset of the CommonMark spec necessary for us to do server-side processing.
|
This package implements a parser for the subset of the CommonMark spec necessary for us to do server-side processing. |