public async Task SimpleAuthTest() { var database = new Butterfly.Core.Database.Memory.MemoryDatabase(); //var database = new Butterfly.MySql.MySqlDatabase("Server=127.0.0.1;Uid=test;Pwd=test!123;Database=butterfly_auth_test"); await TruncateData(database); await database.CreateFromResourceFileAsync(Assembly.GetExecutingAssembly(), "Butterfly.Core.Auth.Test.db.sql"); database.SetDefaultValue("id", tableName => Guid.NewGuid().ToString()); database.SetDefaultValue("created_at", tableName => DateTime.Now.ToUnixTimestamp()); database.SetDefaultValue("updated_at", tableName => DateTime.Now.ToUnixTimestamp()); database.AddInputPreprocessor(BaseDatabase.RemapTypeInputPreprocessor <DateTime>(dateTime => dateTime.ToUnixTimestamp())); AuthManager authManager = new AuthManager(database, onForgotPassword: user => { logger.Debug($"onForgotPassword():user={user}"); return(Task.FromResult(0)); }); UserRefToken registerAuthToken = await authManager.RegisterAsync(new { username = "******", first_name = "John", last_name = "Smith", email = "*****@*****.**", password = "******" }); AuthToken authToken = await authManager.AuthenticateAsync(UserRefTokenAuthenticator.AUTH_TYPE, registerAuthToken.id); await authManager.ForgotPasswordAsync("johnsmith"); await Task.Delay(30000); }
public static async Task SendPhoneNotifyMessage(INotifyMessageSender notifyMessageSender) { IDatabase database = new Butterfly.Core.Database.Memory.MemoryDatabase(); await database.CreateFromResourceFileAsync(Assembly.GetExecutingAssembly(), "Butterfly.Notify.Test.db.sql"); database.SetDefaultValue("id", tableName => Guid.NewGuid().ToString()); database.SetDefaultValue("created_at", tableName => DateTime.Now); var notifyMessageManager = new NotifyManager(database, phoneNotifyMessageSender: notifyMessageSender); notifyMessageManager.Start(); var notifyMessage = new NotifyMessage("+1 316 712 7412", "+1 316 555 1212", null, "Just testing", null); using (ITransaction transaction = await database.BeginTransactionAsync()) { await notifyMessageManager.Queue(transaction, notifyMessage); } await Task.Delay(200000); }
public static async Task SendEmailNotifyMessage(INotifyMessageSender notifyMessageSender) { IDatabase database = new Butterfly.Core.Database.Memory.MemoryDatabase(); await database.CreateFromResourceFileAsync(Assembly.GetExecutingAssembly(), "Butterfly.Notify.Test.db.sql"); database.SetDefaultValue("id", tableName => Guid.NewGuid().ToString()); database.SetDefaultValue("created_at", tableName => DateTime.Now); var notifyMessageManager = new NotifyManager(database, emailNotifyMessageSender: notifyMessageSender); notifyMessageManager.Start(); var notifyMessage = new NotifyMessage("*****@*****.**", "*****@*****.**", "Test SES", "Just testing", null); using (ITransaction transaction = await database.BeginTransactionAsync()) { await notifyMessageManager.Queue(transaction, notifyMessage); await transaction.CommitAsync(); } await Task.Delay(200000); }
static void Main(string[] args) { using (var ctx = new Butterfly.EmbedIO.EmbedIOContext("http://+:8000/")) { // Create database var database = new Butterfly.Core.Database.Memory.MemoryDatabase(); database.CreateFromSqlAsync(@"CREATE TABLE contact ( id VARCHAR(50) NOT NULL, first_name VARCHAR(40) NOT NULL, last_name VARCHAR(40) NOT NULL, PRIMARY KEY(id) );").Wait(); database.SetDefaultValue("id", table => $"{table.Abbreviate()}_{Guid.NewGuid().ToString()}" ); // Define the Web API ctx.WebApi.OnPost("/api/contact/insert", async(req, res) => { var record = await req.ParseAsJsonAsync <Dict>(); await database.InsertAndCommitAsync <string>("contact", record); }); ctx.WebApi.OnPost("/api/contact/update", async(req, res) => { var record = await req.ParseAsJsonAsync <Dict>(); await database.UpdateAndCommitAsync("contact", record); }); ctx.WebApi.OnPost("/api/contact/delete", async(req, res) => { var id = await req.ParseAsJsonAsync <string>(); await database.DeleteAndCommitAsync("contact", id); }); // Define the Subscription API ctx.SubscriptionApi.OnSubscribe( "all-contacts", (vars, channel) => database.CreateAndStartDynamicViewAsync( "SELECT * FROM contact", dataEventTransaction => channel.Queue(dataEventTransaction) ) ); // Start the web server and wait ctx.Start(); Console.ReadLine(); } }
// Using async Task Main() requires adding <LangVersion>latest</LangVersion> to .csproj file static async Task Main(string[] args) { logger.Info("Main()"); using (var embedIOContext = new Butterfly.EmbedIO.EmbedIOContext("http://+:8000/")) { // Create a MemoryDatabase (no persistence, limited features) var database = new Butterfly.Core.Database.Memory.MemoryDatabase(); await database.CreateFromSqlAsync(@"CREATE TABLE todo ( id VARCHAR(50) NOT NULL, name VARCHAR(40) NOT NULL, PRIMARY KEY(id) );"); database.SetDefaultValue("id", tableName => $"{tableName.Abbreviate()}_{Guid.NewGuid().ToString()}"); // Listen for API requests embedIOContext.WebApi.OnPost("/api/todo/insert", async(req, res) => { logger.Info("/api/todo/insert"); var todo = await req.ParseAsJsonAsync <Dict>(); await database.InsertAndCommitAsync <string>("todo", todo); }); embedIOContext.WebApi.OnPost("/api/todo/delete", async(req, res) => { logger.Info("/api/todo/delete"); var id = await req.ParseAsJsonAsync <string>(); await database.DeleteAndCommitAsync("todo", id); }); // Listen for subscribe requests... // - The handler must return an IDisposable object (gets disposed when the channel is unsubscribed) // - The handler can push data to the client by calling channel.Queue() embedIOContext.SubscriptionApi.OnSubscribe("todos", (vars, channel) => { string clientName = vars?.GetAs("clientName", ""); logger.Info($"OnSubscribe():todos,clientName={clientName}"); return(database.CreateAndStartDynamicViewAsync("todo", dataEventTransaction => { var eventTypes = string.Join(",", dataEventTransaction.dataEvents.Select(x => x.dataEventType.ToString())); logger.Info($"clientName={clientName},eventTypes={eventTypes}"); channel.Queue(dataEventTransaction); })); }); embedIOContext.Start(); Console.ReadLine(); } }