about summary refs log tree commit diff stats
path: root/CHANGELOG
blob: 4640da5c6cf4193d5259e98a6b56643cbb7b0e4f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
0.5.0
=====

- Build against libmesode if available
- SSL certificate verification (requires libmesode) (/tls)
- Allow auto extended away (/autoaway)
- Include last acitvity in initial presence (xep-0256) (/lastactivity)
- Last Activity (xep-0012) (/lastactivity)
- Ability to run command scripts (/script)
- Account startscript property to execute a command script on connect (/account)
- Export roster to CSV file (/export)
- User specified text triggers for chat room notifications (/notify)
- Per chat room notification options (/notify)
- More roster panel display options (/roster)
- Option to include active chat rooms in roster panel (/roster)
- Time format preferences per window type (/time)
- Edit, prepend and append to room subject (/subject)
- Autoping timeout preference (/autoping)
- Window navigation by window title (/win)
- Configure level of room message notifications in console window (/console)
- Check ~/.config/profanity/inputrc for readline settings
- Custom readline functions for navigation key bindings

0.4.7
=====

- GNU Readline
- OpenPGP support
- Message Carbons (xep-0280)
- Message Delivery Receipts (xep-0184)
- MUC Mediated Invitation support
- Configurable time formatting
- Option to show JIDs in roster
- Option to hide empty groups in roster
- Generate UUID for unnamed new MUC rooms
- Themable UI preference to indicate OTR and PGP messages
- Reformatted help
- devel: Added functional tests using libexpect and libstabber

0.4.6
=====

- 16 colour support (/theme colours)
- UI preferences included in themes
- /wrap - Word wrapping
- /time - Show/hide time in main window, and configure precision
- /roster - Show/hide and customise roster panel
- /roster and /occupants panel size settings (% of screen width)
- /account default - Set default account for /connect
- /account remove
- /presence - Show/hide contact presence in titlebar 
- /resource - Override resource during chat, resource display settings
- Improved chat session handling <http://xmpp.org/rfcs/rfc6121.html#message-chat>
- Lower CPU usage with dynamic input blocking timeout
- Keychain/keyring integration using account eval_password property
- Disable term window title by default
- Fixed remote code execution bug on OSX when desktop notifications configured to show message text
ass="o">:= base[0] if _, ok := r.Header["X-Forwarded-For"]; ok { proxied := r.Header["X-Forwarded-For"] base = strings.Split(proxied[len(proxied)-1], ":") uip = base[0] } xRealIP := http.CanonicalHeaderKey("X-Real-IP") if _, ok := r.Header[xRealIP]; ok { proxied := r.Header[xRealIP] base = strings.Split(proxied[len(proxied)-1], ":") uip = base[0] } return context.WithValue(ctx, ctxKey, uip) } // Retrieves a request's IP address from the request's context func getIPFromCtx(ctx context.Context) net.IP { uip, ok := ctx.Value(ctxKey).(string) if !ok { log.Printf("Couldn't retrieve IP from request\n") } return net.ParseIP(uip) } // Shim function to modify/pass context value to a handler func ipMiddleware(hop http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { ctx := newCtxUserIP(r.Context(), r) hop.ServeHTTP(w, r.WithContext(ctx)) }) } func log200(r *http.Request) { useragent := r.Header["User-Agent"] uip := getIPFromCtx(r.Context()) log.Printf("*** %v :: 200 :: %v %v :: %v\n", uip, r.Method, r.URL, useragent) } func log400(w http.ResponseWriter, r *http.Request, err string) { uip := getIPFromCtx(r.Context()) log.Printf("*** %v :: 400 :: %v %v :: %v\n", uip, r.Method, r.URL, err) http.Error(w, "400 Bad Request: "+err, http.StatusBadRequest) } func log404(w http.ResponseWriter, r *http.Request, err error) { useragent := r.Header["User-Agent"] uip := getIPFromCtx(r.Context()) log.Printf("*** %v :: 404 :: %v %v :: %v :: %v\n", uip, r.Method, r.URL, useragent, err.Error()) http.Error(w, err.Error(), http.StatusNotFound) } func log500(w http.ResponseWriter, r *http.Request, err error) { useragent := r.Header["User-Agent"] uip := getIPFromCtx(r.Context()) log.Printf("*** %v :: 500 :: %v %v :: %v :: %v\n", uip, r.Method, r.URL, useragent, err.Error()) http.Error(w, err.Error(), http.StatusInternalServerError) }