Compare commits
No commits in common. "main" and "master" have entirely different histories.
|
@ -1,7 +1,9 @@
|
||||||
# Cwtch Bot Framework
|
# Cwtch Bot Libraries
|
||||||
|
|
||||||
A specialized Cwtch Bot framework in Go that provides a more lightweight and tailored approach to building chat bots for Cwtch.
|
This repository contains some basic libraries and a few functional Cwtch Bots
|
||||||
|
|
||||||
For an introduction to building chatbots with the CwtchBot framework check out [the building an echobot tutorial](https://docs.cwtch.im/developing/building-a-cwtch-app/building-an-echobot).
|
* Echo Bot - Simply echos back what you say as a basic example
|
||||||
|
* Dev Bot - Provides a few development functions like delayed messaging, scheduled messaging and spam
|
||||||
|
* Fuzz Bot - Provides a number of security oriented functions like fuzzing chat messages and invite overlays.
|
||||||
|
|
||||||
If you'd like to get involved please open an issue, or submit a pull request :)
|
If you'd like to get involved please open an issue, or submit a pull request :)
|
33
bot.go
33
bot.go
|
@ -4,6 +4,7 @@ import (
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"cwtch.im/cwtch/app"
|
"cwtch.im/cwtch/app"
|
||||||
"cwtch.im/cwtch/event"
|
"cwtch.im/cwtch/event"
|
||||||
|
"cwtch.im/cwtch/model/constants"
|
||||||
"cwtch.im/cwtch/peer"
|
"cwtch.im/cwtch/peer"
|
||||||
"cwtch.im/cwtch/protocol/connections"
|
"cwtch.im/cwtch/protocol/connections"
|
||||||
"cwtch.im/cwtch/settings"
|
"cwtch.im/cwtch/settings"
|
||||||
|
@ -26,7 +27,6 @@ type CwtchBot struct {
|
||||||
acn connectivity.ACN
|
acn connectivity.ACN
|
||||||
peername string
|
peername string
|
||||||
engineHooks connections.EngineHooks
|
engineHooks connections.EngineHooks
|
||||||
experiments []string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewCwtchBot(userdir string, peername string) *CwtchBot {
|
func NewCwtchBot(userdir string, peername string) *CwtchBot {
|
||||||
|
@ -34,16 +34,6 @@ func NewCwtchBot(userdir string, peername string) *CwtchBot {
|
||||||
cb.dir = userdir
|
cb.dir = userdir
|
||||||
cb.peername = peername
|
cb.peername = peername
|
||||||
cb.engineHooks = connections.DefaultEngineHooks{}
|
cb.engineHooks = connections.DefaultEngineHooks{}
|
||||||
cb.experiments = nil
|
|
||||||
return cb
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewCwtchBotWithExperiments(userdir string, peername string, experiments []string) *CwtchBot {
|
|
||||||
cb := new(CwtchBot)
|
|
||||||
cb.dir = userdir
|
|
||||||
cb.peername = peername
|
|
||||||
cb.engineHooks = connections.DefaultEngineHooks{}
|
|
||||||
cb.experiments = experiments
|
|
||||||
return cb
|
return cb
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,27 +82,12 @@ func (cb *CwtchBot) Launch() {
|
||||||
cb.acn.WaitTillBootstrapped()
|
cb.acn.WaitTillBootstrapped()
|
||||||
settingsFile, _ := settings.InitGlobalSettingsFile(cb.dir, "")
|
settingsFile, _ := settings.InitGlobalSettingsFile(cb.dir, "")
|
||||||
gSettings := settingsFile.ReadGlobalSettings()
|
gSettings := settingsFile.ReadGlobalSettings()
|
||||||
|
gSettings.ExperimentsEnabled = true
|
||||||
if cb.experiments != nil {
|
|
||||||
gSettings.ExperimentsEnabled = true
|
|
||||||
} else {
|
|
||||||
gSettings.ExperimentsEnabled = false
|
|
||||||
}
|
|
||||||
gSettings.DownloadPath = "./"
|
gSettings.DownloadPath = "./"
|
||||||
|
gSettings.Experiments[constants.FileSharingExperiment] = true
|
||||||
// Reset all Experiments...
|
gSettings.Experiments[constants.ImagePreviewsExperiment] = true
|
||||||
for experiment := range gSettings.Experiments {
|
|
||||||
gSettings.Experiments[experiment] = false
|
|
||||||
}
|
|
||||||
|
|
||||||
// Explicitly Enable only the experiments we've specified...
|
|
||||||
for _, experiment := range cb.experiments {
|
|
||||||
gSettings.Experiments[experiment] = true
|
|
||||||
}
|
|
||||||
|
|
||||||
settingsFile.WriteGlobalSettings(gSettings)
|
settingsFile.WriteGlobalSettings(gSettings)
|
||||||
app := app.NewApp(cb.acn, cb.dir, settingsFile)
|
app := app.NewApp(cb.acn, cb.dir, settingsFile)
|
||||||
|
|
||||||
app.InstallEngineHooks(cb.engineHooks)
|
app.InstallEngineHooks(cb.engineHooks)
|
||||||
|
|
||||||
app.LoadProfiles("")
|
app.LoadProfiles("")
|
||||||
|
|
|
@ -0,0 +1,142 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cwtch.im/cwtch/event"
|
||||||
|
"cwtch.im/cwtch/model"
|
||||||
|
"cwtch.im/cwtch/protocol/connections"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"git.openprivacy.ca/openprivacy/log"
|
||||||
|
"git.openprivacy.ca/sarah/cwtchbot"
|
||||||
|
"github.com/araddon/dateparse"
|
||||||
|
"math/rand"
|
||||||
|
"os/user"
|
||||||
|
"path"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
var cwtchbot *bot.CwtchBot
|
||||||
|
|
||||||
|
type OverlayEnvelope struct {
|
||||||
|
onion string
|
||||||
|
Overlay int `json:"o"`
|
||||||
|
Data string `json:"d"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func Unwrap(onion, msg string) *OverlayEnvelope {
|
||||||
|
var envelope OverlayEnvelope
|
||||||
|
err := json.Unmarshal([]byte(msg), &envelope)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("json error: %v", err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
envelope.onion = onion
|
||||||
|
return &envelope
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *OverlayEnvelope) reply(msg string) {
|
||||||
|
retenv := OverlayEnvelope{Overlay:1, Data:msg}
|
||||||
|
raw, _ := json.Marshal(retenv)
|
||||||
|
log.Debugf("sending %v to %v", string(raw), this.onion)
|
||||||
|
cwtchbot.Peer.SendMessageToPeer(this.onion, string(raw))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *OverlayEnvelope) spam() {
|
||||||
|
for {
|
||||||
|
this.reply(fmt.Sprintf("%d", rand.Int()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func helpMessage() string {
|
||||||
|
return "help\nevery\nin\nat\nspam\nstop"
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
user, _ := user.Current()
|
||||||
|
log.SetLevel(log.LevelInfo)
|
||||||
|
cwtchbot = bot.NewCwtchBot(path.Join(user.HomeDir, "/.echobot/"), "echobot")
|
||||||
|
|
||||||
|
cwtchbot.Launch()
|
||||||
|
|
||||||
|
for {
|
||||||
|
log.Infof("Process.....\n")
|
||||||
|
message := cwtchbot.Queue.Next()
|
||||||
|
switch message.EventType {
|
||||||
|
case event.NewMessageFromGroup:
|
||||||
|
if message.Data[event.RemotePeer] != cwtchbot.Peer.GetOnion() {
|
||||||
|
log.Infof("New Message: %v\v", message.Data[event.Data])
|
||||||
|
cwtchbot.Peer.SendMessageToGroupTracked(message.Data[event.GroupID], message.Data[event.Data])
|
||||||
|
}
|
||||||
|
case event.NewMessageFromPeer:
|
||||||
|
log.Infof("New Event: %v", message)
|
||||||
|
cwtchbot.Queue.Publish(event.NewEvent(event.PeerAcknowledgement, map[event.Field]string{event.EventID: message.EventID, event.RemotePeer: message.Data[event.RemotePeer]}))
|
||||||
|
|
||||||
|
envelope := Unwrap(message.Data[event.RemotePeer], message.Data[event.Data])
|
||||||
|
mainTimer := time.NewTimer(time.Nanosecond)
|
||||||
|
|
||||||
|
if envelope.Overlay == 1 {
|
||||||
|
cmd := strings.Split(envelope.Data, " ")
|
||||||
|
switch cmd[0] {
|
||||||
|
case "help":
|
||||||
|
envelope.reply(helpMessage())
|
||||||
|
case "every":
|
||||||
|
interval, err := time.ParseDuration(cmd[1])
|
||||||
|
if err != nil {
|
||||||
|
envelope.reply(fmt.Sprintf("parse error: %s", err))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
envelope.reply("you got it!")
|
||||||
|
mainTimer.Stop()
|
||||||
|
mainTimer = time.AfterFunc(interval, func() {
|
||||||
|
envelope.reply(cmd[2])
|
||||||
|
mainTimer.Reset(interval)
|
||||||
|
})
|
||||||
|
case "in":
|
||||||
|
interval, err := time.ParseDuration(cmd[1])
|
||||||
|
if err != nil {
|
||||||
|
envelope.reply(fmt.Sprintf("parse error: %s", err))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
envelope.reply("will do!")
|
||||||
|
mainTimer.Stop()
|
||||||
|
mainTimer = time.AfterFunc(interval, func() {
|
||||||
|
envelope.reply(cmd[2])
|
||||||
|
})
|
||||||
|
case "at":
|
||||||
|
at, err := dateparse.ParseAny(cmd[1])
|
||||||
|
if err != nil {
|
||||||
|
envelope.reply(fmt.Sprintf("parse error: %s", err))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
envelope.reply(fmt.Sprintf("ok, sending at %v", at))
|
||||||
|
|
||||||
|
mainTimer.Stop()
|
||||||
|
interval := time.Until(at)
|
||||||
|
time.AfterFunc(interval, func() {
|
||||||
|
envelope.reply(cmd[2])
|
||||||
|
})
|
||||||
|
case "spam":
|
||||||
|
envelope.reply("lol ok you asked for it!")
|
||||||
|
mainTimer.Stop()
|
||||||
|
mainTimer = time.AfterFunc(time.Nanosecond, func() {
|
||||||
|
envelope.reply(fmt.Sprintf("%d", rand.Int()))
|
||||||
|
mainTimer.Reset(time.Nanosecond)
|
||||||
|
})
|
||||||
|
default:
|
||||||
|
envelope.reply("unrecognized command")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.Warnf("unknown overlay type %d", envelope.Overlay)
|
||||||
|
}
|
||||||
|
case event.PeerStateChange:
|
||||||
|
state := message.Data[event.ConnectionState]
|
||||||
|
if state == connections.ConnectionStateName[connections.AUTHENTICATED] {
|
||||||
|
log.Infof("Auto approving stranger %v", message.Data[event.RemotePeer])
|
||||||
|
cwtchbot.Peer.AddContact("stranger", message.Data[event.RemotePeer], model.AuthApproved)
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
log.Infof("New Event: %v", message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,517 @@
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"undefined",
|
||||||
|
"undef",
|
||||||
|
"null",
|
||||||
|
"NULL",
|
||||||
|
"(null)",
|
||||||
|
"nil",
|
||||||
|
"NIL",
|
||||||
|
"true",
|
||||||
|
"false",
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"TRUE",
|
||||||
|
"FALSE",
|
||||||
|
"None",
|
||||||
|
"hasOwnProperty",
|
||||||
|
"then",
|
||||||
|
"\\",
|
||||||
|
"\\\\",
|
||||||
|
"0",
|
||||||
|
"1",
|
||||||
|
"1.00",
|
||||||
|
"$1.00",
|
||||||
|
"1/2",
|
||||||
|
"1E2",
|
||||||
|
"1E02",
|
||||||
|
"1E+02",
|
||||||
|
"-1",
|
||||||
|
"-1.00",
|
||||||
|
"-$1.00",
|
||||||
|
"-1/2",
|
||||||
|
"-1E2",
|
||||||
|
"-1E02",
|
||||||
|
"-1E+02",
|
||||||
|
"1/0",
|
||||||
|
"0/0",
|
||||||
|
"-2147483648/-1",
|
||||||
|
"-9223372036854775808/-1",
|
||||||
|
"-0",
|
||||||
|
"-0.0",
|
||||||
|
"+0",
|
||||||
|
"+0.0",
|
||||||
|
"0.00",
|
||||||
|
"0..0",
|
||||||
|
".",
|
||||||
|
"0.0.0",
|
||||||
|
"0,00",
|
||||||
|
"0,,0",
|
||||||
|
",",
|
||||||
|
"0,0,0",
|
||||||
|
"0.0/0",
|
||||||
|
"1.0/0.0",
|
||||||
|
"0.0/0.0",
|
||||||
|
"1,0/0,0",
|
||||||
|
"0,0/0,0",
|
||||||
|
"--1",
|
||||||
|
"-",
|
||||||
|
"-.",
|
||||||
|
"-,",
|
||||||
|
"999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999",
|
||||||
|
"NaN",
|
||||||
|
"Infinity",
|
||||||
|
"-Infinity",
|
||||||
|
"INF",
|
||||||
|
"1#INF",
|
||||||
|
"-1#IND",
|
||||||
|
"1#QNAN",
|
||||||
|
"1#SNAN",
|
||||||
|
"1#IND",
|
||||||
|
"0x0",
|
||||||
|
"0xffffffff",
|
||||||
|
"0xffffffffffffffff",
|
||||||
|
"0xabad1dea",
|
||||||
|
"123456789012345678901234567890123456789",
|
||||||
|
"1,000.00",
|
||||||
|
"1 000.00",
|
||||||
|
"1'000.00",
|
||||||
|
"1,000,000.00",
|
||||||
|
"1 000 000.00",
|
||||||
|
"1'000'000.00",
|
||||||
|
"1.000,00",
|
||||||
|
"1 000,00",
|
||||||
|
"1'000,00",
|
||||||
|
"1.000.000,00",
|
||||||
|
"1 000 000,00",
|
||||||
|
"1'000'000,00",
|
||||||
|
"01000",
|
||||||
|
"08",
|
||||||
|
"09",
|
||||||
|
"2.2250738585072011e-308",
|
||||||
|
",./;'[]\\-=",
|
||||||
|
"<>?:\"{}|_+",
|
||||||
|
"!@#$%^&*()`~",
|
||||||
|
"\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f",
|
||||||
|
"",
|
||||||
|
"\t\u000b\f
",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"Ω≈ç√∫˜µ≤≥÷",
|
||||||
|
"åß∂ƒ©˙∆˚¬…æ",
|
||||||
|
"œ∑´®†¥¨ˆøπ“‘",
|
||||||
|
"¡™£¢∞§¶•ªº–≠",
|
||||||
|
"¸˛Ç◊ı˜Â¯˘¿",
|
||||||
|
"ÅÍÎÏ˝ÓÔÒÚÆ☃",
|
||||||
|
"Œ„´‰ˇÁ¨ˆØ∏”’",
|
||||||
|
"`⁄€‹›fifl‡°·‚—±",
|
||||||
|
"⅛⅜⅝⅞",
|
||||||
|
"ЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя",
|
||||||
|
"٠١٢٣٤٥٦٧٨٩",
|
||||||
|
"⁰⁴⁵",
|
||||||
|
"₀₁₂",
|
||||||
|
"⁰⁴⁵₀₁₂",
|
||||||
|
"ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็ ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็ ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็",
|
||||||
|
"'",
|
||||||
|
"\"",
|
||||||
|
"''",
|
||||||
|
"\"\"",
|
||||||
|
"'\"'",
|
||||||
|
"\"''''\"'\"",
|
||||||
|
"\"'\"'\"''''\"",
|
||||||
|
"<foo val=“bar” />",
|
||||||
|
"<foo val=“bar” />",
|
||||||
|
"<foo val=”bar“ />",
|
||||||
|
"<foo val=`bar' />",
|
||||||
|
"田中さんにあげて下さい",
|
||||||
|
"パーティーへ行かないか",
|
||||||
|
"和製漢語",
|
||||||
|
"部落格",
|
||||||
|
"사회과학원 어학연구소",
|
||||||
|
"찦차를 타고 온 펲시맨과 쑛다리 똠방각하",
|
||||||
|
"社會科學院語學研究所",
|
||||||
|
"울란바토르",
|
||||||
|
"𠜎𠜱𠝹𠱓𠱸𠲖𠳏",
|
||||||
|
"𐐜 𐐔𐐇𐐝𐐀𐐡𐐇𐐓 𐐙𐐊𐐡𐐝𐐓/𐐝𐐇𐐗𐐊𐐤𐐔 𐐒𐐋𐐗 𐐒𐐌 𐐜 𐐡𐐀𐐖𐐇𐐤𐐓𐐝 𐐱𐑂 𐑄 𐐔𐐇𐐝𐐀𐐡𐐇𐐓 𐐏𐐆𐐅𐐤𐐆𐐚𐐊𐐡𐐝𐐆𐐓𐐆",
|
||||||
|
"表ポあA鷗ŒéB逍Üߪąñ丂㐀𠀀",
|
||||||
|
"Ⱥ",
|
||||||
|
"Ⱦ",
|
||||||
|
"ヽ༼ຈل͜ຈ༽ノ ヽ༼ຈل͜ຈ༽ノ",
|
||||||
|
"(。◕ ∀ ◕。)",
|
||||||
|
"`ィ(´∀`∩",
|
||||||
|
"__ロ(,_,*)",
|
||||||
|
"・( ̄∀ ̄)・:*:",
|
||||||
|
"゚・✿ヾ╲(。◕‿◕。)╱✿・゚",
|
||||||
|
",。・:*:・゜’( ☻ ω ☻ )。・:*:・゜’",
|
||||||
|
"(╯°□°)╯︵ ┻━┻)",
|
||||||
|
"(ノಥ益ಥ)ノ ┻━┻",
|
||||||
|
"┬─┬ノ( º _ ºノ)",
|
||||||
|
"( ͡° ͜ʖ ͡°)",
|
||||||
|
"¯\\_(ツ)_/¯",
|
||||||
|
"😍",
|
||||||
|
"👩🏽",
|
||||||
|
"👨🦰 👨🏿🦰 👨🦱 👨🏿🦱 🦹🏿♂️",
|
||||||
|
"👾 🙇 💁 🙅 🙆 🙋 🙎 🙍",
|
||||||
|
"🐵 🙈 🙉 🙊",
|
||||||
|
"❤️ 💔 💌 💕 💞 💓 💗 💖 💘 💝 💟 💜 💛 💚 💙",
|
||||||
|
"✋🏿 💪🏿 👐🏿 🙌🏿 👏🏿 🙏🏿",
|
||||||
|
"👨👩👦 👨👩👧👦 👨👨👦 👩👩👧 👨👦 👨👧👦 👩👦 👩👧👦",
|
||||||
|
"🚾 🆒 🆓 🆕 🆖 🆗 🆙 🏧",
|
||||||
|
"0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟",
|
||||||
|
"🇺🇸🇷🇺🇸 🇦🇫🇦🇲🇸",
|
||||||
|
"🇺🇸🇷🇺🇸🇦🇫🇦🇲",
|
||||||
|
"🇺🇸🇷🇺🇸🇦",
|
||||||
|
"123",
|
||||||
|
"١٢٣",
|
||||||
|
"ثم نفس سقطت وبالتحديد،, جزيرتي باستخدام أن دنو. إذ هنا؟ الستار وتنصيب كان. أهّل ايطاليا، بريطانيا-فرنسا قد أخذ. سليمان، إتفاقية بين ما, يذكر الحدود أي بعد, معاملة بولندا، الإطلاق عل إيو.",
|
||||||
|
"בְּרֵאשִׁית, בָּרָא אֱלֹהִים, אֵת הַשָּׁמַיִם, וְאֵת הָאָרֶץ",
|
||||||
|
"הָיְתָהtestالصفحات التّحول",
|
||||||
|
"﷽",
|
||||||
|
"ﷺ",
|
||||||
|
"مُنَاقَشَةُ سُبُلِ اِسْتِخْدَامِ اللُّغَةِ فِي النُّظُمِ الْقَائِمَةِ وَفِيم يَخُصَّ التَّطْبِيقَاتُ الْحاسُوبِيَّةُ، ",
|
||||||
|
"᚛ᚄᚓᚐᚋᚒᚄ ᚑᚄᚂᚑᚏᚅ᚜",
|
||||||
|
"᚛ ᚜",
|
||||||
|
"test",
|
||||||
|
"test",
|
||||||
|
"
test
",
|
||||||
|
"testtest",
|
||||||
|
"test",
|
||||||
|
"Ṱ̺̺̕o͞ ̷i̲̬͇̪͙n̝̗͕v̟̜̘̦͟o̶̙̰̠kè͚̮̺̪̹̱̤ ̖t̝͕̳̣̻̪͞h̼͓̲̦̳̘̲e͇̣̰̦̬͎ ̢̼̻̱̘h͚͎͙̜̣̲ͅi̦̲̣̰̤v̻͍e̺̭̳̪̰-m̢iͅn̖̺̞̲̯̰d̵̼̟͙̩̼̘̳ ̞̥̱̳̭r̛̗̘e͙p͠r̼̞̻̭̗e̺̠̣͟s̘͇̳͍̝͉e͉̥̯̞̲͚̬͜ǹ̬͎͎̟̖͇̤t͍̬̤͓̼̭͘ͅi̪̱n͠g̴͉ ͏͉ͅc̬̟h͡a̫̻̯͘o̫̟̖͍̙̝͉s̗̦̲.̨̹͈̣",
|
||||||
|
"̡͓̞ͅI̗̘̦͝n͇͇͙v̮̫ok̲̫̙͈i̖͙̭̹̠̞n̡̻̮̣̺g̲͈͙̭͙̬͎ ̰t͔̦h̞̲e̢̤ ͍̬̲͖f̴̘͕̣è͖ẹ̥̩l͖͔͚i͓͚̦͠n͖͍̗͓̳̮g͍ ̨o͚̪͡f̘̣̬ ̖̘͖̟͙̮c҉͔̫͖͓͇͖ͅh̵̤̣͚͔á̗̼͕ͅo̼̣̥s̱͈̺̖̦̻͢.̛̖̞̠̫̰",
|
||||||
|
"̗̺͖̹̯͓Ṯ̤͍̥͇͈h̲́e͏͓̼̗̙̼̣͔ ͇̜̱̠͓͍ͅN͕͠e̗̱z̘̝̜̺͙p̤̺̹͍̯͚e̠̻̠͜r̨̤͍̺̖͔̖̖d̠̟̭̬̝͟i̦͖̩͓͔̤a̠̗̬͉̙n͚͜ ̻̞̰͚ͅh̵͉i̳̞v̢͇ḙ͎͟-҉̭̩̼͔m̤̭̫i͕͇̝̦n̗͙ḍ̟ ̯̲͕͞ǫ̟̯̰̲͙̻̝f ̪̰̰̗̖̭̘͘c̦͍̲̞͍̩̙ḥ͚a̮͎̟̙͜ơ̩̹͎s̤.̝̝ ҉Z̡̖̜͖̰̣͉̜a͖̰͙̬͡l̲̫̳͍̩g̡̟̼̱͚̞̬ͅo̗͜.̟",
|
||||||
|
"̦H̬̤̗̤͝e͜ ̜̥̝̻͍̟́w̕h̖̯͓o̝͙̖͎̱̮ ҉̺̙̞̟͈W̷̼̭a̺̪͍į͈͕̭͙̯̜t̶̼̮s̘͙͖̕ ̠̫̠B̻͍͙͉̳ͅe̵h̵̬͇̫͙i̹͓̳̳̮͎̫̕n͟d̴̪̜̖ ̰͉̩͇͙̲͞ͅT͖̼͓̪͢h͏͓̮̻e̬̝̟ͅ ̤̹̝W͙̞̝͔͇͝ͅa͏͓͔̹̼̣l̴͔̰̤̟͔ḽ̫.͕",
|
||||||
|
"Z̮̞̠͙͔ͅḀ̗̞͈̻̗Ḷ͙͎̯̹̞͓G̻O̭̗̮",
|
||||||
|
"˙ɐnbᴉlɐ ɐuƃɐɯ ǝɹolop ʇǝ ǝɹoqɐl ʇn ʇunpᴉpᴉɔuᴉ ɹodɯǝʇ poɯsnᴉǝ op pǝs 'ʇᴉlǝ ƃuᴉɔsᴉdᴉpɐ ɹnʇǝʇɔǝsuoɔ 'ʇǝɯɐ ʇᴉs ɹolop ɯnsdᴉ ɯǝɹo˥",
|
||||||
|
"00˙Ɩ$-",
|
||||||
|
"The quick brown fox jumps over the lazy dog",
|
||||||
|
"𝐓𝐡𝐞 𝐪𝐮𝐢𝐜𝐤 𝐛𝐫𝐨𝐰𝐧 𝐟𝐨𝐱 𝐣𝐮𝐦𝐩𝐬 𝐨𝐯𝐞𝐫 𝐭𝐡𝐞 𝐥𝐚𝐳𝐲 𝐝𝐨𝐠",
|
||||||
|
"𝕿𝖍𝖊 𝖖𝖚𝖎𝖈𝖐 𝖇𝖗𝖔𝖜𝖓 𝖋𝖔𝖝 𝖏𝖚𝖒𝖕𝖘 𝖔𝖛𝖊𝖗 𝖙𝖍𝖊 𝖑𝖆𝖟𝖞 𝖉𝖔𝖌",
|
||||||
|
"𝑻𝒉𝒆 𝒒𝒖𝒊𝒄𝒌 𝒃𝒓𝒐𝒘𝒏 𝒇𝒐𝒙 𝒋𝒖𝒎𝒑𝒔 𝒐𝒗𝒆𝒓 𝒕𝒉𝒆 𝒍𝒂𝒛𝒚 𝒅𝒐𝒈",
|
||||||
|
"𝓣𝓱𝓮 𝓺𝓾𝓲𝓬𝓴 𝓫𝓻𝓸𝔀𝓷 𝓯𝓸𝔁 𝓳𝓾𝓶𝓹𝓼 𝓸𝓿𝓮𝓻 𝓽𝓱𝓮 𝓵𝓪𝔃𝔂 𝓭𝓸𝓰",
|
||||||
|
"𝕋𝕙𝕖 𝕢𝕦𝕚𝕔𝕜 𝕓𝕣𝕠𝕨𝕟 𝕗𝕠𝕩 𝕛𝕦𝕞𝕡𝕤 𝕠𝕧𝕖𝕣 𝕥𝕙𝕖 𝕝𝕒𝕫𝕪 𝕕𝕠𝕘",
|
||||||
|
"𝚃𝚑𝚎 𝚚𝚞𝚒𝚌𝚔 𝚋𝚛𝚘𝚠𝚗 𝚏𝚘𝚡 𝚓𝚞𝚖𝚙𝚜 𝚘𝚟𝚎𝚛 𝚝𝚑𝚎 𝚕𝚊𝚣𝚢 𝚍𝚘𝚐",
|
||||||
|
"⒯⒣⒠ ⒬⒰⒤⒞⒦ ⒝⒭⒪⒲⒩ ⒡⒪⒳ ⒥⒰⒨⒫⒮ ⒪⒱⒠⒭ ⒯⒣⒠ ⒧⒜⒵⒴ ⒟⒪⒢",
|
||||||
|
"<script>alert(123)</script>",
|
||||||
|
"<script>alert('123');</script>",
|
||||||
|
"<img src=x onerror=alert(123) />",
|
||||||
|
"<svg><script>123<1>alert(123)</script>",
|
||||||
|
"\"><script>alert(123)</script>",
|
||||||
|
"'><script>alert(123)</script>",
|
||||||
|
"><script>alert(123)</script>",
|
||||||
|
"</script><script>alert(123)</script>",
|
||||||
|
"< / script >< script >alert(123)< / script >",
|
||||||
|
" onfocus=JaVaSCript:alert(123) autofocus",
|
||||||
|
"\" onfocus=JaVaSCript:alert(123) autofocus",
|
||||||
|
"' onfocus=JaVaSCript:alert(123) autofocus",
|
||||||
|
"<script>alert(123)</script>",
|
||||||
|
"<sc<script>ript>alert(123)</sc</script>ript>",
|
||||||
|
"--><script>alert(123)</script>",
|
||||||
|
"\";alert(123);t=\"",
|
||||||
|
"';alert(123);t='",
|
||||||
|
"JavaSCript:alert(123)",
|
||||||
|
";alert(123);",
|
||||||
|
"src=JaVaSCript:prompt(132)",
|
||||||
|
"\"><script>alert(123);</script x=\"",
|
||||||
|
"'><script>alert(123);</script x='",
|
||||||
|
"><script>alert(123);</script x=",
|
||||||
|
"\" autofocus onkeyup=\"javascript:alert(123)",
|
||||||
|
"' autofocus onkeyup='javascript:alert(123)",
|
||||||
|
"<script\\x20type=\"text/javascript\">javascript:alert(1);</script>",
|
||||||
|
"<script\\x3Etype=\"text/javascript\">javascript:alert(1);</script>",
|
||||||
|
"<script\\x0Dtype=\"text/javascript\">javascript:alert(1);</script>",
|
||||||
|
"<script\\x09type=\"text/javascript\">javascript:alert(1);</script>",
|
||||||
|
"<script\\x0Ctype=\"text/javascript\">javascript:alert(1);</script>",
|
||||||
|
"<script\\x2Ftype=\"text/javascript\">javascript:alert(1);</script>",
|
||||||
|
"<script\\x0Atype=\"text/javascript\">javascript:alert(1);</script>",
|
||||||
|
"'`\"><\\x3Cscript>javascript:alert(1)</script>",
|
||||||
|
"'`\"><\\x00script>javascript:alert(1)</script>",
|
||||||
|
"ABC<div style=\"x\\x3Aexpression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:expression\\x5C(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:expression\\x00(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:exp\\x00ression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:exp\\x5Cression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:\\x0Aexpression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:\\x09expression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:\\xE3\\x80\\x80expression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:\\xE2\\x80\\x84expression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:\\xC2\\xA0expression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:\\xE2\\x80\\x80expression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:\\xE2\\x80\\x8Aexpression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:\\x0Dexpression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:\\x0Cexpression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:\\xE2\\x80\\x87expression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:\\xEF\\xBB\\xBFexpression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:\\x20expression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:\\xE2\\x80\\x88expression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:\\x00expression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:\\xE2\\x80\\x8Bexpression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:\\xE2\\x80\\x86expression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:\\xE2\\x80\\x85expression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:\\xE2\\x80\\x82expression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:\\x0Bexpression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:\\xE2\\x80\\x81expression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:\\xE2\\x80\\x83expression(javascript:alert(1)\">DEF",
|
||||||
|
"ABC<div style=\"x:\\xE2\\x80\\x89expression(javascript:alert(1)\">DEF",
|
||||||
|
"<a href=\"\\x0Bjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x0Fjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\xC2\\xA0javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x05javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\xE1\\xA0\\x8Ejavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x18javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x11javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\xE2\\x80\\x88javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\xE2\\x80\\x89javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\xE2\\x80\\x80javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x17javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x03javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x0Ejavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x1Ajavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x00javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x10javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\xE2\\x80\\x82javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x20javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x13javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x09javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\xE2\\x80\\x8Ajavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x14javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x19javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\xE2\\x80\\xAFjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x1Fjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\xE2\\x80\\x81javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x1Djavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\xE2\\x80\\x87javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x07javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\xE1\\x9A\\x80javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\xE2\\x80\\x83javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x04javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x01javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x08javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\xE2\\x80\\x84javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\xE2\\x80\\x86javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\xE3\\x80\\x80javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x12javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x0Djavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x0Ajavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x0Cjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x15javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\xE2\\x80\\xA8javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x16javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x02javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x1Bjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x06javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\xE2\\x80\\xA9javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\xE2\\x80\\x85javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x1Ejavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\xE2\\x81\\x9Fjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"\\x1Cjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"javascript\\x00:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"javascript\\x3A:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"javascript\\x09:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"javascript\\x0D:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"<a href=\"javascript\\x0A:javascript:alert(1)\" id=\"fuzzelement1\">test</a>",
|
||||||
|
"`\"'><img src=xxx:x \\x0Aonerror=javascript:alert(1)>",
|
||||||
|
"`\"'><img src=xxx:x \\x22onerror=javascript:alert(1)>",
|
||||||
|
"`\"'><img src=xxx:x \\x0Bonerror=javascript:alert(1)>",
|
||||||
|
"`\"'><img src=xxx:x \\x0Donerror=javascript:alert(1)>",
|
||||||
|
"`\"'><img src=xxx:x \\x2Fonerror=javascript:alert(1)>",
|
||||||
|
"`\"'><img src=xxx:x \\x09onerror=javascript:alert(1)>",
|
||||||
|
"`\"'><img src=xxx:x \\x0Conerror=javascript:alert(1)>",
|
||||||
|
"`\"'><img src=xxx:x \\x00onerror=javascript:alert(1)>",
|
||||||
|
"`\"'><img src=xxx:x \\x27onerror=javascript:alert(1)>",
|
||||||
|
"`\"'><img src=xxx:x \\x20onerror=javascript:alert(1)>",
|
||||||
|
"\"`'><script>\\x3Bjavascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\x0Djavascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xEF\\xBB\\xBFjavascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xE2\\x80\\x81javascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xE2\\x80\\x84javascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xE3\\x80\\x80javascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\x09javascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xE2\\x80\\x89javascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xE2\\x80\\x85javascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xE2\\x80\\x88javascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\x00javascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xE2\\x80\\xA8javascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xE2\\x80\\x8Ajavascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xE1\\x9A\\x80javascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\x0Cjavascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\x2Bjavascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xF0\\x90\\x96\\x9Ajavascript:alert(1)</script>",
|
||||||
|
"\"`'><script>-javascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\x0Ajavascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xE2\\x80\\xAFjavascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\x7Ejavascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xE2\\x80\\x87javascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xE2\\x81\\x9Fjavascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xE2\\x80\\xA9javascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xC2\\x85javascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xEF\\xBF\\xAEjavascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xE2\\x80\\x83javascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xE2\\x80\\x8Bjavascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xEF\\xBF\\xBEjavascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xE2\\x80\\x80javascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\x21javascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xE2\\x80\\x82javascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xE2\\x80\\x86javascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xE1\\xA0\\x8Ejavascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\x0Bjavascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\x20javascript:alert(1)</script>",
|
||||||
|
"\"`'><script>\\xC2\\xA0javascript:alert(1)</script>",
|
||||||
|
"<img \\x00src=x onerror=\"alert(1)\">",
|
||||||
|
"<img \\x47src=x onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img \\x11src=x onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img \\x12src=x onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img\\x47src=x onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img\\x10src=x onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img\\x13src=x onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img\\x32src=x onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img\\x47src=x onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img\\x11src=x onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img \\x47src=x onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img \\x34src=x onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img \\x39src=x onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img \\x00src=x onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img src\\x09=x onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img src\\x10=x onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img src\\x13=x onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img src\\x32=x onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img src\\x12=x onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img src\\x11=x onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img src\\x00=x onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img src\\x47=x onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img src=x\\x09onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img src=x\\x10onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img src=x\\x11onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img src=x\\x12onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img src=x\\x13onerror=\"javascript:alert(1)\">",
|
||||||
|
"<img[a][b][c]src[d]=x[e]onerror=[f]\"alert(1)\">",
|
||||||
|
"<img src=x onerror=\\x09\"javascript:alert(1)\">",
|
||||||
|
"<img src=x onerror=\\x10\"javascript:alert(1)\">",
|
||||||
|
"<img src=x onerror=\\x11\"javascript:alert(1)\">",
|
||||||
|
"<img src=x onerror=\\x12\"javascript:alert(1)\">",
|
||||||
|
"<img src=x onerror=\\x32\"javascript:alert(1)\">",
|
||||||
|
"<img src=x onerror=\\x00\"javascript:alert(1)\">",
|
||||||
|
"<a href=javascript:javascript:alert(1)>XXX</a>",
|
||||||
|
"<img src=\"x` `<script>javascript:alert(1)</script>\"` `>",
|
||||||
|
"<img src onerror /\" '\"= alt=javascript:alert(1)//\">",
|
||||||
|
"<title onpropertychange=javascript:alert(1)></title><title title=>",
|
||||||
|
"<a href=http://foo.bar/#x=`y></a><img alt=\"`><img src=x:x onerror=javascript:alert(1)></a>\">",
|
||||||
|
"<!--[if]><script>javascript:alert(1)</script -->",
|
||||||
|
"<!--[if<img src=x onerror=javascript:alert(1)//]> -->",
|
||||||
|
"<script src=\"/\\%(jscript)s\"></script>",
|
||||||
|
"<script src=\"\\\\%(jscript)s\"></script>",
|
||||||
|
"<IMG \"\"\"><SCRIPT>alert(\"XSS\")</SCRIPT>\">",
|
||||||
|
"<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>",
|
||||||
|
"<IMG SRC=# onmouseover=\"alert('xxs')\">",
|
||||||
|
"<IMG SRC= onmouseover=\"alert('xxs')\">",
|
||||||
|
"<IMG onmouseover=\"alert('xxs')\">",
|
||||||
|
"<IMG SRC=javascript:alert('XSS')>",
|
||||||
|
"<IMG SRC=javascript:alert('XSS')>",
|
||||||
|
"<IMG SRC=javascript:alert('XSS')>",
|
||||||
|
"<IMG SRC=\"jav ascript:alert('XSS');\">",
|
||||||
|
"<IMG SRC=\"jav	ascript:alert('XSS');\">",
|
||||||
|
"<IMG SRC=\"jav
ascript:alert('XSS');\">",
|
||||||
|
"<IMG SRC=\"jav
ascript:alert('XSS');\">",
|
||||||
|
"perl -e 'print \"<IMG SRC=java\\0script:alert(\\\"XSS\\\")>\";' > out",
|
||||||
|
"<IMG SRC=\"  javascript:alert('XSS');\">",
|
||||||
|
"<SCRIPT/XSS SRC=\"http://ha.ckers.org/xss.js\"></SCRIPT>",
|
||||||
|
"<BODY onload!#$%&()*~+-_.,:;?@[/|\\]^`=alert(\"XSS\")>",
|
||||||
|
"<SCRIPT/SRC=\"http://ha.ckers.org/xss.js\"></SCRIPT>",
|
||||||
|
"<<SCRIPT>alert(\"XSS\");//<</SCRIPT>",
|
||||||
|
"<SCRIPT SRC=http://ha.ckers.org/xss.js?< B >",
|
||||||
|
"<SCRIPT SRC=//ha.ckers.org/.j>",
|
||||||
|
"<IMG SRC=\"javascript:alert('XSS')\"",
|
||||||
|
"<iframe src=http://ha.ckers.org/scriptlet.html <",
|
||||||
|
"\\\";alert('XSS');//",
|
||||||
|
"<u oncopy=alert()> Copy me</u>",
|
||||||
|
"<i onwheel=alert(1)> Scroll over me </i>",
|
||||||
|
"<plaintext>",
|
||||||
|
"http://a/%%30%30",
|
||||||
|
"</textarea><script>alert(123)</script>",
|
||||||
|
"1;DROP TABLE users",
|
||||||
|
"1'; DROP TABLE users-- 1",
|
||||||
|
"' OR 1=1 -- 1",
|
||||||
|
"' OR '1'='1",
|
||||||
|
"'; EXEC sp_MSForEachTable 'DROP TABLE ?'; --",
|
||||||
|
" ",
|
||||||
|
"%",
|
||||||
|
"_",
|
||||||
|
"-",
|
||||||
|
"--",
|
||||||
|
"--version",
|
||||||
|
"--help",
|
||||||
|
"$USER",
|
||||||
|
"/dev/null; touch /tmp/blns.fail ; echo",
|
||||||
|
"`touch /tmp/blns.fail`",
|
||||||
|
"$(touch /tmp/blns.fail)",
|
||||||
|
"@{[system \"touch /tmp/blns.fail\"]}",
|
||||||
|
"eval(\"puts 'hello world'\")",
|
||||||
|
"System(\"ls -al /\")",
|
||||||
|
"`ls -al /`",
|
||||||
|
"Kernel.exec(\"ls -al /\")",
|
||||||
|
"Kernel.exit(1)",
|
||||||
|
"%x('ls -al /')",
|
||||||
|
"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><!DOCTYPE foo [ <!ELEMENT foo ANY ><!ENTITY xxe SYSTEM \"file:///etc/passwd\" >]><foo>&xxe;</foo>",
|
||||||
|
"$HOME",
|
||||||
|
"$ENV{'HOME'}",
|
||||||
|
"%d",
|
||||||
|
"%s%s%s%s%s",
|
||||||
|
"{0}",
|
||||||
|
"%*.*s",
|
||||||
|
"%@",
|
||||||
|
"%n",
|
||||||
|
"File:///",
|
||||||
|
"../../../../../../../../../../../etc/passwd%00",
|
||||||
|
"../../../../../../../../../../../etc/hosts",
|
||||||
|
"() { 0; }; touch /tmp/blns.shellshock1.fail;",
|
||||||
|
"() { _; } >_[$($())] { touch /tmp/blns.shellshock2.fail; }",
|
||||||
|
"<<< %s(un='%s') = %u",
|
||||||
|
"+++ATH0",
|
||||||
|
"CON",
|
||||||
|
"PRN",
|
||||||
|
"AUX",
|
||||||
|
"CLOCK$",
|
||||||
|
"NUL",
|
||||||
|
"A:",
|
||||||
|
"ZZ:",
|
||||||
|
"COM1",
|
||||||
|
"LPT1",
|
||||||
|
"LPT2",
|
||||||
|
"LPT3",
|
||||||
|
"COM2",
|
||||||
|
"COM3",
|
||||||
|
"COM4",
|
||||||
|
"DCC SEND STARTKEYLOGGER 0 0 0",
|
||||||
|
"Scunthorpe General Hospital",
|
||||||
|
"Penistone Community Church",
|
||||||
|
"Lightwater Country Park",
|
||||||
|
"Jimmy Clitheroe",
|
||||||
|
"Horniman Museum",
|
||||||
|
"shitake mushrooms",
|
||||||
|
"RomansInSussex.co.uk",
|
||||||
|
"http://www.cum.qc.ca/",
|
||||||
|
"Craig Cockburn, Software Specialist",
|
||||||
|
"Linda Callahan",
|
||||||
|
"Dr. Herman I. Libshitz",
|
||||||
|
"magna cum laude",
|
||||||
|
"Super Bowl XXX",
|
||||||
|
"medieval erection of parapets",
|
||||||
|
"evaluate",
|
||||||
|
"mocha",
|
||||||
|
"expression",
|
||||||
|
"Arsenal canal",
|
||||||
|
"classic",
|
||||||
|
"Tyson Gay",
|
||||||
|
"Dick Van Dyke",
|
||||||
|
"basement",
|
||||||
|
"If you're reading this, you've been in a coma for almost 20 years now. We're trying a new technique. We don't know where this message will end up in your dream, but we hope it works. Please wake up, we miss you.",
|
||||||
|
"Roses are \u001b[0;31mred\u001b[0m, violets are \u001b[0;34mblue. Hope you enjoy terminal hue",
|
||||||
|
"But now...\u001b[20Cfor my greatest trick...\u001b[8m",
|
||||||
|
"The quic\b\b\b\b\b\bk brown fo\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007x... [Beeeep]",
|
||||||
|
"Powerلُلُصّبُلُلصّبُررً ॣ ॣh ॣ ॣ冗",
|
||||||
|
"🏳0🌈️",
|
||||||
|
"జ్ఞా",
|
||||||
|
"گچپژ",
|
||||||
|
"{% print 'x' * 64 * 1024**3 %}",
|
||||||
|
"{{ \"\".__class__.__mro__[2].__subclasses__()[40](\"/etc/passwd\").read() }}"
|
||||||
|
]
|
|
@ -0,0 +1,245 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/rand"
|
||||||
|
"crypto/sha256"
|
||||||
|
"cwtch.im/cwtch/event"
|
||||||
|
"cwtch.im/cwtch/functionality/filesharing"
|
||||||
|
"cwtch.im/cwtch/model"
|
||||||
|
"cwtch.im/cwtch/model/attr"
|
||||||
|
"cwtch.im/cwtch/model/constants"
|
||||||
|
"cwtch.im/cwtch/protocol/connections"
|
||||||
|
"cwtch.im/cwtch/protocol/files"
|
||||||
|
"encoding/base64"
|
||||||
|
"encoding/hex"
|
||||||
|
"encoding/json"
|
||||||
|
"git.openprivacy.ca/openprivacy/log"
|
||||||
|
"git.openprivacy.ca/sarah/cwtchbot"
|
||||||
|
_ "github.com/mutecomm/go-sqlcipher/v4"
|
||||||
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
|
"math/big"
|
||||||
|
"os"
|
||||||
|
"os/user"
|
||||||
|
"path"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type BLNS struct {
|
||||||
|
inputs []string
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
user, _ := user.Current()
|
||||||
|
log.SetLevel(log.LevelInfo)
|
||||||
|
cwtchbot := bot.NewCwtchBot(path.Join(user.HomeDir, "/.fuzzbot/"), "fuzzbot")
|
||||||
|
|
||||||
|
cwtchbot.Launch()
|
||||||
|
|
||||||
|
blns := new(BLNS)
|
||||||
|
blns_file, err := ioutil.ReadFile("./cmd/fuzzbot/blns.json")
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("could not read BLNS file %v", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
var inputs []string
|
||||||
|
err = json.Unmarshal(blns_file, &inputs)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("could not decode BLNS file %v", err)
|
||||||
|
}
|
||||||
|
blns.inputs = inputs
|
||||||
|
|
||||||
|
input := make([]byte, 64)
|
||||||
|
_, err = rand.Read(input)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
cwtchbot.Peer.SetScopedZonedAttribute(attr.LocalScope, attr.ProfileZone, constants.Name, "fuzzbot")
|
||||||
|
|
||||||
|
// Will currently only work on Sarah's custom fork (testing custom profile images)
|
||||||
|
fh := new(filesharing.Functionality)
|
||||||
|
fileKey, _, err := fh.ShareFile("./fuzzbot.png", cwtchbot.Peer)
|
||||||
|
log.Errorf("sharing file: %v %v", fileKey, err)
|
||||||
|
const CustomProfileImageKey = "custom-profile-image"
|
||||||
|
cwtchbot.Peer.SetScopedZonedAttribute(attr.PublicScope, attr.ProfileZone, CustomProfileImageKey, fileKey)
|
||||||
|
|
||||||
|
// Create a group for this session:
|
||||||
|
// group, invite := cwtchbot.Peer.StartGroup("ur33edbwvbevcls5ue6jpkoubdptgkgl5bedzfyau2ibf5276lyp4uid")
|
||||||
|
|
||||||
|
// fmt.Printf("invite: %v", invite)
|
||||||
|
|
||||||
|
for {
|
||||||
|
log.Infof("Process.....\n")
|
||||||
|
message := cwtchbot.Queue.Next()
|
||||||
|
switch message.EventType {
|
||||||
|
case event.NewMessageFromPeer:
|
||||||
|
log.Infof("New Event: %v", message)
|
||||||
|
cwtchbot.Queue.Publish(event.NewEvent(event.PeerAcknowledgement, map[event.Field]string{event.EventID: message.EventID, event.RemotePeer: message.Data[event.RemotePeer]}))
|
||||||
|
msg := cwtchbot.UnpackMessage(message.Data[event.Data])
|
||||||
|
log.Infof("Message: %v", msg)
|
||||||
|
command := strings.Split(msg.Data, " ")
|
||||||
|
cid, _ := cwtchbot.Peer.FetchConversationInfo(message.Data[event.RemotePeer])
|
||||||
|
switch command[0] {
|
||||||
|
case "blns":
|
||||||
|
{
|
||||||
|
reply := string(cwtchbot.PackMessage(msg.Overlay, "Starting the Fuzzing Process..."))
|
||||||
|
cwtchbot.Peer.SendMessage(cid.ID, reply)
|
||||||
|
for _, input := range blns.inputs {
|
||||||
|
reply := string(cwtchbot.PackMessage(msg.Overlay, input))
|
||||||
|
cwtchbot.Peer.SendMessage(cid.ID, reply)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case "blns-mutate":
|
||||||
|
{
|
||||||
|
reply := string(cwtchbot.PackMessage(msg.Overlay, "Starting the BLNS Mutation Process..."))
|
||||||
|
cwtchbot.Peer.SendMessage(cid.ID, reply)
|
||||||
|
for _, input := range blns.inputs {
|
||||||
|
for i := 0; i < 5; i++ {
|
||||||
|
reply := string(cwtchbot.PackMessage(msg.Overlay, mutate(input)))
|
||||||
|
cwtchbot.Peer.SendMessage(cid.ID, reply)
|
||||||
|
time.Sleep(time.Millisecond * 50)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case "random-overlay":
|
||||||
|
{
|
||||||
|
reply := string(cwtchbot.PackMessage(msg.Overlay, "Starting the Fuzzing Process..."))
|
||||||
|
cwtchbot.Peer.SendMessage(cid.ID, reply)
|
||||||
|
for i := 0; i < 100; i++ {
|
||||||
|
input := make([]byte, 64)
|
||||||
|
_, err := rand.Read(input)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
reply := string(cwtchbot.PackMessage(int(input[0]), string(input)))
|
||||||
|
cwtchbot.Peer.SendMessage(cid.ID, reply)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case "random":
|
||||||
|
{
|
||||||
|
reply := string(cwtchbot.PackMessage(msg.Overlay, "Starting the Fuzzing Process..."))
|
||||||
|
cwtchbot.Peer.SendMessage(cid.ID, reply)
|
||||||
|
for i := 0; i < 100; i++ {
|
||||||
|
input := make([]byte, 64)
|
||||||
|
_, err := rand.Read(input)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
reply := string(input)
|
||||||
|
cwtchbot.Peer.SendMessage(cid.ID, reply)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case "quoteme":
|
||||||
|
hashSum := sha256.Sum256([]byte(message.Data[event.RemotePeer] + message.Data[event.Data]))
|
||||||
|
contentHash := base64.StdEncoding.EncodeToString(hashSum[:])
|
||||||
|
reply := string(cwtchbot.PackMessage(10, `{"quotedHash":"`+contentHash+`","body":"quoted for you"}`))
|
||||||
|
cwtchbot.Peer.SendMessage(cid.ID, reply)
|
||||||
|
case "quoteme-evil":
|
||||||
|
hashSum := sha256.Sum256([]byte(message.Data[event.RemotePeer] + message.Data[event.Data]))
|
||||||
|
contentHash := base64.StdEncoding.EncodeToString(hashSum[:])
|
||||||
|
reply := string(cwtchbot.PackMessage(10, `{"quotedHash":"`+contentHash+`","body":"quoted for you"}`))
|
||||||
|
cwtchbot.Peer.SendMessage(cid.ID, mutate(reply))
|
||||||
|
case "help":
|
||||||
|
reply := string(cwtchbot.PackMessage(msg.Overlay, "Fuzzing commands: [blns, invite-me]"))
|
||||||
|
cwtchbot.Peer.SendMessage(cid.ID, reply)
|
||||||
|
reply = string(cwtchbot.PackMessage(msg.Overlay, "Cwtch Testing Group Invite: [testgroup-invite]"))
|
||||||
|
cwtchbot.Peer.SendMessage(cid.ID, reply)
|
||||||
|
case "slow":
|
||||||
|
for i := 0; i < 10; i++ {
|
||||||
|
reply := string(cwtchbot.PackMessage(msg.Overlay, "Fuzzing commands: [blns, invite-me]"))
|
||||||
|
cwtchbot.Peer.SendMessage(cid.ID, mutate(reply))
|
||||||
|
time.Sleep(time.Second * 2)
|
||||||
|
}
|
||||||
|
case "sharefile":
|
||||||
|
for i := 0; i < 100; i++ {
|
||||||
|
manifest, _ := files.CreateManifest("./README.md")
|
||||||
|
|
||||||
|
var nonce [24]byte
|
||||||
|
if _, err := io.ReadFull(rand.Reader, nonce[:]); err != nil {
|
||||||
|
log.Errorf("Cannot read from random: %v\n", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
message := filesharing.OverlayMessage{
|
||||||
|
Name: path.Base(manifest.FileName),
|
||||||
|
Hash: hex.EncodeToString(manifest.RootHash),
|
||||||
|
Nonce: hex.EncodeToString(nonce[:]),
|
||||||
|
Size: manifest.FileSizeInBytes,
|
||||||
|
}
|
||||||
|
|
||||||
|
data, _ := json.Marshal(message)
|
||||||
|
|
||||||
|
wrapper := model.MessageWrapper{
|
||||||
|
Overlay: model.OverlayFileSharing,
|
||||||
|
Data: string(data),
|
||||||
|
}
|
||||||
|
wrapperJSON, _ := json.Marshal(wrapper)
|
||||||
|
cwtchbot.Peer.SendMessage(cid.ID, mutate(string(wrapperJSON)))
|
||||||
|
}
|
||||||
|
|
||||||
|
case "fuzz-peer-details":
|
||||||
|
break
|
||||||
|
case "testgroup-invite":
|
||||||
|
reply := string(cwtchbot.PackMessage(101, "tofubundle:server:eyJLZXlzIjp7ImJ1bGxldGluX2JvYXJkX29uaW9uIjoiaXNicjJ0NmJmbHVsMnp5aTZoanRudWV6YjJ4dmZyNDJzdnpqZzJxM2d5cWZnZzN3bW5yYmtrcWQiLCJwcml2YWN5X3Bhc3NfcHVibGljX2tleSI6Ik1JWC93L2VKeHQ4TTZMRW5TNnU1MStFQTVUNFVZY3VIZ3d6TElrYkhkeVk9IiwidG9rZW5fc2VydmljZV9vbmlvbiI6ImxpNTNxNmp1YWZ1NGF2cjdydHlsdG1zcTJ1anl5N3NjcnIzZnRua3JsaWNzeGV3Njd4cTY0c3lkIn0sIlNpZ25hdHVyZSI6IjIvTWw3T09HK2FYSFh2NTFkU2xJRHQxZjUxK1VUUmRTWnNFSHVxYlRqc3N4alZ5Qm1RUm1QU0xWSnZKUXBwS2cvZ1N0MzZrWVJKNXl1WWxEUDhzQ0NBPT0ifQ==||torv3eyJHcm91cElEIjoiOTQwYTc5OGI4MjY4YzI1Yjg0ZmMzYThlNWFhM2RiMzkiLCJHcm91cE5hbWUiOiJDd3RjaCBSZWxlYXNlIENhbmRpZGF0ZSBUZXN0ZXJzISIsIlNpZ25lZEdyb3VwSUQiOm51bGwsIlRpbWVzdGFtcCI6MCwiU2hhcmVkS2V5IjoiS3lmT2F6YzJuNUZyS1AzYzV5allheTZpVEN5TXhKQUhrT29YVWpSV3k4QT0iLCJTZXJ2ZXJIb3N0IjoiaXNicjJ0NmJmbHVsMnp5aTZoanRudWV6YjJ4dmZyNDJzdnpqZzJxM2d5cWZnZzN3bW5yYmtrcWQifQ=="))
|
||||||
|
cwtchbot.Peer.SendMessage(cid.ID, reply)
|
||||||
|
case "invite-me":
|
||||||
|
|
||||||
|
//num := 1
|
||||||
|
//if len(command) >= 2 {
|
||||||
|
// num, _ = strconv.Atoi(command[1])
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//for i := 0; i < num; i++ {
|
||||||
|
// randIndex, _ := rand.Int(rand.Reader, big.NewInt(int64(len(blns.inputs))))
|
||||||
|
// cwtchbot.Peer.SetGroupAttribute(group, "local.name", mutate(blns.inputs[randIndex.Uint64()]))
|
||||||
|
// group := cwtchbot.Peer.GetGroup(group)
|
||||||
|
// randIndex, _ = rand.Int(rand.Reader, big.NewInt(int64(len(blns.inputs))))
|
||||||
|
// group.GroupID = mutate(blns.inputs[randIndex.Uint64()])
|
||||||
|
// invite, _ := group.Invite()
|
||||||
|
// inviteMessage := cwtchbot.PackMessage(101, fmt.Sprintf("tofubundle:server:%s||%s", "eyJLZXlzIjp7ImJ1bGxldGluX2JvYXJkX29uaW9uIjoidXIzM2VkYnd2YmV2Y2xzNXVlNmpwa291YmRwdGdrZ2w1YmVkemZ5YXUyaWJmNTI3Nmx5cDR1aWQiLCJwcml2YWN5X3Bhc3NfcHVibGljX2tleSI6Iml2UnNSOUNpMGdqWHhjTk5LSVVqOTdwQU1rdndhV1Vta25WMnlOU3lWQ2c9IiwidG9rZW5fc2VydmljZV9vbmlvbiI6ImN4ang1c3Izb3AyaTZoanJqc2Z6amJ1ZWZoaXlxM3RlbDV1bHhuYmoyNnZ0dm9ycGhsZW1zbGlkIn0sIlNpZ25hdHVyZSI6IktDckxGZ3QxZU1KYnptOS9wUWZxY1F5a3lBVU5hV1FKQnlTRTdIdXc5N2NZTHlXYmR0SGxSVWx4VG1hK3JMMVcybTNQOTRrVEszclFnZi9XUjhiTkRRPT0ifQ==", invite))
|
||||||
|
// //cwtchbot.Peer.SendMessageToPeer(message.Data[event.RemotePeer], string(cwtchbot.PackMessage(msg.Overlay, fmt.Sprintf("tofubundle:server:%s||torv3%s", "eyJLZXlzIjp7ImJ1bGxldGluX2JvYXJkX29uaW9uIjoidXIzM2VkYnd2YmV2Y2xzNXVlNmpwa291YmRwdGdrZ2w1YmVkemZ5YXUyaWJmNTI3Nmx5cDR1aWQiLCJwcml2YWN5X3Bhc3NfcHVibGljX2tleSI6Iml2UnNSOUNpMGdqWHhjTk5LSVVqOTdwQU1rdndhV1Vta25WMnlOU3lWQ2c9IiwidG9rZW5fc2VydmljZV9vbmlvbiI6ImN4ang1c3Izb3AyaTZoanJqc2Z6amJ1ZWZoaXlxM3RlbDV1bHhuYmoyNnZ0dm9ycGhsZW1zbGlkIn0sIlNpZ25hdHVyZSI6IktDckxGZ3QxZU1KYnptOS9wUWZxY1F5a3lBVU5hV1FKQnlTRTdIdXc5N2NZTHlXYmR0SGxSVWx4VG1hK3JMMVcybTNQOTRrVEszclFnZi9XUjhiTkRRPT0ifQ==", base64.StdEncoding.EncodeToString(invite)))))
|
||||||
|
// cwtchbot.Peer.SendMessage(cid, string(inviteMessage))
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
case event.PeerStateChange:
|
||||||
|
state := message.Data[event.ConnectionState]
|
||||||
|
if state == connections.ConnectionStateName[connections.AUTHENTICATED] {
|
||||||
|
log.Infof("Auto approving stranger %v", message.Data[event.RemotePeer])
|
||||||
|
cwtchbot.Peer.NewContactConversation(message.Data[event.RemotePeer], model.DefaultP2PAccessControl(), true)
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
log.Infof("New Event: %v", message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// mutate is a very basic string mutator that simply garbles a random byte. We've got no success conditions
|
||||||
|
// to feed back to the mutator so we need to rely on a larger corpus, custom injection and simple mutations.
|
||||||
|
func mutate(input string) string {
|
||||||
|
if len(input) > 0 {
|
||||||
|
randByte, _ := rand.Int(rand.Reader, big.NewInt(int64(len(input)+1)))
|
||||||
|
randMask, _ := rand.Int(rand.Reader, big.NewInt(255))
|
||||||
|
// zero indexed...
|
||||||
|
index := randByte.Uint64()
|
||||||
|
mutatedInput := input
|
||||||
|
if index < uint64(len(input)) {
|
||||||
|
mutatedInput = input[:index]
|
||||||
|
mutatedInput = string(append([]byte(mutatedInput), input[index]^uint8(randMask.Uint64())))
|
||||||
|
if index+1 <= uint64(len(input)) {
|
||||||
|
mutatedInput = string(append([]byte(mutatedInput), input[index+1:]...))
|
||||||
|
}
|
||||||
|
return mutatedInput
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return input
|
||||||
|
}
|
||||||
|
|
||||||
|
func randomString() string {
|
||||||
|
input := make([]byte, 64)
|
||||||
|
_, err := rand.Read(input)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return string(input)
|
||||||
|
}
|
3
go.mod
3
go.mod
|
@ -4,14 +4,15 @@ go 1.19
|
||||||
|
|
||||||
require (
|
require (
|
||||||
cwtch.im/cwtch v0.20.3
|
cwtch.im/cwtch v0.20.3
|
||||||
|
git.openprivacy.ca/cwtch.im/tapir v0.6.0
|
||||||
git.openprivacy.ca/openprivacy/connectivity v1.8.6
|
git.openprivacy.ca/openprivacy/connectivity v1.8.6
|
||||||
git.openprivacy.ca/openprivacy/log v1.0.3
|
git.openprivacy.ca/openprivacy/log v1.0.3
|
||||||
|
github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de
|
||||||
github.com/mutecomm/go-sqlcipher/v4 v4.4.2
|
github.com/mutecomm/go-sqlcipher/v4 v4.4.2
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
filippo.io/edwards25519 v1.0.0 // indirect
|
filippo.io/edwards25519 v1.0.0 // indirect
|
||||||
git.openprivacy.ca/cwtch.im/tapir v0.6.0 // indirect
|
|
||||||
git.openprivacy.ca/openprivacy/bine v0.0.4 // indirect
|
git.openprivacy.ca/openprivacy/bine v0.0.4 // indirect
|
||||||
github.com/gtank/merlin v0.1.1 // indirect
|
github.com/gtank/merlin v0.1.1 // indirect
|
||||||
github.com/gtank/ristretto255 v0.1.3-0.20210930101514-6bb39798585c // indirect
|
github.com/gtank/ristretto255 v0.1.3-0.20210930101514-6bb39798585c // indirect
|
||||||
|
|
6
go.sum
6
go.sum
|
@ -10,6 +10,8 @@ git.openprivacy.ca/openprivacy/connectivity v1.8.6 h1:g74PyDGvpMZ3+K0dXy3mlTJh+e
|
||||||
git.openprivacy.ca/openprivacy/connectivity v1.8.6/go.mod h1:Hn1gpOx/bRZp5wvCtPQVJPXrfeUH0EGiG/Aoa0vjGLg=
|
git.openprivacy.ca/openprivacy/connectivity v1.8.6/go.mod h1:Hn1gpOx/bRZp5wvCtPQVJPXrfeUH0EGiG/Aoa0vjGLg=
|
||||||
git.openprivacy.ca/openprivacy/log v1.0.3 h1:E/PMm4LY+Q9s3aDpfySfEDq/vYQontlvNj/scrPaga0=
|
git.openprivacy.ca/openprivacy/log v1.0.3 h1:E/PMm4LY+Q9s3aDpfySfEDq/vYQontlvNj/scrPaga0=
|
||||||
git.openprivacy.ca/openprivacy/log v1.0.3/go.mod h1:gGYK8xHtndRLDymFtmjkG26GaMQNgyhioNS82m812Iw=
|
git.openprivacy.ca/openprivacy/log v1.0.3/go.mod h1:gGYK8xHtndRLDymFtmjkG26GaMQNgyhioNS82m812Iw=
|
||||||
|
github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de h1:FxWPpzIjnTlhPwqqXc4/vE0f7GvRjuAsbW+HOIe8KnA=
|
||||||
|
github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de/go.mod h1:DCaWoUhZrYW9p1lxo/cm8EmUOOzAPSEZNGF2DK1dJgw=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
@ -18,6 +20,7 @@ github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is=
|
||||||
github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s=
|
github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s=
|
||||||
github.com/gtank/ristretto255 v0.1.3-0.20210930101514-6bb39798585c h1:gkfmnY4Rlt3VINCo4uKdpvngiibQyoENVj5Q88sxXhE=
|
github.com/gtank/ristretto255 v0.1.3-0.20210930101514-6bb39798585c h1:gkfmnY4Rlt3VINCo4uKdpvngiibQyoENVj5Q88sxXhE=
|
||||||
github.com/gtank/ristretto255 v0.1.3-0.20210930101514-6bb39798585c/go.mod h1:tDPFhGdt3hJWqtKwx57i9baiB1Cj0yAg22VOPUqm5vY=
|
github.com/gtank/ristretto255 v0.1.3-0.20210930101514-6bb39798585c/go.mod h1:tDPFhGdt3hJWqtKwx57i9baiB1Cj0yAg22VOPUqm5vY=
|
||||||
|
github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
|
||||||
github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM=
|
github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM=
|
||||||
github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b h1:QrHweqAtyJ9EwCaGHBu1fghwxIPiopAHV06JlXrMHjk=
|
github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b h1:QrHweqAtyJ9EwCaGHBu1fghwxIPiopAHV06JlXrMHjk=
|
||||||
github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b/go.mod h1:xxLb2ip6sSUts3g1irPVHyk/DGslwQsNOo9I7smJfNU=
|
github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b/go.mod h1:xxLb2ip6sSUts3g1irPVHyk/DGslwQsNOo9I7smJfNU=
|
||||||
|
@ -27,10 +30,13 @@ github.com/onsi/ginkgo/v2 v2.1.4 h1:GNapqRSid3zijZ9H77KrgVG4/8KqiyRsxcSxe+7ApXY=
|
||||||
github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q=
|
github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||||
|
github.com/scylladb/termtables v0.0.0-20191203121021-c4c0b6d42ff4/go.mod h1:C1a7PQSMz9NShzorzCiG2fk9+xuCgLkPeCvMHYR2OWg=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||||
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU=
|
go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU=
|
||||||
go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4=
|
go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
|
|
15
quality.sh
15
quality.sh
|
@ -1,15 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
echo "Staticcheck..."
|
|
||||||
staticcheck ./...
|
|
||||||
|
|
||||||
echo "Formatting..."
|
|
||||||
gofmt -l -s -w .
|
|
||||||
|
|
||||||
# ineffassign (https://github.com/gordonklaus/ineffassign)
|
|
||||||
echo "Checking for ineffectual assignment of errors (unchecked errors...)"
|
|
||||||
ineffassign ./..
|
|
||||||
|
|
||||||
# misspell (https://github.com/client9/misspell/cmd/misspell)
|
|
||||||
echo "Checking for misspelled words..."
|
|
||||||
misspell . | grep -v "testing/" | grep -v "vendor/" | grep -v "go.sum" | grep -v ".idea"
|
|
Loading…
Reference in New Issue