Compare commits

..

No commits in common. "d55a97f0a5b37a2c545a149648f3ed4aa828f91c" and "c376262cffca30344361eacfae7438df21b67c21" have entirely different histories.

3 changed files with 1 additions and 90 deletions

View file

@ -2761,61 +2761,6 @@ func TestChannelUsernameAndSignatures(t *testing.T) {
} }
} }
func TestUpdateUsernameForcesPreHistoryVisible(t *testing.T) {
ctx := context.Background()
const ownerID int64 = 1001
service := NewService(memory.NewChannelStore())
created, err := service.CreateMegagroupFromCreateChat(ctx, ownerID, domain.CreateChannelRequest{
Title: "Private First",
MemberUserIDs: []int64{1002},
Date: 10,
})
if err != nil {
t.Fatalf("CreateMegagroupFromCreateChat: %v", err)
}
hidden, err := service.SetPreHistoryHidden(ctx, ownerID, created.Channel.ID, true)
if err != nil {
t.Fatalf("SetPreHistoryHidden: %v", err)
}
if !hidden.PreHistoryHidden {
t.Fatalf("hidden channel = %+v, want pre-history hidden", hidden)
}
// Assigning a public username must force pre-history back to visible.
public, err := service.UpdateUsername(ctx, ownerID, domain.UpdateChannelUsernameRequest{
ChannelID: created.Channel.ID,
Username: "private_first_pub",
})
if err != nil {
t.Fatalf("UpdateUsername: %v", err)
}
if public.PreHistoryHidden {
t.Fatalf("public channel = %+v, want pre-history visible after publish", public)
}
// Removing the username leaves the flag alone (still visible).
private, err := service.UpdateUsername(ctx, ownerID, domain.UpdateChannelUsernameRequest{
ChannelID: created.Channel.ID,
Username: "",
})
if err != nil {
t.Fatalf("UpdateUsername clear: %v", err)
}
if private.PreHistoryHidden {
t.Fatalf("re-privated channel = %+v, want pre-history still visible", private)
}
// ...and the creator can hide it again once private.
rehidden, err := service.SetPreHistoryHidden(ctx, ownerID, created.Channel.ID, true)
if err != nil {
t.Fatalf("SetPreHistoryHidden after re-privating: %v", err)
}
if !rehidden.PreHistoryHidden {
t.Fatalf("re-hidden channel = %+v, want pre-history hidden again", rehidden)
}
}
func TestListStoryPostableChannelsFiltersPostStoryRights(t *testing.T) { func TestListStoryPostableChannelsFiltersPostStoryRights(t *testing.T) {
ctx := context.Background() ctx := context.Background()
service := NewService(memory.NewChannelStore()) service := NewService(memory.NewChannelStore())

View file

@ -175,13 +175,6 @@ func (s *ChannelStore) UpdateUsername(ctx context.Context, req domain.UpdateChan
} }
prevUsername := channel.Username prevUsername := channel.Username
channel.Username = username channel.Username = username
// A public group cannot keep pre-history hidden: assigning a username forces
// "chat history for new members" back to visible (matches the official
// server). Removing the username leaves the flag untouched.
clearedPrehistory := username != "" && channel.PreHistoryHidden
if clearedPrehistory {
channel.PreHistoryHidden = false
}
s.channels[req.ChannelID] = channel s.channels[req.ChannelID] = channel
s.appendChannelAdminLogLocked(domain.ChannelAdminLogEvent{ s.appendChannelAdminLogLocked(domain.ChannelAdminLogEvent{
ChannelID: req.ChannelID, ChannelID: req.ChannelID,
@ -191,16 +184,6 @@ func (s *ChannelStore) UpdateUsername(ctx context.Context, req domain.UpdateChan
PrevString: prevUsername, PrevString: prevUsername,
NewString: username, NewString: username,
}) })
if clearedPrehistory {
s.appendChannelAdminLogLocked(domain.ChannelAdminLogEvent{
ChannelID: req.ChannelID,
UserID: req.UserID,
Date: int(time.Now().Unix()),
Type: domain.ChannelAdminLogTogglePreHistoryHidden,
PrevBool: true,
NewBool: false,
})
}
return channel, nil return channel, nil
} }

View file

@ -241,29 +241,12 @@ func (s *ChannelStore) UpdateUsername(ctx context.Context, req domain.UpdateChan
if err := replacePeerUsernameTx(ctx, tx, peerUsernameTypeChannel, req.ChannelID, username, usernameLower); err != nil { if err := replacePeerUsernameTx(ctx, tx, peerUsernameTypeChannel, req.ChannelID, username, usernameLower); err != nil {
return domain.Channel{}, err return domain.Channel{}, err
} }
// A public group cannot keep pre-history hidden: assigning a username forces if _, err := tx.Exec(ctx, `UPDATE channels SET username = NULLIF($2,''), updated_at = now() WHERE id = $1`, req.ChannelID, username); err != nil {
// "chat history for new members" back to visible (matches the official
// server). Removing the username leaves the flag untouched, so the creator
// can hide history again once the group is private.
if _, err := tx.Exec(ctx, `UPDATE channels SET username = NULLIF($2,''), pre_history_hidden = (pre_history_hidden AND $2 = ''), updated_at = now() WHERE id = $1`, req.ChannelID, username); err != nil {
return domain.Channel{}, fmt.Errorf("update channel username: %w", err) return domain.Channel{}, fmt.Errorf("update channel username: %w", err)
} }
if err := markUserChannelMemberIndexPublicTx(ctx, tx, req.ChannelID, username != ""); err != nil { if err := markUserChannelMemberIndexPublicTx(ctx, tx, req.ChannelID, username != ""); err != nil {
return domain.Channel{}, err return domain.Channel{}, err
} }
if username != "" && channel.PreHistoryHidden {
if err := s.insertChannelAdminLogTx(ctx, tx, domain.ChannelAdminLogEvent{
ChannelID: req.ChannelID,
UserID: req.UserID,
Date: nowUnix(),
Type: domain.ChannelAdminLogTogglePreHistoryHidden,
PrevBool: true,
NewBool: false,
}); err != nil {
return domain.Channel{}, err
}
channel.PreHistoryHidden = false
}
prevUsername := channel.Username prevUsername := channel.Username
channel.Username = username channel.Username = username
if err := s.insertChannelAdminLogTx(ctx, tx, domain.ChannelAdminLogEvent{ if err := s.insertChannelAdminLogTx(ctx, tx, domain.ChannelAdminLogEvent{