mw issueshttps://projects.sucs.org/milliways/mw/-/issues2019-05-07T10:24:48Zhttps://projects.sucs.org/milliways/mw/-/issues/43Include some form of identifier in replayed messages json2019-05-07T10:24:48ZImran Hussainimranh@sucs.orgInclude some form of identifier in replayed messages jsonSomething like:
Old
```
{
"type":"talker_join",
"data":{
"unixtime":1557219295,
"quiet":false,
"user":"imranh",
"method":"normal",
"channel":100
}
}
```
New
```
{
"type":"talker_join",
"data":{
"unixti...Something like:
Old
```
{
"type":"talker_join",
"data":{
"unixtime":1557219295,
"quiet":false,
"user":"imranh",
"method":"normal",
"channel":100
}
}
```
New
```
{
"type":"talker_join",
"data":{
"unixtime":1557219295,
"quiet":false,
"user":"imranh",
"method":"normal",
"channel":100
},
"replay": true
}
```https://projects.sucs.org/milliways/mw/-/issues/42Talker join messages don't have the serial2019-05-07T10:20:44ZImran Hussainimranh@sucs.orgTalker join messages don't have the serial{"type":"talker_join","data":{"unixtime":1557219295,"quiet":false,"user":"imranh","method":"normal","channel":0}}{"type":"talker_join","data":{"unixtime":1557219295,"quiet":false,"user":"imranh","method":"normal","channel":0}}https://projects.sucs.org/milliways/mw/-/issues/40zod and mrod messages send (receive?) multiple times2019-04-01T15:03:13ZImran Hussainimranh@sucs.orgzod and mrod messages send (receive?) multiple timesWhen doing it to yourself or someone else you get 3 of the exact same (serial, timestamp, and test).
When someone else does it to you, you get 2 of the exact same (serial, timestamp, and test).When doing it to yourself or someone else you get 3 of the exact same (serial, timestamp, and test).
When someone else does it to you, you get 2 of the exact same (serial, timestamp, and test).https://projects.sucs.org/milliways/mw/-/issues/39zod and mrod no to_name2019-04-01T14:57:03ZImran Hussainimranh@sucs.orgzod and mrod no to_nameIf gags have them then I feel these should have them too.
```{"type":"message_received","data":{"unixtime":1554129572,"serial":139163,"ipc_type":"IPC_EVENT","from_name":"imranh","type":"zod","text":"imranh has just sent the Zebedee of D...If gags have them then I feel these should have them too.
```{"type":"message_received","data":{"unixtime":1554129572,"serial":139163,"ipc_type":"IPC_EVENT","from_name":"imranh","type":"zod","text":"imranh has just sent the Zebedee of Death to imranh2"}}```
```{"type":"message_received","data":{"unixtime":1554129665,"serial":139169,"ipc_type":"IPC_EVENT","from_name":"imranh","type":"mrod","text":"imranh has just dropped the Magic Roundabout of Death on imranh2"}}```https://projects.sucs.org/milliways/mw/-/issues/38Extend chat colour codes system2019-03-29T13:17:19ZAlice MitchellExtend chat colour codes systemOkay, so the old 8 colour ANSI scheme is too darn restrictive when it comes to colourising chat output, so time to extend it to at least support ANSI-256 https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit
Propose adding an encoding le...Okay, so the old 8 colour ANSI scheme is too darn restrictive when it comes to colourising chat output, so time to extend it to at least support ANSI-256 https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit
Propose adding an encoding letter to the start of colour escape sequences, the letter will define which colour scheme is in use and exactly how many characters long it will be. It will thus always be safe to read at least one character after the escape ^[ character and determine length from that.
Proposed encodings:
* [0-9] - two digit decimal number from system colour chart
* [kKrRgGyYbBmMcCwWn-] - two character 8 colour scheme
* x - followed by 2 hex digits of 256-colour foreground colour
* X - followed by 4 hex digits of 256-colour fore & background colours
Possible future extra extensions
* t - followed by 6 hex digits of TrueColor RGB foreground colour
* T - followed by 12 hex digits of TrueColor RGB fore & background coloursAlice MitchellAlice Mitchellhttps://projects.sucs.org/milliways/mw/-/issues/37Update mwjs manpage with mwjs api event info2019-02-17T20:33:29ZImran Hussainimranh@sucs.orgUpdate mwjs manpage with mwjs api event infoDocument the different event types, what they consist of, data structs etc...Document the different event types, what they consist of, data structs etc...Imran Hussainimranh@sucs.orgImran Hussainimranh@sucs.orghttps://projects.sucs.org/milliways/mw/-/issues/35Personal gag message to_name2019-02-17T18:58:49ZImran Hussainimranh@sucs.orgPersonal gag message to_name```
{"type":"message_received","data":{"unixtime":0,"serial":0,"ipc_type":"IPC_EVENT","from_name":"imranh","type":"gag","text":"You now speck Onglish leek a fronchman..."}}
```
Can the to_name be populated so this kind of gag message can...```
{"type":"message_received","data":{"unixtime":0,"serial":0,"ipc_type":"IPC_EVENT","from_name":"imranh","type":"gag","text":"You now speck Onglish leek a fronchman..."}}
```
Can the to_name be populated so this kind of gag message can be differentiated from
```
{"type":"message_received","data":{"unixtime":1550420642,"serial":127780,"ipc_type":"IPC_EVENT","from_name":"imranh","type":"gag","text":"imranh has just gagged imranh with Frenchify"}}
```https://projects.sucs.org/milliways/mw/-/issues/32Zany logon/logoff announcements2018-11-12T21:30:52ZAndrew PriceZany logon/logoff announcementsCurrently we have
- SYSTEM: welshbyte has just entered the board.
But that could have a bit of fun injected into it by generating random (welcoming!) entry announcements, e.g.
- SYSTEM: You rolled two sixes! welshbyte has just entered...Currently we have
- SYSTEM: welshbyte has just entered the board.
But that could have a bit of fun injected into it by generating random (welcoming!) entry announcements, e.g.
- SYSTEM: You rolled two sixes! welshbyte has just entered the board.
- SYSTEM: welshbyte has just pirouetted onto Milliways - how graceful!
- SYSTEM: The prophesy has come true, welshbyte has arrived.
(Inspired by Discord)https://projects.sucs.org/milliways/mw/-/issues/28New user-friendly version of '.replay since'2017-10-12T10:30:50ZAndrew PriceNew user-friendly version of '.replay since'`.replay since` takes a Unix epoch timestamp which isn't very intuitive to use when exposed directly to users.
The client should accept a new `.replay ...` invocation that takes human-readable timestamps, convert them to Unix timestamps...`.replay since` takes a Unix epoch timestamp which isn't very intuitive to use when exposed directly to users.
The client should accept a new `.replay ...` invocation that takes human-readable timestamps, convert them to Unix timestamps and then send the appropriate `since` command to the server.
For some inspiration, see the Parsing Timestamps section of [systemd.time(7)](https://www.freedesktop.org/software/systemd/man/systemd.time.html#Parsing%20Timestamps) and the corresponding implementation.https://projects.sucs.org/milliways/mw/-/issues/25Can't signup to an account using WebMW2017-09-26T08:02:56ZImran Hussainimranh@sucs.orgCan't signup to an account using WebMWSteps to reproduce:
1. go to sucs.org/mw
2. enter a username that doesn't exist/isn't registered and then enter a random password
3. enter desired password
4. press create account
5. receive error "username and password must both be not...Steps to reproduce:
1. go to sucs.org/mw
2. enter a username that doesn't exist/isn't registered and then enter a random password
3. enter desired password
4. press create account
5. receive error "username and password must both be not empty"https://projects.sucs.org/milliways/mw/-/issues/23Runaway mw process2018-02-18T11:26:32ZAndrew PriceRunaway mw processI had to kill an mw process that went loopy. Took a backtrace before I did:
#0 alarm_at (when=when@entry=0x7ffc84a641e0, what=what@entry=0x7f346c1a3a98, how=how@entry=0x7f346bbd4b00 <time_out>) at alarm.c:130
#1 0x00007f346bbc...I had to kill an mw process that went loopy. Took a backtrace before I did:
#0 alarm_at (when=when@entry=0x7ffc84a641e0, what=what@entry=0x7f346c1a3a98, how=how@entry=0x7f346bbd4b00 <time_out>) at alarm.c:130
#1 0x00007f346bbc332b in alarm_after (secs=secs@entry=86520, usecs=usecs@entry=0, what=what@entry=0x7f346c1a3a98, how=how@entry=0x7f346bbd4b00 <time_out>) at alarm.c:110
#2 0x00007f346bbd3c4a in reset_timeout (secs=86400) at main.c:1326
#3 reset_timeout (secs=86400) at main.c:1318
#4 0x00007f346bbc0ba5 in main (argc=1, argv=0x7ffc84a644c8) at main.c:764
Interestingly it didn't have a parent process so an unclean logout might be the trigger when the planets are aligned correctly.https://projects.sucs.org/milliways/mw/-/issues/21Migrate all user status editing to the server2017-09-26T08:02:56ZJustin MitchellMigrate all user status editing to the serverFurther progress in the client-server migration path.
Remove all updates to the users status in userdb to the server, basically to eliminate any need to connect to userdb from the client at all.
Further progress in the client-server migration path.
Remove all updates to the users status in userdb to the server, basically to eliminate any need to connect to userdb from the client at all.
https://projects.sucs.org/milliways/mw/-/issues/20Migrate all channel handling to server2017-09-26T08:02:56ZJustin MitchellMigrate all channel handling to serverNext step in the client-server migration, remove all direct references to rooms/channels that are currently made by the client.
- [ ] Have the server maintain the list of channels a user is in, divorce this from the userdb if necessar...Next step in the client-server migration, remove all direct references to rooms/channels that are currently made by the client.
- [ ] Have the server maintain the list of channels a user is in, divorce this from the userdb if necessary.
- [ ] Move the setting of global command to the server
- [ ] Move the sticky command to the server
- [ ] Move all of the joined/left talker & channel messages into the server.
Justin MitchellJustin Mitchellhttps://projects.sucs.org/milliways/mw/-/issues/19screen_w and screen_h in talker.c don't work well if TERM is NULL2017-09-26T08:02:56ZChris Piperscreen_w and screen_h in talker.c don't work well if TERM is NULLI've said this before but I though I should open it as a proper issue. There doesn't seem to be any immediate problems other than causing some issues for users who are doing weird things in their shells.
In init_termcap in main.c if...I've said this before but I though I should open it as a proper issue. There doesn't seem to be any immediate problems other than causing some issues for users who are doing weird things in their shells.
In init_termcap in main.c if getenv("TERM") returns NULL then g_boTermCap is set to 0 (as expected).
In screen_w (and screen_h) in talker.c if g_boTermCap is 0 the first thing that happens is it sets szCols to getenv("COLUMNS") then run atoi on the result (if it's not null). As gcc treats atoi as a base 10 strol the output is now a signed integer which can be returned.
The first problem lies in the line
```c
szCols = getenv("COLUMNS");
```
COLUMNS is a shell variable not an environmental variable. You can see it's not in the output if you run env on silver. In fact the only time that getenv("COLUMNS") won't return null for the user is if the user exported and environmental variable COLUMNS before running mw. This method will not work for getting terminal size.
The second problem is that there is an assumption that the variable the user submitted is realistic value. Most strings will get cleaned by the strol based implementation of atoi. However negative integers are still valid and there is nothing to check that the result before it it returned. This isn't documented and might cause problems in other places of mw that assume screen_w and screen_h will always greater than 0.
e.g
uri_list_display in uri.c contains the following:
```c
width = screen_w();
if(width > MAXTEXTLENGTH - 1) {
width = MAXTEXTLENGTH - 1;
}
url_line[width]='\0';
```
The assumption that screen_w returns a positive result here is used. It is only checked that the result is not greater than MAXTEXTLENGTH, it is not checked to make sure that it is greater than 0. The element of url_line at index width is then accessed.
Testing:
In practice some if the mw code I haven't found tries to reset some shell variables.
A user attempting to exploit this in any way would have to do something like
export TERM=NULL
export COLUMNS="-1000"
readonly COLUMNS="-1000"
https://projects.sucs.org/milliways/mw/-/issues/18Print some tips for new users2017-09-26T08:02:56ZAndrew PricePrint some tips for new usersmw can be confusing if you've never used it before:
> CHANGE: Created user newuser: John Doe <newuser@example.com>
> CHANGE: Auto-registered newuser
> SYSTEM: newuser has just entered the board.
> newuser has just joined talk...mw can be confusing if you've never used it before:
> CHANGE: Created user newuser: John Doe <newuser@example.com>
> CHANGE: Auto-registered newuser
> SYSTEM: newuser has just entered the board.
> newuser has just joined talker room 0
> newuser: who
> newuser: /who
> newuser: ?
> newuser: exit
> SYSTEM: newuser's connection has just dropped.
so it should print some brief getting started tips for new users. How to quit, how to start chatting and how to find more help should be the main points.https://projects.sucs.org/milliways/mw/-/issues/17userProfile not properly populated - leads to silent failure of webmw2017-09-26T08:02:56ZThomas LakeuserProfile not properly populated - leads to silent failure of webmwOccasionally, the `userProfile` object in webmw is left undefined when a user logs in. This causes an exception in say.js, which then prevents webmw from working. No error is displayed to the user, but a symptom is the failure of the ini...Occasionally, the `userProfile` object in webmw is left undefined when a user logs in. This causes an exception in say.js, which then prevents webmw from working. No error is displayed to the user, but a symptom is the failure of the initial `$foo has just joined web talker room 0` message to appear.
Presumably this is caused by mwpoll not ensuring it has a valid wholist to send in response to the initial whoami request from webmw.https://projects.sucs.org/milliways/mw/-/issues/5.who shows superuser view for non superusers2017-09-26T08:02:56ZLaurence Sebastian Boweselbows@sucs.org.who shows superuser view for non superusersBasically the title
to reproduce:
1. Be not a superuser (+s status)
2. type .who and click enter
3. ???
4. profitBasically the title
to reproduce:
1. Be not a superuser (+s status)
2. type .who and click enter
3. ???
4. profithttps://projects.sucs.org/milliways/mw/-/issues/2Update webclient2017-09-26T08:02:56ZJustin MitchellUpdate webclientThere html/javascript part of webclient needs bringing up to date with the new message types (ie IPC_EVENT) and formatting. Each message now includes a time it was originally sent ('when' field) and a sequence number ('serial' field). ...There html/javascript part of webclient needs bringing up to date with the new message types (ie IPC_EVENT) and formatting. Each message now includes a time it was originally sent ('when' field) and a sequence number ('serial' field). these can be in the past if you use the IPC_REPLAY command.