Skip to content

Commit 4817abf

Browse files
authored
Merge pull request #33 from vshcryabets/feature/auth
Update auth logic
2 parents 02f7090 + b235c11 commit 4817abf

54 files changed

Lines changed: 675 additions & 780 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

java/v2styx-console-client/src/main/java/com/v2soft/styxlib/StyxConsoleClient.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@
1111
import com.v2soft.styxlib.l5.serialization.impl.StyxSerializerImpl;
1212
import com.v2soft.styxlib.l5.structs.StyxStat;
1313
import com.v2soft.styxlib.library.types.impl.CredentialsImpl;
14-
import com.v2soft.styxlib.server.ClientsRepoImpl;
1514
import com.v2soft.styxlib.server.StyxServerManager;
1615
import com.v2soft.styxlib.server.tcp.TCPClientChannelDriver;
1716
import com.v2soft.styxlib.server.tcp.TCPServerChannelDriver;
17+
import com.v2soft.styxlib.utils.StyxSessionDI;
18+
import com.v2soft.styxlib.utils.StyxSessionDIImpl;
1819
import org.jline.reader.LineReader;
1920
import org.jline.reader.LineReaderBuilder;
2021
import org.jline.terminal.Terminal;
@@ -151,23 +152,20 @@ public void mainLoop(String[] args) throws IOException {
151152
.build();
152153
terminal.writer().println("Connection to the " + host + ":" + port);
153154
try {
154-
var clientsRepo = new ClientsRepoImpl();
155-
var driver = new TCPClientChannelDriver(clientsRepo);
155+
StyxSessionDI di = new StyxSessionDIImpl(false);
156+
var driver = new TCPClientChannelDriver(di);
156157
var initConfiguration = new TCPServerChannelDriver.InitConfiguration(
157-
serializer,
158-
deserializer,
159158
StyxServerManager.DEFAULT_IOUNIT,
160159
false,
161160
InetAddress.getByName(host),
162-
port
161+
port,
162+
di
163163
);
164164
driver.prepare(initConfiguration);
165165
var connectionConfiguration = new Connection.Configuration(
166166
new CredentialsImpl("", ""),
167167
driver,
168-
clientsRepo,
169-
serializer,
170-
deserializer);
168+
di);
171169
var connection = new Connection(connectionConfiguration);
172170
connection.connect();
173171
terminal.writer().println("Connected");

java/v2styx-lib/src/main/java/com/v2soft/styxlib/ConnectionWithExport.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@
44
import com.v2soft.styxlib.handlers.TMessagesProcessor;
55
import com.v2soft.styxlib.l5.Connection;
66
import com.v2soft.styxlib.l6.vfs.IVirtualStyxFile;
7-
import com.v2soft.styxlib.library.types.Credentials;
8-
import com.v2soft.styxlib.server.ClientsRepo;
9-
import com.v2soft.styxlib.server.IChannelDriver;
107
import com.v2soft.styxlib.server.tcp.TCPDualLinkServerManager;
118

129
import java.io.IOException;
@@ -38,8 +35,10 @@ public void export(IVirtualStyxFile root) {
3835
@Override
3936
public boolean connect() throws IOException, StyxException,
4037
InterruptedException, TimeoutException {
41-
mConfiguration.requestProcessor = new TMessagesProcessor(getConnectionDetails(), mExportedRoot,
42-
mConfiguration.clientsRepo);
38+
mConfiguration.requestProcessor = new TMessagesProcessor(
39+
getConnectionDetails(),
40+
mExportedRoot,
41+
mConfiguration.di.getClientsRepo());
4342
return super.connect();
4443
}
4544

java/v2styx-lib/src/main/java/com/v2soft/styxlib/Logger.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.v2soft.styxlib;
22

3-
import java.io.OutputStream;
43
import java.io.PrintStream;
54

65
public class Logger {
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package com.v2soft.styxlib.exceptions;
2+
3+
public class StyxNotAuthorizedException extends StyxException {
4+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package com.v2soft.styxlib.exceptions;
2+
3+
public class StyxUnknownClientIdException extends StyxException {
4+
}

java/v2styx-lib/src/main/java/com/v2soft/styxlib/handlers/RMessagesProcessor.java

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,29 +32,29 @@ public void onClientRemoved(int clientId) {
3232
public void processPacket(StyxMessage message, int clientId) {
3333
mReceivedCount++;
3434
int tag = message.getTag();
35-
final var polls = mClientsRepo.getPolls(clientId);
36-
final Map<Integer, StyxTMessage> clientMessagesMap = polls.getMessagesMap();
37-
if (!clientMessagesMap.containsKey(tag)) {
38-
// we didn't send T message with such tag, so ignore this R message
39-
System.err.printf("%d\tGot (%s) unknown R message from client %d\n", System.currentTimeMillis(),
40-
mTag,
41-
clientId);
42-
return;
43-
}
44-
final StyxTMessage tMessage = clientMessagesMap.get(tag);
45-
// TODO i'm not sure that this is proper place for that logic
46-
if (tMessage.type == MessageType.Tclunk ||
47-
tMessage.type == MessageType.Tremove) {
48-
polls.releaseFID((StyxTMessageFID) tMessage);
49-
}
5035
try {
36+
final var polls = mClientsRepo.getPolls(clientId);
37+
final Map<Integer, StyxTMessage> clientMessagesMap = polls.getMessagesMap();
38+
if (!clientMessagesMap.containsKey(tag)) {
39+
// we didn't send T message with such tag, so ignore this R message
40+
System.err.printf("%d\tGot (%s) unknown R message from client %d\n", System.currentTimeMillis(),
41+
mTag,
42+
clientId);
43+
return;
44+
}
45+
final StyxTMessage tMessage = clientMessagesMap.get(tag);
46+
// TODO i'm not sure that this is proper place for that logic
47+
if (tMessage.type == MessageType.Tclunk ||
48+
tMessage.type == MessageType.Tremove) {
49+
polls.releaseFID((StyxTMessageFID) tMessage);
50+
}
5151
tMessage.setAnswer(message);
52+
polls.releaseTag(tag);
5253
} catch (StyxException e) {
5354
e.printStackTrace();
5455
}
5556
if (message.type == MessageType.Rerror) {
5657
mErrorCount++;
5758
}
58-
polls.releaseTag(tag);
5959
}
6060
}

java/v2styx-lib/src/main/java/com/v2soft/styxlib/handlers/TMessagesProcessor.java

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
import com.v2soft.styxlib.exceptions.StyxErrorMessageException;
44
import com.v2soft.styxlib.exceptions.StyxException;
5+
import com.v2soft.styxlib.exceptions.StyxNotAuthorizedException;
6+
import com.v2soft.styxlib.exceptions.StyxUnknownClientIdException;
57
import com.v2soft.styxlib.l5.enums.MessageType;
68
import com.v2soft.styxlib.l5.messages.*;
79
import com.v2soft.styxlib.l5.messages.base.StyxMessage;
810
import com.v2soft.styxlib.l5.messages.base.StyxTMessageFID;
911
import com.v2soft.styxlib.l5.structs.StyxQID;
1012
import com.v2soft.styxlib.l6.vfs.IVirtualStyxFile;
1113
import com.v2soft.styxlib.library.types.ConnectionDetails;
12-
import com.v2soft.styxlib.library.types.Credentials;
13-
import com.v2soft.styxlib.library.types.impl.CredentialsImpl;
1414
import com.v2soft.styxlib.server.ClientsRepo;
1515
import com.v2soft.styxlib.l5.dev.MetricsAndStats;
1616

@@ -109,33 +109,41 @@ public void processPacket(StyxMessage message, int clientId) throws StyxExceptio
109109
answer = e.getErrorMessage();
110110
answer.setTag(message.getTag());
111111
mErrorPackets++;
112+
} catch (StyxNotAuthorizedException e) {
113+
answer = new StyxRErrorMessage(message.getTag(), "Not authorized");
114+
mErrorPackets++;
115+
} catch (StyxUnknownClientIdException e) {
116+
answer = new StyxRErrorMessage(message.getTag(), "Unknown client ID, try to reconnect");
117+
mErrorPackets++;
118+
} catch (StyxException e) {
119+
answer = new StyxRErrorMessage(message.getTag(), e.getMessage());
120+
mErrorPackets++;
112121
}
113122
if (answer != null) {
114123
mAnswerPackets++;
115124
mClientsRepo.getDriver(clientId).sendMessage(answer, clientId, 0);
116125
}
117126
}
118127

119-
private StyxRAttachMessage processAttach(int clientId, StyxTAttachMessage msg) {
120-
Credentials credentials = new CredentialsImpl(msg.getUserName(), null);
128+
private StyxRAttachMessage processAttach(int clientId, StyxTAttachMessage msg) throws StyxUnknownClientIdException {
121129
var clientDetails = mClientsRepo.getClient(clientId);
122-
clientDetails.setCredentials(credentials);
123-
String mountPoint = msg.getMountPoint();
130+
clientDetails.setUsername(msg.userName);
131+
String mountPoint = msg.mountPoint;
124132
mRoot.onConnectionOpened(clientId);
125133
IVirtualStyxFile root = mRoot; // TODO .getDirectory(mountPoint); there should be some logic with mountPoint?
126134
StyxRAttachMessage answer = new StyxRAttachMessage(msg.getTag(), root.getQID());
127135
clientDetails.registerOpenedFile(msg.getFID(), root);
128136
return answer;
129137
}
130138

131-
private StyxMessage processAuth(int clientId, StyxTAuthMessage msg) {
132-
Credentials credentials = new CredentialsImpl(msg.getUserName(), null);
133-
mClientsRepo.getClient(clientId).setCredentials(credentials);
139+
private StyxMessage processAuth(int clientId, StyxTAuthMessage msg) throws StyxUnknownClientIdException {
140+
mClientsRepo.getClient(clientId).setUsername(msg.mUserName);
134141
// TODO handle auth packet
135142
return new StyxRAuthMessage(msg.getTag(), StyxQID.EMPTY);
136143
}
137144

138-
private StyxMessage processClunk(int clientId, StyxTMessageFID msg) throws StyxErrorMessageException {
145+
private StyxMessage processClunk(int clientId, StyxTMessageFID msg)
146+
throws StyxException {
139147
mClientsRepo.closeFile(clientId, msg.getFID());
140148
return new StyxMessage(MessageType.Rclunk, msg.getTag());
141149
}
@@ -144,7 +152,8 @@ private StyxMessage processWalk(int clientId, StyxTWalkMessage msg) throws StyxE
144152
long fid = msg.getFID();
145153
final List<StyxQID> qidsList = new LinkedList<StyxQID>();
146154
final IVirtualStyxFile walkFile = mClientsRepo.getAssignedFile(clientId, fid).walk(
147-
msg.getPathElements().iterator(),
155+
clientId,
156+
new LinkedList<>(msg.getPathElements()),
148157
qidsList);
149158
if (walkFile != null) {
150159
mClientsRepo.getClient(clientId).registerOpenedFile(msg.getNewFID(), walkFile);
@@ -159,7 +168,7 @@ private StyxMessage processOpen(int clientId, StyxTOpenMessage msg)
159168
throws StyxException {
160169
long fid = msg.getFID();
161170
IVirtualStyxFile file = mClientsRepo.getAssignedFile(clientId, fid);
162-
if (file.open(clientId, msg.getMode())) {
171+
if (file.open(clientId, msg.mode)) {
163172
return new StyxROpenMessage(msg.getTag(), file.getQID(),
164173
mConnectionDetails.ioUnit() - DEFAULT_PACKET_HEADER_SIZE, false);
165174
} else {
@@ -168,7 +177,7 @@ private StyxMessage processOpen(int clientId, StyxTOpenMessage msg)
168177
}
169178

170179
private StyxMessage processRemove(int clientId, StyxTMessageFID msg)
171-
throws StyxErrorMessageException {
180+
throws StyxException {
172181
if (mClientsRepo.getAssignedFile(clientId, msg.getFID()).delete(clientId)) {
173182
return new StyxMessage(MessageType.Rremove, msg.getTag());
174183
} else {
@@ -177,9 +186,9 @@ private StyxMessage processRemove(int clientId, StyxTMessageFID msg)
177186
}
178187

179188
private StyxMessage processCreate(int clientId, StyxTCreateMessage msg)
180-
throws StyxErrorMessageException {
189+
throws StyxException {
181190
final IVirtualStyxFile file = mClientsRepo.getAssignedFile(clientId, msg.getFID());
182-
StyxQID qid = file.create(msg.getName(), msg.getPermissions(), msg.getMode());
191+
StyxQID qid = file.create(clientId, msg.name, msg.permissions, msg.mode);
183192
return new StyxROpenMessage(msg.getTag(), qid, mConnectionDetails.ioUnit(), true);
184193
}
185194

@@ -188,23 +197,23 @@ private StyxMessage processWStat(StyxTWStatMessage msg) {
188197
return new StyxMessage(MessageType.Rwstat, msg.getTag());
189198
}
190199

191-
private StyxMessage processWrite(int clientId, StyxTWriteMessage msg) throws StyxErrorMessageException {
200+
private StyxMessage processWrite(int clientId, StyxTWriteMessage msg) throws StyxException {
192201
long fid = msg.getFID();
193202
return new StyxRWriteMessage(msg.getTag(),
194-
mClientsRepo.getAssignedFile(clientId, fid).write(clientId, msg.getData(), msg.getOffset()));
203+
mClientsRepo.getAssignedFile(clientId, fid).write(clientId, msg.data, msg.offset));
195204
}
196205

197-
private StyxMessage processRead(int clientId, StyxTReadMessage msg) throws StyxErrorMessageException {
198-
if (msg.getCount() > mConnectionDetails.ioUnit()) {
206+
private StyxMessage processRead(int clientId, StyxTReadMessage msg) throws StyxException {
207+
if (msg.count > mConnectionDetails.ioUnit()) {
199208
return new StyxRErrorMessage(msg.getTag(), "IOUnit overflow");
200209
}
201210
long fid = msg.getFID();
202-
byte[] buffer = new byte[(int) msg.getCount()];
211+
byte[] buffer = new byte[(int) msg.count];
203212
MetricsAndStats.byteArrayAllocationRRead++;
204213
return new StyxRReadMessage(msg.getTag(), buffer,
205-
(int) mClientsRepo
214+
mClientsRepo
206215
.getAssignedFile(clientId, fid)
207-
.read(clientId, buffer, msg.getOffset(), msg.getCount()));
216+
.read(clientId, buffer, msg.offset, msg.count));
208217
}
209218

210219
public IVirtualStyxFile getRoot() {

0 commit comments

Comments
 (0)