Skip to content

Commit ff32d3d

Browse files
committed
Show login screen if user is not logged in
1 parent e2b8953 commit ff32d3d

File tree

9 files changed

+141
-75
lines changed

9 files changed

+141
-75
lines changed

tmc-plugin/src/fi/helsinki/cs/tmc/actions/SaveSettingsAction.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import fi.helsinki.cs.tmc.coreimpl.TmcCoreSettingsImpl;
77
import fi.helsinki.cs.tmc.core.events.TmcEvent;
88
import fi.helsinki.cs.tmc.core.events.TmcEventBus;
9+
import fi.helsinki.cs.tmc.core.utilities.TmcServerAddressNormalizer;
910
import fi.helsinki.cs.tmc.model.CourseDb;
1011
import fi.helsinki.cs.tmc.model.LocalExerciseStatus;
1112
import fi.helsinki.cs.tmc.ui.PreferencesUI;
@@ -46,9 +47,8 @@ public void actionPerformed(ActionEvent e) {
4647
TmcCoreSettingsImpl settings = (TmcCoreSettingsImpl) TmcSettingsHolder.get();
4748

4849
settings.setUsername(prefUi.getUsername());
49-
settings.setPassword(prefUi.getPassword());
50-
settings.setSavingPassword(prefUi.getShouldSavePassword());
5150
settings.setServerBaseUrl(prefUi.getServerBaseUrl());
51+
TmcServerAddressNormalizer.normalize();
5252
settings.setProjectRootDir(prefUi.getProjectDir());
5353
settings.setCheckingForUpdatesInTheBackground(prefUi.getCheckForUpdatesInTheBackground());
5454
settings.setCheckingForUnopenedAtStartup(prefUi.getCheckForUnopenedExercisesAtStartup());

tmc-plugin/src/fi/helsinki/cs/tmc/actions/ShowSettingsAction.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,6 @@ public void run() {
5454

5555
TmcCoreSettingsImpl settings = (TmcCoreSettingsImpl) TmcSettingsHolder.get();
5656
prefUI.setUsername(settings.getUsername());
57-
prefUI.setPassword(settings.getPassword());
58-
prefUI.setShouldSavePassword(settings.isSavingPassword());
5957
prefUI.setServerBaseUrl(settings.getServerBaseUrl());
6058
prefUI.setProjectDir(settings.getProjectRootDir());
6159
prefUI.setCheckForUpdatesInTheBackground(settings.isCheckingForUpdatesInTheBackground());

tmc-plugin/src/fi/helsinki/cs/tmc/actions/TmcModuleInstall.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,6 @@ public void run() {
7777
if (isFirstRun) {
7878
doFirstRun();
7979
prefs.putBoolean(PREF_FIRST_RUN, false);
80-
} else if (new TmcServerCommunicationTaskFactory().needsOnlyPassword() && CourseDb.getInstance().getCurrentCourse() != null) {
81-
LoginDialog.display(new CheckForNewExercisesOrUpdates(false, false));
8280
} else {
8381
// Do full refresh.
8482
new RefreshCoursesAction().addDefaultListener(false, true).addListener(new BgTaskListener<List<Course>>() {

tmc-plugin/src/fi/helsinki/cs/tmc/coreimpl/TmcCoreSettingsImpl.java

Lines changed: 63 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import fi.helsinki.cs.tmc.core.configuration.TmcSettings;
44
import fi.helsinki.cs.tmc.core.domain.Course;
5+
import fi.helsinki.cs.tmc.core.domain.OauthCredentials;
56
import fi.helsinki.cs.tmc.core.events.TmcEvent;
67
import fi.helsinki.cs.tmc.core.events.TmcEventBus;
78
import fi.helsinki.cs.tmc.model.CourseDb;
@@ -24,7 +25,7 @@
2425

2526
public class TmcCoreSettingsImpl implements TmcSettings {
2627

27-
28+
2829
private static final String PREF_BASE_URL = "baseUrl";
2930
private static final String PREF_USERNAME = "username";
3031
private static final String PREF_PASSWORD = "password";
@@ -37,19 +38,25 @@ public class TmcCoreSettingsImpl implements TmcSettings {
3738
private static final String PREF_RESOLVE_DEPENDENCIES = "resolveDependencies";
3839
private static final String PREF_SEND_DIAGNOSTICS = "sendDiagnostics";
3940
private static final String PREF_OAUTH_TOKEN = "oauthToken";
40-
41+
private static final String PREF_OAUTH_APPLICATION_ID = "oauthApplicationId";
42+
private static final String PREF_OAUTH_SECRET = "oauthSecret";
43+
private static final String PREF_ORGANIZATION = "organization";
44+
4145
private static PersistableSettings settings = PersistableSettings.forModule(TmcCoreSettingsImpl.class);
4246

4347
private Tailoring tailoring = SelectedTailoring.get();
4448
private TmcEventBus eventBus = TmcEventBus.getDefault();
45-
46-
private String unsavedPassword = settings.get(PREF_PASSWORD, "");
4749

4850
@Override
4951
public String getServerAddress() {
5052
return settings.get(PREF_BASE_URL, tailoring.getDefaultServerUrl());
5153
}
5254

55+
@Override
56+
public void setServerAddress(String address) {
57+
settings.put(PREF_BASE_URL, address);
58+
}
59+
5360
@Override
5461
public boolean userDataExists() {
5562
return true;
@@ -60,11 +67,6 @@ public Optional<Course> getCurrentCourse() {
6067
return Optional.of(CourseDb.getInstance().getCurrentCourse());
6168
}
6269

63-
@Override
64-
public String apiVersion() {
65-
return "7";
66-
}
67-
6870
@Override
6971
public String clientName() {
7072
return "netbeans_plugin";
@@ -119,7 +121,7 @@ public Path getConfigRoot() {
119121
throw new RuntimeException(ex);
120122
}
121123
}
122-
124+
123125
return FileUtil.toFile(tmcRoot).toPath();
124126
}
125127

@@ -142,42 +144,61 @@ public String hostProgramVersion() {
142144
}
143145
return "unknown";
144146
}
145-
147+
148+
@Override
149+
public OauthCredentials getOauthCredentials() {
150+
return new OauthCredentials(settings.get(PREF_OAUTH_APPLICATION_ID, null), settings.get(PREF_OAUTH_SECRET, null));
151+
}
152+
153+
@Override
154+
public void setOauthCredentials(OauthCredentials credentials) {
155+
settings.put(PREF_OAUTH_APPLICATION_ID, credentials.getOauthApplicationId());
156+
settings.put(PREF_OAUTH_SECRET, credentials.getOauthSecret());
157+
}
158+
159+
@Override
160+
public void setOrganization(String organization) {
161+
settings.put(PREF_ORGANIZATION, organization);
162+
}
163+
164+
@Override
165+
public String getOrganization() {
166+
return settings.get(PREF_ORGANIZATION, null);
167+
}
168+
146169
public static class SavedEvent implements TmcEvent {}
147-
170+
148171
public TmcCoreSettingsImpl() {
149172
// NOP
150173
}
151-
174+
152175
/*package*/ TmcCoreSettingsImpl(PersistableSettings settings, Tailoring tailoring, TmcEventBus eventBus) {
153176
this.settings = settings;
154177
this.tailoring = tailoring;
155178
this.eventBus = eventBus;
156-
157-
this.unsavedPassword = settings.get(PREF_PASSWORD, "");
158179
}
159-
180+
160181
public void save() {
161182
settings.saveAll();
162-
eventBus.post(new SavedEvent());
183+
eventBus.post(new SavedEvent());
163184
}
164185

165186
public String getServerBaseUrl() {
166187
return settings.get(PREF_BASE_URL, tailoring.getDefaultServerUrl());
167188
}
168-
189+
169190
public void setServerBaseUrl(String baseUrl) {
170191
baseUrl = stripTrailingSlashes(baseUrl);
171192
settings.put(PREF_BASE_URL, baseUrl);
172193
}
173-
194+
174195
private String stripTrailingSlashes(String s) {
175196
while (s.endsWith("/")) {
176197
s = s.substring(0, s.length() - 1);
177198
}
178199
return s;
179200
}
180-
201+
181202
@Override
182203
public String getUsername() {
183204
return settings.get(PREF_USERNAME, tailoring.getDefaultUsername());
@@ -186,31 +207,21 @@ public String getUsername() {
186207
public void setUsername(String username) {
187208
settings.put(PREF_USERNAME, username);
188209
}
189-
210+
190211
@Override
191212
public Optional<String> getPassword() {
192-
return Optional.fromNullable(unsavedPassword);
213+
return Optional.fromNullable(settings.get(PREF_PASSWORD, null));
193214
}
194-
195-
public void setPassword(String password) {
196-
unsavedPassword = password;
197-
if (isSavingPassword()) {
198-
settings.put(PREF_PASSWORD, password);
199-
}
200-
}
201-
202-
public void setSavingPassword(boolean shouldSave) {
203-
if (shouldSave) {
204-
settings.put(PREF_PASSWORD, unsavedPassword);
215+
216+
@Override
217+
public void setPassword(Optional<String> password) {
218+
if (password.isPresent()) {
219+
settings.put(PREF_PASSWORD, password.get());
205220
} else {
206221
settings.remove(PREF_PASSWORD);
207222
}
208223
}
209-
210-
public boolean isSavingPassword() {
211-
return settings.get(PREF_PASSWORD, null) != null;
212-
}
213-
224+
214225
public String getProjectRootDir() {
215226
String path = settings.get(PREF_PROJECT_ROOT_DIR, null);
216227
if (path != null) {
@@ -220,23 +231,23 @@ public String getProjectRootDir() {
220231
return ProjectMediator.getDefaultProjectRootDir();
221232
}
222233
}
223-
234+
224235
public void setProjectRootDir(String value) {
225236
settings.put(PREF_PROJECT_ROOT_DIR, value);
226237
}
227-
238+
228239
public boolean isCheckingForUpdatesInTheBackground() {
229240
return settings.get(PREF_CHECK_FOR_UPDATES_IN_BACKGROUND, "1").equals("1");
230241
}
231-
242+
232243
public void setCheckingForUpdatesInTheBackground(boolean value) {
233244
settings.put(PREF_CHECK_FOR_UPDATES_IN_BACKGROUND, value ? "1" : "0");
234245
}
235-
246+
236247
public boolean isCheckingForUnopenedAtStartup() {
237248
return settings.get(PREF_CHECK_FOR_UNOPENED_AT_STARTUP, "1").equals("1");
238249
}
239-
250+
240251
public void setCheckingForUnopenedAtStartup(boolean value) {
241252
settings.put(PREF_CHECK_FOR_UNOPENED_AT_STARTUP, value ? "1" : "0");
242253
}
@@ -249,53 +260,48 @@ public boolean isSpywareEnabled() {
249260
public void setIsSpywareEnabled(boolean value) {
250261
settings.put(PREF_SPYWARE_ENABLED, value ? "1" : "0");
251262
}
252-
263+
253264
public boolean isDetailedSpywareEnabled() {
254265
String defaultValue = tailoring.isDetailedSpywareEnabledByDefault() ? "1" : "0";
255266
return settings.get(PREF_DETAILED_SPYWARE_ENABLED, defaultValue).equals("1");
256267
}
257-
268+
258269
public Locale getErrorMsgLocale() {
259270
Locale dflt = tailoring.getDefaultErrorMsgLocale();
260271
return parseLocale(settings.get(PREF_ERROR_MSG_LOCALE, ""), dflt);
261272
}
262-
273+
263274
public void setErrorMsgLocale(Locale locale) {
264275
settings.put(PREF_ERROR_MSG_LOCALE, locale.toString());
265276
}
266-
277+
267278
public void setResolveDependencies(boolean value) {
268279
settings.put(PREF_RESOLVE_DEPENDENCIES, value ? "1" : "0");
269280
}
270-
281+
271282
public boolean getResolveDependencies() {
272283
return settings.get(PREF_RESOLVE_DEPENDENCIES, "1").equals("1");
273284
}
274285

275286
public void setSendDiagnostics(boolean value) {
276287
settings.put(PREF_SEND_DIAGNOSTICS, value ? "1" : "0");
277288
}
278-
289+
279290
@Override
280291
public boolean getSendDiagnostics() {
281292
return settings.get(PREF_SEND_DIAGNOSTICS, "1").equals("1");
282293
}
283-
294+
284295
@Override
285296
public Optional<String> getToken() {
286297
return Optional.fromNullable(settings.get(PREF_OAUTH_TOKEN, null));
287298
}
288-
299+
289300
@Override
290301
public void setToken(String token) {
291302
settings.put(PREF_OAUTH_TOKEN, token);
292303
}
293-
294-
@Override
295-
public String getOauthSecret() {
296-
return ;
297-
}
298-
304+
299305
private Locale parseLocale(String s, Locale dflt) {
300306
if (s.isEmpty()) {
301307
return dflt;
@@ -312,5 +318,4 @@ private Locale parseLocale(String s, Locale dflt) {
312318
return dflt;
313319
}
314320
}
315-
316321
}

tmc-plugin/src/fi/helsinki/cs/tmc/ui/LoginDialog.form

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@
7676
<Component id="cancelButton" alignment="3" min="-2" max="-2" attributes="0"/>
7777
<Component id="loginButton" alignment="3" min="-2" max="-2" attributes="0"/>
7878
</Group>
79-
<EmptySpace pref="23" max="32767" attributes="0"/>
79+
<EmptySpace max="32767" attributes="0"/>
8080
</Group>
8181
</Group>
8282
</DimensionLayout>

tmc-plugin/src/fi/helsinki/cs/tmc/ui/LoginDialog.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@
33
import fi.helsinki.cs.tmc.core.holders.TmcSettingsHolder;
44
import fi.helsinki.cs.tmc.coreimpl.TmcCoreSettingsImpl;
55

6+
import com.google.common.base.Optional;
7+
8+
import org.openide.windows.WindowManager;
9+
610
import java.awt.event.ActionListener;
711
import javax.swing.SwingUtilities;
8-
import org.openide.windows.WindowManager;
912

1013
public class LoginDialog extends javax.swing.JDialog {
1114

@@ -14,10 +17,10 @@ public static void display(ActionListener onOk) {
1417
dialog.setLocationRelativeTo(null);
1518
dialog.setVisible(true);
1619
}
17-
20+
1821
private TmcCoreSettingsImpl settings;
1922
private ActionListener onLogin;
20-
23+
2124
/** Creates new form LoginForm */
2225
public LoginDialog(ActionListener onLogin) {
2326
super(WindowManager.getDefault().getMainWindow(), true);
@@ -27,8 +30,6 @@ public LoginDialog(ActionListener onLogin) {
2730

2831
this.settings = (TmcCoreSettingsImpl)TmcSettingsHolder.get();
2932
this.usernameField.setText(settings.getUsername());
30-
this.passwordField.setText(settings.getPassword());
31-
this.savePasswordCheckbox.setSelected(settings.isSavingPassword());
3233

3334
if (!usernameField.getText().isEmpty()) {
3435
SwingUtilities.invokeLater(new Runnable() {
@@ -153,8 +154,7 @@ private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-
153154

154155
private void loginButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loginButtonActionPerformed
155156
settings.setUsername(usernameField.getText());
156-
settings.setPassword(new String(passwordField.getPassword()));
157-
settings.setSavingPassword(savePasswordCheckbox.isSelected());
157+
settings.setPassword(Optional.of(new String(passwordField.getPassword())));
158158
settings.save();
159159

160160
onLogin.actionPerformed(evt);

tmc-plugin/src/fi/helsinki/cs/tmc/ui/PreferencesPanel.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import fi.helsinki.cs.tmc.actions.RefreshCoursesAction;
44
import fi.helsinki.cs.tmc.core.domain.Course;
55
import fi.helsinki.cs.tmc.core.holders.TmcSettingsHolder;
6+
import fi.helsinki.cs.tmc.core.utilities.TmcServerAddressNormalizer;
67
import fi.helsinki.cs.tmc.coreimpl.TmcCoreSettingsImpl;
78

89
import fi.helsinki.cs.tmc.tailoring.SelectedTailoring;
@@ -296,8 +297,8 @@ public int hashCode() {
296297
private void updateSettingsForRefresh() {
297298
TmcCoreSettingsImpl settings = (TmcCoreSettingsImpl)TmcSettingsHolder.get();
298299
settings.setUsername(getUsername());
299-
settings.setPassword(getPassword());
300300
settings.setServerBaseUrl(getServerBaseUrl());
301+
TmcServerAddressNormalizer.normalize();
301302
settings.setProjectRootDir(getProjectDir());
302303
settings.save(); // TODO: is this wanted
303304
}

0 commit comments

Comments
 (0)