/// <summary> /// Create an account with the specified account name and profile. /// <para>The profile is validated for consistency and rejected if /// validation fails.</para> /// <para>The new account is registered in the Portal log under /// AccountName@Domain as the unique identifier. The profile is /// registered in the mesh under the </para> /// </summary> /// <param name="AccountID">The requested account name.</param> /// <param name="Profile">A signed Personal Profile.</param> /// <returns>True if the transaction was successful, otherwise false. </returns> public bool CreateAccount(string AccountID, SignedProfile Profile) { // Validate the signed profile if (!Profile.Validate()) throw new Throw ("Profile not valid"); // Create the new account on the portal (fail if already exists) var Account = new Account(); Account.AccountID = AccountID; Account.Status = "Open"; Account.Created = DateTime.Now; Account.Modified = Account.Created; Account.UserProfileUDF = Profile.Identifier; //// Allow accounts to be searched by the profile they link to: //var KeyData = new IndexTerm(KeyUserProfile, Account.UniqueID); //var KeyDatas = new List<IndexTerm> { KeyData }; PortalStore.New(Account, Account.PrimaryKey(Account.UniqueID), null); // Push the profile out to the Mesh MeshStore.New(Profile, Profile.Identifier, null); return true; }
/// <summary> /// Check the specified personal profile and add it to the mesh. /// </summary> /// <param name="Profile">The profile to add.</param> public void AddProfile(SignedProfile Profile) { // Validate the signed profile if (!Profile.Valid) throw new Throw("Profile not valid"); //var KeyData = new IndexTerm(UniqueID, Profile.Identifier); //var KeyDatas = new List<IndexTerm> { KeyData }; var UniqueID = Profile.UniqueID; var IndexTerms = Profile.IndexTerms; MeshStore.New(Profile, UniqueID, IndexTerms); }
/// <summary> /// Convenience function that converts a generic Signed Profile returned /// by the Mesh to a PasswordProfile. /// </summary> /// <param name="SignedProfile">A signed password profile.</param> /// <returns>Inner PasswordProfile if the Signed Profile contains one, /// otherwise null.</returns> public static PasswordProfile Get(SignedProfile SignedProfile) { return SignedProfile.Inner as PasswordProfile; }
/// <summary> /// Convenience function that converts a generic Signed Profile returned /// by the Mesh to a PasswordProfile. /// </summary> /// <param name="SignedProfile">A signed password profile.</param> /// <param name="PersonalProfile">The personal profile to link the Password Profile to.</param> /// <returns>Inner PasswordProfile if the Signed Profile contains one, /// otherwise null.</returns> public static PasswordProfile Get(SignedProfile SignedProfile, PersonalProfile PersonalProfile) { var Result = SignedProfile.Inner as PasswordProfile; if (Result == null) { throw new Throw("Not a password profile."); } Result.Link(PersonalProfile); return (Result); }
/// <summary> /// Having read a tag, process the corresponding value data. /// </summary> /// <param name="JSONReader">The input stream</param> /// <param name="Tag">The tag</param> public override void DeserializeToken (JSONReader JSONReader, string Tag) { switch (Tag) { case "Account" : { Account = JSONReader.ReadString (); break; } case "Profile" : { Profile = SignedProfile.FromTagged (JSONReader) ; // A tagged structure break; } default : { base.DeserializeToken(JSONReader, Tag); break; } } // check up that all the required elements are present }
/// <summary> /// Publish a signed profile entry to the mesh. /// </summary> /// <param name="SignedProfile">The profile to publish</param> /// <returns>The service response.</returns> public PublishResponse Publish(SignedProfile SignedProfile) { var PublishRequest = new PublishRequest(); PublishRequest.Entry = SignedProfile; var PublishResponse = MeshService.Publish(PublishRequest); return PublishResponse; }
public static void Dump(SignedProfile Item) { if (Item == null) return; // elide signature for now. Dump(Item as SignedPersonalProfile); Dump(Item as SignedApplicationProfile); }
/// <summary> /// Convenience function that converts a generic Signed Profile returned /// by the Mesh to a PasswordProfile. /// </summary> /// <param name="SignedProfile">Generic signed profile</param> /// <returns>Inner PasswordProfile if the Signed Profile contains one, /// otherwise null.</returns> public static SSHProfile Get(SignedProfile SignedProfile) { return SignedProfile.Inner as SSHProfile; }
/// <summary> /// Construct an instance from the specified tagged JSONReader stream. /// </summary> /// <param name="JSONReader">Input stream</param> /// <param name="Out">The created object</param> public static void Deserialize(JSONReader JSONReader, out JSONObject Out) { JSONReader.StartObject (); if (JSONReader.EOR) { Out = null; return; } string token = JSONReader.ReadToken (); Out = null; switch (token) { case "PublicKey" : { var Result = new PublicKey (); Result.Deserialize (JSONReader); Out = Result; break; } case "SignedData" : { var Result = new SignedData (); Result.Deserialize (JSONReader); Out = Result; break; } case "EncryptedData" : { var Result = new EncryptedData (); Result.Deserialize (JSONReader); Out = Result; break; } case "Connection" : { var Result = new Connection (); Result.Deserialize (JSONReader); Out = Result; break; } case "Entry" : { var Result = new Entry (); Result.Deserialize (JSONReader); Out = Result; break; } case "SignedProfile" : { var Result = new SignedProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "Profile" : { Out = null; throw new Exception ("Can't create abstract type"); } case "SignedDeviceProfile" : { var Result = new SignedDeviceProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "DeviceProfile" : { var Result = new DeviceProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "DevicePrivateProfile" : { var Result = new DevicePrivateProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "SignedMasterProfile" : { var Result = new SignedMasterProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "MasterProfile" : { var Result = new MasterProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "SignedPersonalProfile" : { var Result = new SignedPersonalProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "PersonalProfile" : { var Result = new PersonalProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "SignedApplicationProfile" : { var Result = new SignedApplicationProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "EncryptedProfile" : { var Result = new EncryptedProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "ApplicationProfile" : { var Result = new ApplicationProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "ApplicationProfilePrivate" : { var Result = new ApplicationProfilePrivate (); Result.Deserialize (JSONReader); Out = Result; break; } case "ApplicationProfileEntry" : { var Result = new ApplicationProfileEntry (); Result.Deserialize (JSONReader); Out = Result; break; } case "EscrowEntry" : { var Result = new EscrowEntry (); Result.Deserialize (JSONReader); Out = Result; break; } case "OfflineEscrowEntry" : { var Result = new OfflineEscrowEntry (); Result.Deserialize (JSONReader); Out = Result; break; } case "OnlineEscrowEntry" : { var Result = new OnlineEscrowEntry (); Result.Deserialize (JSONReader); Out = Result; break; } case "EscrowedKeySet" : { var Result = new EscrowedKeySet (); Result.Deserialize (JSONReader); Out = Result; break; } case "ConnectionRequest" : { var Result = new ConnectionRequest (); Result.Deserialize (JSONReader); Out = Result; break; } case "SignedConnectionRequest" : { var Result = new SignedConnectionRequest (); Result.Deserialize (JSONReader); Out = Result; break; } case "ConnectionResult" : { var Result = new ConnectionResult (); Result.Deserialize (JSONReader); Out = Result; break; } case "SignedConnectionResult" : { var Result = new SignedConnectionResult (); Result.Deserialize (JSONReader); Out = Result; break; } default : { throw new Exception ("Not supported"); } } JSONReader.EndObject (); }
/// <summary> /// Deserialize a tagged stream /// </summary> /// <param name="JSONReader">The input stream</param> /// <returns>The created object.</returns> public static new SignedProfile FromTagged (JSONReader JSONReader) { SignedProfile Out = null; JSONReader.StartObject (); if (JSONReader.EOR) { return null; } string token = JSONReader.ReadToken (); switch (token) { case "SignedProfile" : { var Result = new SignedProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "SignedDeviceProfile" : { var Result = new SignedDeviceProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "SignedMasterProfile" : { var Result = new SignedMasterProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "SignedPersonalProfile" : { var Result = new SignedPersonalProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "SignedApplicationProfile" : { var Result = new SignedApplicationProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "SignedConnectionRequest" : { var Result = new SignedConnectionRequest (); Result.Deserialize (JSONReader); Out = Result; break; } case "SignedConnectionResult" : { var Result = new SignedConnectionResult (); Result.Deserialize (JSONReader); Out = Result; break; } default : { //Ignore the unknown data //throw new Exception ("Not supported"); break; } } JSONReader.EndObject (); return Out; }
/// <summary> /// Deserialize a tagged stream /// </summary> /// <param name="JSONReader">The input stream</param> /// <returns>The created object.</returns> public static new Entry FromTagged (JSONReader JSONReader) { Entry Out = null; JSONReader.StartObject (); if (JSONReader.EOR) { return null; } string token = JSONReader.ReadToken (); switch (token) { case "Entry" : { var Result = new Entry (); Result.Deserialize (JSONReader); Out = Result; break; } case "SignedProfile" : { var Result = new SignedProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "SignedDeviceProfile" : { var Result = new SignedDeviceProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "SignedMasterProfile" : { var Result = new SignedMasterProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "SignedPersonalProfile" : { var Result = new SignedPersonalProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "SignedApplicationProfile" : { var Result = new SignedApplicationProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "SignedConnectionRequest" : { var Result = new SignedConnectionRequest (); Result.Deserialize (JSONReader); Out = Result; break; } case "SignedConnectionResult" : { var Result = new SignedConnectionResult (); Result.Deserialize (JSONReader); Out = Result; break; } case "Profile" : { Out = null; throw new Exception ("Can't create abstract type"); } case "DeviceProfile" : { var Result = new DeviceProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "MasterProfile" : { var Result = new MasterProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "PersonalProfile" : { var Result = new PersonalProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "ApplicationProfile" : { var Result = new ApplicationProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "EncryptedProfile" : { var Result = new EncryptedProfile (); Result.Deserialize (JSONReader); Out = Result; break; } case "ApplicationProfilePrivate" : { var Result = new ApplicationProfilePrivate (); Result.Deserialize (JSONReader); Out = Result; break; } case "EscrowEntry" : { var Result = new EscrowEntry (); Result.Deserialize (JSONReader); Out = Result; break; } case "OfflineEscrowEntry" : { var Result = new OfflineEscrowEntry (); Result.Deserialize (JSONReader); Out = Result; break; } case "OnlineEscrowEntry" : { var Result = new OnlineEscrowEntry (); Result.Deserialize (JSONReader); Out = Result; break; } default : { //Ignore the unknown data //throw new Exception ("Not supported"); break; } } JSONReader.EndObject (); return Out; }