Changeset 1270 for trunk


Ignore:
Timestamp:
03/25/19 14:33:31 (5 years ago)
Author:
bln4
Message:

On profile creation a new parameter has been introducted. By passing a map, the user is able to nominate settings frames for which to be notified of their construction.

The above functionalty has been used to programmatically establish the frame number for a users credentials frame.

On user account creation, the users credential frame is migrated to the <username>-credentials folder and a redirect is setup. Functionality for doing this has been generisised and placed in FrameIO.

Location:
trunk/src/org
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/apollo/ApolloSystem.java

    r1244 r1270  
    156156                if (profile == null) {
    157157                        try {
    158                                 profile = FrameIO.CreateNewProfile(UserSettings.DEFAULT_PROFILE_NAME, null);
     158                                profile = FrameIO.CreateNewProfile(UserSettings.DEFAULT_PROFILE_NAME, null, null);
    159159                        } catch (Exception e) {
    160160                                e.printStackTrace();
  • trunk/src/org/expeditee/actions/Misc.java

    r1258 r1270  
    13341334                homeFrame.removeAllItems(homeFrame.getItems());
    13351335                homeFrame.addText(0, 0, "title", null);
    1336                 FrameUtils.CreateDefaultProfile(UserSettings.UserName.get(), homeFrame, null);
     1336                FrameUtils.CreateDefaultProfile(UserSettings.UserName.get(), homeFrame, null, null);
    13371337        }
    13381338       
  • trunk/src/org/expeditee/auth/Actions.java

    r1263 r1270  
    3232import java.util.Optional;
    3333import java.util.Random;
     34import java.util.function.Consumer;
    3435import java.util.stream.Collectors;
    3536
     
    6768
    6869public class Actions implements CryptographyConstants {
    69                
     70       
     71        //Debug Functions
    7072        public static void SendTestMessage(String colleagueName) throws InvalidKeySpecException, NoSuchAlgorithmException, FileNotFoundException, KeyStoreException, CertificateException, ClassNotFoundException, IOException, SQLException {
    7173                String time = org.expeditee.stats.Formatter.getDateTime();
     
    7981                Path outbox = Paths.get(FrameIO.PROFILE_PATH).resolve(sender).resolve(sender + "-credentials");
    8082                Mail.sendMail(mail, publicKey, outbox);
     83        }
     84        private static String userbackup = "authadmin";
     85        public static void ToggleAuth() {
     86                String backup = UserSettings.UserName.get();
     87                UserSettings.UserName.set(userbackup);
     88                userbackup = backup;
    8189        }
    8290       
     
    394402                initialSettings.put("org.expeditee.gui.folders.FolderSettings.AudioDirs", FolderSettings.AudioDirs);
    395403               
     404                // Record the credentials frame number
     405                Map<String, Consumer<Frame>> notifiers = new HashMap<String, Consumer<Frame>>();
     406                notifiers.put(Constants.SETTINGS_AUTH, frame -> {
     407                        Authenticator.CREDENTIALS_FRAME = frame.getNumber();
     408                        Collection<Text> textItems = frame.getTextItems();
     409                        for (Text t: textItems) {
     410                                if (t.getText().equals("Secrets")) {
     411                                        t.setPermission(new PermissionPair(UserAppliedPermission.followLinks, UserAppliedPermission.denied));
     412                                        break;
     413                                }
     414                        }
     415                });
     416               
    396417                // Create users profile
    397                 Frame profile = FrameIO.CreateNewProfile(username, initialSettings);
     418                Frame profile = FrameIO.CreateNewProfile(username, initialSettings, notifiers);
    398419                int lastNumber = FrameIO.getLastNumber(profile.getFramesetName());
    399420                for (int i = 1; i <= lastNumber; i++) {
     
    407428                        f.getAllItems().stream().forEach(item -> item.setOwner(username));
    408429                        f.setChanged(true);
    409                         f.setEncryptionLabel("Profile");
     430                        if (f.getNumber() != Authenticator.CREDENTIALS_FRAME) {
     431                                f.setEncryptionLabel("Profile");
     432                        }
    410433                        Collection<Item> secretsLink = getByContent(f, "Secrets");
    411434                        Collection<Item> publicKeyItem = getByContent(f, "PublicKey");
    412435                        if (!secretsLink.isEmpty() && !publicKeyItem.isEmpty()) {
    413436                                //Then we are on credentials frame
    414                                 secretsLink.forEach(text -> text.setPermission(new PermissionPair(UserAppliedPermission.full, UserAppliedPermission.none)));
    415437                                f.addToData("MultiuserCredentials");
    416438                        }
     
    421443                        FrameIO.SaveFrame(f);
    422444                        KeyList.PersonalKey.setSetting(backupPersonalKey);
     445                }
     446               
     447                if (Authenticator.CREDENTIALS_FRAME == -1) {
     448                        System.err.println("authActions::Unable to establish credentials frame for new profile frame.  Account creation failed.");
     449                        return;
    423450                }
    424451               
     
    436463                out.flush();
    437464                out.close();
     465                //      migrate credentials frame
     466                Frame credentialsFrame = FrameIO.LoadFrame(username + Authenticator.CREDENTIALS_FRAME);
     467                FrameIO.migrateFrame(credentialsFrame, Paths.get(credentialsDir.getAbsolutePath()).resolve(Authenticator.CREDENTIALS_FRAME + ".exp"));
    438468                //      outbox
    439469                Connection c = DriverManager.getConnection("jdbc:sqlite:" + credentialsDir.getAbsolutePath() + File.separator + "expmail.db");
  • trunk/src/org/expeditee/auth/Authenticator.java

    r1267 r1270  
    6464       
    6565        // The frame number of the frame containing the current authenticated users public key.
    66         public static int CREDENTIALS_FRAME = 13;
     66        public static int CREDENTIALS_FRAME = -1;
    6767        public static final String ADMINACCOUNT = "authadmin";
    6868       
  • trunk/src/org/expeditee/auth/tags/Constants.java

    r1243 r1270  
    1919        public static final String SETTINGS_USER_SETTINGS_PROFILE_NAME = "settings.UserSettings.ProfileName";
    2020        public static final String SETTINGS_USER_SETTINGS_USER_NAME = "settings.UserSettings.UserName";
     21        public static final String SETTINGS_AUTH = "settings.identity";
    2122        public static final String SETTINGS_AUTH_EMAIL = "settings.identity.Email";
    2223        public static final String SETTINGS_AUTH_PUBLIC_KEY = "settings.identity.PublicKey";
  • trunk/src/org/expeditee/gui/Browser.java

    r1264 r1270  
    553553                if (profile == null) {
    554554                        try {
    555                                 profile = FrameIO.CreateNewProfile(userName, null);
     555                                profile = FrameIO.CreateNewProfile(userName, null, null);
    556556                        } catch (Exception e) {
    557557                                // TODO tell the user that there was a problem creating the
  • trunk/src/org/expeditee/gui/FrameIO.java

    r1257 r1270  
    4343import java.util.List;
    4444import java.util.Map;
     45import java.util.function.Consumer;
    4546import java.util.stream.Collectors;
    4647
     
    13491350        }
    13501351
    1351         public static Frame CreateNewProfile(String username, Map<String, Setting> initialSettings) throws InvalidFramesetNameException, ExistingFramesetException  {
     1352        public static Frame CreateNewProfile(String username, Map<String, Setting> initialSettings, Map<String, Consumer<Frame>> toNotifyOnSet) throws InvalidFramesetNameException, ExistingFramesetException  {
    13521353                Frame profile = CreateFrameset(username, PROFILE_PATH, true);
    1353                 FrameUtils.CreateDefaultProfile(username, profile, initialSettings);
     1354                FrameUtils.CreateDefaultProfile(username, profile, initialSettings, toNotifyOnSet);
    13541355                return profile;
    13551356        }
     
    19241925        }
    19251926       
    1926         public static Path setupPersonalResources(String username)
    1927         {
     1927        public static Path setupPersonalResources(String username) {
    19281928                Path personalResources = Paths.get(FrameIO.PARENT_FOLDER).resolve("resources-" + username);
    19291929                personalResources.toFile().mkdir();             
     
    19441944               
    19451945                return personalResources;
     1946        }
     1947       
     1948        public static void migrateFrame(Frame toMigrate, Path destinationDirectory) {
     1949                Path source = Paths.get(toMigrate.getFramePathReal());
     1950                String destination = source.relativize(destinationDirectory).toString().substring(3).replace(File.separator, "/");
     1951                try {
     1952                        copyFileTree(source, destinationDirectory);
     1953                } catch (IOException e) {
     1954                        System.err.println("FrameIO::migrateFrame: failed to migrate from to new location.  Message: " + e.getMessage());
     1955                        return;
     1956                }
     1957                try {
     1958                        FileWriter out = new FileWriter(source.toFile());
     1959                        out.write("REDIRECT:" + destination);
     1960                        out.flush();
     1961                        out.close();
     1962                } catch (IOException e) {
     1963                        System.err.println("FrameIO::migrateFrame: failed to update file [" + source + "] to redirect to  [" + destination + "] following migration.  Message: " + e.getMessage());
     1964                }
    19461965        }
    19471966       
  • trunk/src/org/expeditee/gui/FrameUtils.java

    r1244 r1270  
    4141import java.util.List;
    4242import java.util.Map;
     43import java.util.function.Consumer;
    4344import java.util.jar.JarEntry;
    4445import java.util.jar.JarFile;
     
    15141515       
    15151516        public static void CreateDefaultProfile(String profileFor, Frame profile) {
    1516                 CreateDefaultProfile(profileFor, profile, null);
     1517                CreateDefaultProfile(profileFor, profile, null, null);
    15171518        }
    15181519
     
    15251526         */
    15261527        public static void CreateDefaultProfile(String profileFor, Frame profile,
    1527                         Map<String, Setting> specifiedSettings) {
     1528                        Map<String, Setting> specifiedSettings, Map<String, Consumer<Frame>> notifyWhenGenerated) {
    15281529                // If this is already the default profile then nothing (other than setting
    15291530                // title) needs to be done.
     
    15391540                                try {
    15401541                                        // If we do not have a default to copy, create one.
    1541                                         defaultFrame = FrameIO.CreateNewProfile(UserSettings.DEFAULT_PROFILE_NAME, null);
     1542                                        defaultFrame = FrameIO.CreateNewProfile(UserSettings.DEFAULT_PROFILE_NAME, null, null);
    15421543                                } catch (InvalidFramesetNameException invalidNameEx) {
    15431544                                        MessageBay.errorMessage("Failed to create default profile named: "
     
    16081609                                        }
    16091610                                }
     1611                                if (notifyWhenGenerated != null && notifyWhenGenerated.containsKey(category)) {
     1612                                        notifyWhenGenerated.get(category).accept(profile);
     1613                                }
    16101614                                FrameIO.SaveFrame(profile);
    16111615                        }
     
    17141718                        t.setColor(Colour.GREY);
    17151719                        Settings.generateSettingsTree(t);
     1720                        System.out.println("@Settings: Default settings generation complete.");
    17161721
    17171722                        FrameIO.SaveFrame(profile);
Note: See TracChangeset for help on using the changeset viewer.