v0.4.0 72f8f2e

session.pb.go RawHistoryFolder

1// SPDX-License-Identifier: MIT
2
3// Code generated by protoc-gen-go. DO NOT EDIT.
4// versions:
5// 	protoc-gen-go v1.36.12
6// 	protoc        (unknown)
7// source: ermite/session.proto
8
9package ermite
10
11import (
12	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
13	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
14	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
15	reflect "reflect"
16	sync "sync"
17	unsafe "unsafe"
18)
19
20const (
21	// Verify that this generated code is sufficiently up-to-date.
22	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
23	// Verify that runtime/protoimpl is sufficiently up-to-date.
24	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
25)
26
27// CreateLoginLinkRequest is empty.
28type CreateLoginLinkRequest struct {
29	state         protoimpl.MessageState `protogen:"open.v1"`
30	unknownFields protoimpl.UnknownFields
31	sizeCache     protoimpl.SizeCache
32}
33
34func (x *CreateLoginLinkRequest) Reset() {
35	*x = CreateLoginLinkRequest{}
36	mi := &file_ermite_session_proto_msgTypes[0]
37	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
38	ms.StoreMessageInfo(mi)
39}
40
41func (x *CreateLoginLinkRequest) String() string {
42	return protoimpl.X.MessageStringOf(x)
43}
44
45func (*CreateLoginLinkRequest) ProtoMessage() {}
46
47func (x *CreateLoginLinkRequest) ProtoReflect() protoreflect.Message {
48	mi := &file_ermite_session_proto_msgTypes[0]
49	if x != nil {
50		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
51		if ms.LoadMessageInfo() == nil {
52			ms.StoreMessageInfo(mi)
53		}
54		return ms
55	}
56	return mi.MessageOf(x)
57}
58
59// Deprecated: Use CreateLoginLinkRequest.ProtoReflect.Descriptor instead.
60func (*CreateLoginLinkRequest) Descriptor() ([]byte, []int) {
61	return file_ermite_session_proto_rawDescGZIP(), []int{0}
62}
63
64// CreateLoginLinkResponse holds the link.
65type CreateLoginLinkResponse struct {
66	state protoimpl.MessageState `protogen:"open.v1"`
67	// Url is the absolute link to open in a browser, on the public URL of the
68	// server. It holds a secret: clients print it to the terminal and nowhere
69	// else, and never log it.
70	Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
71	// ExpiresAt is when the link stops working if it is not used.
72	ExpiresAt     *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=expires_at,json=expiresAt,proto3" json:"expires_at,omitempty"`
73	unknownFields protoimpl.UnknownFields
74	sizeCache     protoimpl.SizeCache
75}
76
77func (x *CreateLoginLinkResponse) Reset() {
78	*x = CreateLoginLinkResponse{}
79	mi := &file_ermite_session_proto_msgTypes[1]
80	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
81	ms.StoreMessageInfo(mi)
82}
83
84func (x *CreateLoginLinkResponse) String() string {
85	return protoimpl.X.MessageStringOf(x)
86}
87
88func (*CreateLoginLinkResponse) ProtoMessage() {}
89
90func (x *CreateLoginLinkResponse) ProtoReflect() protoreflect.Message {
91	mi := &file_ermite_session_proto_msgTypes[1]
92	if x != nil {
93		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
94		if ms.LoadMessageInfo() == nil {
95			ms.StoreMessageInfo(mi)
96		}
97		return ms
98	}
99	return mi.MessageOf(x)
100}
101
102// Deprecated: Use CreateLoginLinkResponse.ProtoReflect.Descriptor instead.
103func (*CreateLoginLinkResponse) Descriptor() ([]byte, []int) {
104	return file_ermite_session_proto_rawDescGZIP(), []int{1}
105}
106
107func (x *CreateLoginLinkResponse) GetUrl() string {
108	if x != nil {
109		return x.Url
110	}
111	return ""
112}
113
114func (x *CreateLoginLinkResponse) GetExpiresAt() *timestamppb.Timestamp {
115	if x != nil {
116		return x.ExpiresAt
117	}
118	return nil
119}
120
121// SignOutEverywhereRequest is empty.
122type SignOutEverywhereRequest struct {
123	state         protoimpl.MessageState `protogen:"open.v1"`
124	unknownFields protoimpl.UnknownFields
125	sizeCache     protoimpl.SizeCache
126}
127
128func (x *SignOutEverywhereRequest) Reset() {
129	*x = SignOutEverywhereRequest{}
130	mi := &file_ermite_session_proto_msgTypes[2]
131	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
132	ms.StoreMessageInfo(mi)
133}
134
135func (x *SignOutEverywhereRequest) String() string {
136	return protoimpl.X.MessageStringOf(x)
137}
138
139func (*SignOutEverywhereRequest) ProtoMessage() {}
140
141func (x *SignOutEverywhereRequest) ProtoReflect() protoreflect.Message {
142	mi := &file_ermite_session_proto_msgTypes[2]
143	if x != nil {
144		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
145		if ms.LoadMessageInfo() == nil {
146			ms.StoreMessageInfo(mi)
147		}
148		return ms
149	}
150	return mi.MessageOf(x)
151}
152
153// Deprecated: Use SignOutEverywhereRequest.ProtoReflect.Descriptor instead.
154func (*SignOutEverywhereRequest) Descriptor() ([]byte, []int) {
155	return file_ermite_session_proto_rawDescGZIP(), []int{2}
156}
157
158// SignOutEverywhereResponse is empty.
159type SignOutEverywhereResponse struct {
160	state         protoimpl.MessageState `protogen:"open.v1"`
161	unknownFields protoimpl.UnknownFields
162	sizeCache     protoimpl.SizeCache
163}
164
165func (x *SignOutEverywhereResponse) Reset() {
166	*x = SignOutEverywhereResponse{}
167	mi := &file_ermite_session_proto_msgTypes[3]
168	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
169	ms.StoreMessageInfo(mi)
170}
171
172func (x *SignOutEverywhereResponse) String() string {
173	return protoimpl.X.MessageStringOf(x)
174}
175
176func (*SignOutEverywhereResponse) ProtoMessage() {}
177
178func (x *SignOutEverywhereResponse) ProtoReflect() protoreflect.Message {
179	mi := &file_ermite_session_proto_msgTypes[3]
180	if x != nil {
181		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
182		if ms.LoadMessageInfo() == nil {
183			ms.StoreMessageInfo(mi)
184		}
185		return ms
186	}
187	return mi.MessageOf(x)
188}
189
190// Deprecated: Use SignOutEverywhereResponse.ProtoReflect.Descriptor instead.
191func (*SignOutEverywhereResponse) Descriptor() ([]byte, []int) {
192	return file_ermite_session_proto_rawDescGZIP(), []int{3}
193}
194
195// Passkey is a WebAuthn credential that can sign the owner in. It never
196// carries key material.
197type Passkey struct {
198	state protoimpl.MessageState `protogen:"open.v1"`
199	// Id is the credential id, base64url without padding. Pass it to
200	// RemovePasskey.
201	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
202	// Name is the label the owner gave the passkey when registering it.
203	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
204	// CreatedAt is when the passkey was registered.
205	CreatedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
206	// LastUsedAt is when the passkey last signed the owner in. It is unset
207	// when the passkey was never used.
208	LastUsedAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=last_used_at,json=lastUsedAt,proto3" json:"last_used_at,omitempty"`
209	// Synced is true when the authenticator reports the credential as backed
210	// up (the backup state flag), for example a passkey synced by a platform or
211	// a password manager.
212	Synced        bool `protobuf:"varint,5,opt,name=synced,proto3" json:"synced,omitempty"`
213	unknownFields protoimpl.UnknownFields
214	sizeCache     protoimpl.SizeCache
215}
216
217func (x *Passkey) Reset() {
218	*x = Passkey{}
219	mi := &file_ermite_session_proto_msgTypes[4]
220	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
221	ms.StoreMessageInfo(mi)
222}
223
224func (x *Passkey) String() string {
225	return protoimpl.X.MessageStringOf(x)
226}
227
228func (*Passkey) ProtoMessage() {}
229
230func (x *Passkey) ProtoReflect() protoreflect.Message {
231	mi := &file_ermite_session_proto_msgTypes[4]
232	if x != nil {
233		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
234		if ms.LoadMessageInfo() == nil {
235			ms.StoreMessageInfo(mi)
236		}
237		return ms
238	}
239	return mi.MessageOf(x)
240}
241
242// Deprecated: Use Passkey.ProtoReflect.Descriptor instead.
243func (*Passkey) Descriptor() ([]byte, []int) {
244	return file_ermite_session_proto_rawDescGZIP(), []int{4}
245}
246
247func (x *Passkey) GetId() string {
248	if x != nil {
249		return x.Id
250	}
251	return ""
252}
253
254func (x *Passkey) GetName() string {
255	if x != nil {
256		return x.Name
257	}
258	return ""
259}
260
261func (x *Passkey) GetCreatedAt() *timestamppb.Timestamp {
262	if x != nil {
263		return x.CreatedAt
264	}
265	return nil
266}
267
268func (x *Passkey) GetLastUsedAt() *timestamppb.Timestamp {
269	if x != nil {
270		return x.LastUsedAt
271	}
272	return nil
273}
274
275func (x *Passkey) GetSynced() bool {
276	if x != nil {
277		return x.Synced
278	}
279	return false
280}
281
282// ListPasskeysRequest is empty.
283type ListPasskeysRequest struct {
284	state         protoimpl.MessageState `protogen:"open.v1"`
285	unknownFields protoimpl.UnknownFields
286	sizeCache     protoimpl.SizeCache
287}
288
289func (x *ListPasskeysRequest) Reset() {
290	*x = ListPasskeysRequest{}
291	mi := &file_ermite_session_proto_msgTypes[5]
292	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
293	ms.StoreMessageInfo(mi)
294}
295
296func (x *ListPasskeysRequest) String() string {
297	return protoimpl.X.MessageStringOf(x)
298}
299
300func (*ListPasskeysRequest) ProtoMessage() {}
301
302func (x *ListPasskeysRequest) ProtoReflect() protoreflect.Message {
303	mi := &file_ermite_session_proto_msgTypes[5]
304	if x != nil {
305		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
306		if ms.LoadMessageInfo() == nil {
307			ms.StoreMessageInfo(mi)
308		}
309		return ms
310	}
311	return mi.MessageOf(x)
312}
313
314// Deprecated: Use ListPasskeysRequest.ProtoReflect.Descriptor instead.
315func (*ListPasskeysRequest) Descriptor() ([]byte, []int) {
316	return file_ermite_session_proto_rawDescGZIP(), []int{5}
317}
318
319// ListPasskeysResponse holds the passkeys.
320type ListPasskeysResponse struct {
321	state protoimpl.MessageState `protogen:"open.v1"`
322	// Passkeys are the registered passkeys, oldest first.
323	Passkeys      []*Passkey `protobuf:"bytes,1,rep,name=passkeys,proto3" json:"passkeys,omitempty"`
324	unknownFields protoimpl.UnknownFields
325	sizeCache     protoimpl.SizeCache
326}
327
328func (x *ListPasskeysResponse) Reset() {
329	*x = ListPasskeysResponse{}
330	mi := &file_ermite_session_proto_msgTypes[6]
331	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
332	ms.StoreMessageInfo(mi)
333}
334
335func (x *ListPasskeysResponse) String() string {
336	return protoimpl.X.MessageStringOf(x)
337}
338
339func (*ListPasskeysResponse) ProtoMessage() {}
340
341func (x *ListPasskeysResponse) ProtoReflect() protoreflect.Message {
342	mi := &file_ermite_session_proto_msgTypes[6]
343	if x != nil {
344		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
345		if ms.LoadMessageInfo() == nil {
346			ms.StoreMessageInfo(mi)
347		}
348		return ms
349	}
350	return mi.MessageOf(x)
351}
352
353// Deprecated: Use ListPasskeysResponse.ProtoReflect.Descriptor instead.
354func (*ListPasskeysResponse) Descriptor() ([]byte, []int) {
355	return file_ermite_session_proto_rawDescGZIP(), []int{6}
356}
357
358func (x *ListPasskeysResponse) GetPasskeys() []*Passkey {
359	if x != nil {
360		return x.Passkeys
361	}
362	return nil
363}
364
365// RemovePasskeyRequest names the passkey to remove.
366type RemovePasskeyRequest struct {
367	state protoimpl.MessageState `protogen:"open.v1"`
368	// Id is the credential id from Passkey.id.
369	Id            string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
370	unknownFields protoimpl.UnknownFields
371	sizeCache     protoimpl.SizeCache
372}
373
374func (x *RemovePasskeyRequest) Reset() {
375	*x = RemovePasskeyRequest{}
376	mi := &file_ermite_session_proto_msgTypes[7]
377	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
378	ms.StoreMessageInfo(mi)
379}
380
381func (x *RemovePasskeyRequest) String() string {
382	return protoimpl.X.MessageStringOf(x)
383}
384
385func (*RemovePasskeyRequest) ProtoMessage() {}
386
387func (x *RemovePasskeyRequest) ProtoReflect() protoreflect.Message {
388	mi := &file_ermite_session_proto_msgTypes[7]
389	if x != nil {
390		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
391		if ms.LoadMessageInfo() == nil {
392			ms.StoreMessageInfo(mi)
393		}
394		return ms
395	}
396	return mi.MessageOf(x)
397}
398
399// Deprecated: Use RemovePasskeyRequest.ProtoReflect.Descriptor instead.
400func (*RemovePasskeyRequest) Descriptor() ([]byte, []int) {
401	return file_ermite_session_proto_rawDescGZIP(), []int{7}
402}
403
404func (x *RemovePasskeyRequest) GetId() string {
405	if x != nil {
406		return x.Id
407	}
408	return ""
409}
410
411// RemovePasskeyResponse is empty.
412type RemovePasskeyResponse struct {
413	state         protoimpl.MessageState `protogen:"open.v1"`
414	unknownFields protoimpl.UnknownFields
415	sizeCache     protoimpl.SizeCache
416}
417
418func (x *RemovePasskeyResponse) Reset() {
419	*x = RemovePasskeyResponse{}
420	mi := &file_ermite_session_proto_msgTypes[8]
421	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
422	ms.StoreMessageInfo(mi)
423}
424
425func (x *RemovePasskeyResponse) String() string {
426	return protoimpl.X.MessageStringOf(x)
427}
428
429func (*RemovePasskeyResponse) ProtoMessage() {}
430
431func (x *RemovePasskeyResponse) ProtoReflect() protoreflect.Message {
432	mi := &file_ermite_session_proto_msgTypes[8]
433	if x != nil {
434		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
435		if ms.LoadMessageInfo() == nil {
436			ms.StoreMessageInfo(mi)
437		}
438		return ms
439	}
440	return mi.MessageOf(x)
441}
442
443// Deprecated: Use RemovePasskeyResponse.ProtoReflect.Descriptor instead.
444func (*RemovePasskeyResponse) Descriptor() ([]byte, []int) {
445	return file_ermite_session_proto_rawDescGZIP(), []int{8}
446}
447
448var File_ermite_session_proto protoreflect.FileDescriptor
449
450const file_ermite_session_proto_rawDesc = "" +
451	"\n" +
452	"\x14ermite/session.proto\x12\x06ermite\x1a\x1fgoogle/protobuf/timestamp.proto\"\x18\n" +
453	"\x16CreateLoginLinkRequest\"f\n" +
454	"\x17CreateLoginLinkResponse\x12\x10\n" +
455	"\x03url\x18\x01 \x01(\tR\x03url\x129\n" +
456	"\n" +
457	"expires_at\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\texpiresAt\"\x1a\n" +
458	"\x18SignOutEverywhereRequest\"\x1b\n" +
459	"\x19SignOutEverywhereResponse\"\xbe\x01\n" +
460	"\aPasskey\x12\x0e\n" +
461	"\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" +
462	"\x04name\x18\x02 \x01(\tR\x04name\x129\n" +
463	"\n" +
464	"created_at\x18\x03 \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\x12<\n" +
465	"\flast_used_at\x18\x04 \x01(\v2\x1a.google.protobuf.TimestampR\n" +
466	"lastUsedAt\x12\x16\n" +
467	"\x06synced\x18\x05 \x01(\bR\x06synced\"\x15\n" +
468	"\x13ListPasskeysRequest\"C\n" +
469	"\x14ListPasskeysResponse\x12+\n" +
470	"\bpasskeys\x18\x01 \x03(\v2\x0f.ermite.PasskeyR\bpasskeys\"&\n" +
471	"\x14RemovePasskeyRequest\x12\x0e\n" +
472	"\x02id\x18\x01 \x01(\tR\x02id\"\x17\n" +
473	"\x15RemovePasskeyResponse2\xd7\x02\n" +
474	"\x0eSessionService\x12R\n" +
475	"\x0fCreateLoginLink\x12\x1e.ermite.CreateLoginLinkRequest\x1a\x1f.ermite.CreateLoginLinkResponse\x12X\n" +
476	"\x11SignOutEverywhere\x12 .ermite.SignOutEverywhereRequest\x1a!.ermite.SignOutEverywhereResponse\x12I\n" +
477	"\fListPasskeys\x12\x1b.ermite.ListPasskeysRequest\x1a\x1c.ermite.ListPasskeysResponse\x12L\n" +
478	"\rRemovePasskey\x12\x1c.ermite.RemovePasskeyRequest\x1a\x1d.ermite.RemovePasskeyResponseBs\n" +
479	"\n" +
480	"com.ermiteB\fSessionProtoP\x01Z\x1fbnema.dev/ermite-api/gen/ermite\xa2\x02\x03EXX\xaa\x02\x06Ermite\xca\x02\x06Ermite\xe2\x02\x12Ermite\\GPBMetadata\xea\x02\x06Ermiteb\x06proto3"
481
482var (
483	file_ermite_session_proto_rawDescOnce sync.Once
484	file_ermite_session_proto_rawDescData []byte
485)
486
487func file_ermite_session_proto_rawDescGZIP() []byte {
488	file_ermite_session_proto_rawDescOnce.Do(func() {
489		file_ermite_session_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_ermite_session_proto_rawDesc), len(file_ermite_session_proto_rawDesc)))
490	})
491	return file_ermite_session_proto_rawDescData
492}
493
494var file_ermite_session_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
495var file_ermite_session_proto_goTypes = []any{
496	(*CreateLoginLinkRequest)(nil),    // 0: ermite.CreateLoginLinkRequest
497	(*CreateLoginLinkResponse)(nil),   // 1: ermite.CreateLoginLinkResponse
498	(*SignOutEverywhereRequest)(nil),  // 2: ermite.SignOutEverywhereRequest
499	(*SignOutEverywhereResponse)(nil), // 3: ermite.SignOutEverywhereResponse
500	(*Passkey)(nil),                   // 4: ermite.Passkey
501	(*ListPasskeysRequest)(nil),       // 5: ermite.ListPasskeysRequest
502	(*ListPasskeysResponse)(nil),      // 6: ermite.ListPasskeysResponse
503	(*RemovePasskeyRequest)(nil),      // 7: ermite.RemovePasskeyRequest
504	(*RemovePasskeyResponse)(nil),     // 8: ermite.RemovePasskeyResponse
505	(*timestamppb.Timestamp)(nil),     // 9: google.protobuf.Timestamp
506}
507var file_ermite_session_proto_depIdxs = []int32{
508	9, // 0: ermite.CreateLoginLinkResponse.expires_at:type_name -> google.protobuf.Timestamp
509	9, // 1: ermite.Passkey.created_at:type_name -> google.protobuf.Timestamp
510	9, // 2: ermite.Passkey.last_used_at:type_name -> google.protobuf.Timestamp
511	4, // 3: ermite.ListPasskeysResponse.passkeys:type_name -> ermite.Passkey
512	0, // 4: ermite.SessionService.CreateLoginLink:input_type -> ermite.CreateLoginLinkRequest
513	2, // 5: ermite.SessionService.SignOutEverywhere:input_type -> ermite.SignOutEverywhereRequest
514	5, // 6: ermite.SessionService.ListPasskeys:input_type -> ermite.ListPasskeysRequest
515	7, // 7: ermite.SessionService.RemovePasskey:input_type -> ermite.RemovePasskeyRequest
516	1, // 8: ermite.SessionService.CreateLoginLink:output_type -> ermite.CreateLoginLinkResponse
517	3, // 9: ermite.SessionService.SignOutEverywhere:output_type -> ermite.SignOutEverywhereResponse
518	6, // 10: ermite.SessionService.ListPasskeys:output_type -> ermite.ListPasskeysResponse
519	8, // 11: ermite.SessionService.RemovePasskey:output_type -> ermite.RemovePasskeyResponse
520	8, // [8:12] is the sub-list for method output_type
521	4, // [4:8] is the sub-list for method input_type
522	4, // [4:4] is the sub-list for extension type_name
523	4, // [4:4] is the sub-list for extension extendee
524	0, // [0:4] is the sub-list for field type_name
525}
526
527func init() { file_ermite_session_proto_init() }
528func file_ermite_session_proto_init() {
529	if File_ermite_session_proto != nil {
530		return
531	}
532	type x struct{}
533	out := protoimpl.TypeBuilder{
534		File: protoimpl.DescBuilder{
535			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
536			RawDescriptor: unsafe.Slice(unsafe.StringData(file_ermite_session_proto_rawDesc), len(file_ermite_session_proto_rawDesc)),
537			NumEnums:      0,
538			NumMessages:   9,
539			NumExtensions: 0,
540			NumServices:   1,
541		},
542		GoTypes:           file_ermite_session_proto_goTypes,
543		DependencyIndexes: file_ermite_session_proto_depIdxs,
544		MessageInfos:      file_ermite_session_proto_msgTypes,
545	}.Build()
546	File_ermite_session_proto = out.File
547	file_ermite_session_proto_goTypes = nil
548	file_ermite_session_proto_depIdxs = nil
549}

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 2

Tags 18

↑↓ moveenter openesc close