Git Product home page Git Product logo

magic's Introduction

An AI-based Low-Code and No-Code Software Development Automation Framework

IMPORTANT - Magic is no longer open source. You can read the arguments here. We will keep this repository as is, but it should be considered "legacy" and will no longer receive any updates, fixes, or changes. All work is currently committed to a closed source fork of this repository, which inevitably over time will rapidly make this repository insecure and obsolete for obvious reasons.

Magic Cloud is a software development automation platform created and maintained by AINIRO.IO based upon AI, Low-Code, and No-Code. It's based upon Hyperlambda, allowing you to dynamically create and orchestrate workflows, almost within a "drag'n'drop development environment".

Editing code in HyperIDE

In addition to its workflows, Magic also comes with a CRUD generator, allowing you to point it at your database, click a button, and wrap all your tables into CRUD endpoints. Combined with its workflow capabilities, this can sometimes save you 90% of your time when delivering backend APIs. Magic is built on top of .Net 8 and Angular.

CRUD generator

Magic comes with Docker containers and is easy to install, but AINIRO.IO also hosts Magic for a fee.

Modules

Magic was created to make it very easy to create small and medium sized backend APIs, and contains components for all problems related to backend development. For more information about Magic, please refer to its documentation below.

License

This project, and all of its satellite project, is licensed under the terms of the GPL license version 3, as published by the Free Software Foundation unless an explicit and signed exception has been provided by Thomas Hansen its copyright owner. See LICENSE file for details. For licensing inquiries you can contact Thomas Hansen [email protected]

Copyright and maintenance

The projects is copyright of Thomas Hansen, Ltd 2021 - 2023, and professionally maintained by AINIRO.IO.

magic's People

Contributors

arianygard avatar dependabot[bot] avatar gaprogman avatar hflexgrig avatar mshafiey avatar orthimnas avatar polterguy avatar siegeon avatar sweetsh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

magic's Issues

Relationships among model classes

In real projects, of all but simplest complexity, model classes often relate to each other via one-to-one, one-to-many, or many-to many navigational properties.

Perhaps it would be a good idea to add a master-detail example to the project. Or at least some guidance, on where the best extensibility points are to implement models with navigational properties.

Thank you.

Better handling of read-only CodeMirror editors

Preferably different theme for read only CodeMirror instances, to separate them from other editors. Such as for instance in the "Endpoints" menu item, the result of invocations, etc ...

More filtering features in Crypto

Not using dropdown to filter on client in requests among other things, since this requires loading every single public key in the system, which in theory might be a lot of keys.

Implement statistical charts on Logs menu item

And hook into semantic log parsing such as "We successfully authenticated", etc - To count and group items according to types, in all different forms, to provide more high level data of what the log actually contains.

Namespacing the CRUDifier's result

Such that you can override its "root folder", which by default would be the database name, but could be overridden to allow for making it a custom choice.

Getting types from assemblies

In a few places throughout the code, while configuring services, there are calls like the following:

AppDomain.CurrentDomain.GetAssemblies()
                .SelectMany(s => s.GetTypes())

If I understand the intention correctly, you do not want types from all of the domain assemblies, perhaps limiting the call to your assemblies only is needed. Maybe something like this, instead:

AppDomain.CurrentDomain.GetAssemblies()
                .Where(a => a.FullName.Contains("magic."))
                .SelectMany(s => s.GetTypes())

HTH

More features in Logs dashboard menu item

Such as a "filter by type" dropdown, etc. This can be achieved today by filtering on e.g. "info", but it's not entirely intuitive. Also implement the ability to delete single log entries, etc.

Create frontend endpoint to write to server-side logs

Which also creates a service method in the scaffolded Angular code, allowing you to invoke it from the frontend. Also make sure we're logging IP address of caller, in addition to username, if it's an authenticated user invoking the log endpoint.

FYI, new release coming soon

I've had a lot of downloads, clones, etc the last couple of days due to my DZone article. I just wanted everybody to know that I am working on a release, which will be of more "stable character", and that I'll probably be done with this during the upcoming weekend.

Among some of its features, will be the "signals and slots" parts, refactored and significantly cleaned up code, in addition to a more generic and better "magic.test" module as an integral part, having unit tests for all submodules (auth, email, io and cookie).

If you're not 100% happy with its current code base, please just wait a couple of days, and hopefully I'll be able to make you happy :)

Associate a public key with a bunch of roles

To allow for having the private key becoming more similar in nature to the existing authentication/authorisation - Possibly adding new column in roles table, containing slots allowed to invoke for caller, and appending these into [vocabulary] as we invoke a [whitelist] invocation cryptographically signed by some client.

Security Exception in initial root/root login

I see the exception below in the console, the Setup page detail won't save either

info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0] User profile is available. Using 'C:\Users\jslootweg\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest. Hosting environment: Development Content root path: C:\Work\magic\magic.backend Now listening on: http://localhost:63247 Application started. Press Ctrl+C to shut down. info: Microsoft.AspNetCore.Hosting.Diagnostics[1] Request starting HTTP/1.1 GET http://localhost:63247/ warn: Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware[3] Failed to determine the https port for redirect. info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0] Executing endpoint 'magic.endpoint.controller.EndpointController.Get (magic.endpoint.controller)' info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[3] Route matched with {action = "Get", controller = "Endpoint"}. Executing controller action with signature System.Threading.Tasks.Task1[Microsoft.AspNetCore.Mvc.ActionResult] Get(System.String) on controller magic.endpoint.controller.EndpointController (magic.endpoint.controller).
info: Microsoft.AspNetCore.Mvc.StatusCodeResult[1]
Executing HttpStatusCodeResult, setting HTTP status code 404
info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[2]
Executed action magic.endpoint.controller.EndpointController.Get (magic.endpoint.controller) in 55.1595ms
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint 'magic.endpoint.controller.EndpointController.Get (magic.endpoint.controller)'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished in 209.46720000000002ms 404 text/html
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/1.1 GET http://localhost:63247/magic/modules/system/ping
info: Microsoft.AspNetCore.Cors.Infrastructure.CorsService[4]
CORS policy execution successful.
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint 'magic.endpoint.controller.EndpointController.Get (magic.endpoint.controller)'
info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[3]
Route matched with {action = "Get", controller = "Endpoint"}. Executing controller action with signature System.Threading.Tasks.Task1[Microsoft.AspNetCore.Mvc.ActionResult] Get(System.String) on controller magic.endpoint.controller.EndpointController (magic.endpoint.controller). info: Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor[1] Executing ObjectResult, writing value of type 'Newtonsoft.Json.Linq.JObject'. info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[2] Executed action magic.endpoint.controller.EndpointController.Get (magic.endpoint.controller) in 82.8117ms info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1] Executed endpoint 'magic.endpoint.controller.EndpointController.Get (magic.endpoint.controller)' info: Microsoft.AspNetCore.Hosting.Diagnostics[2] Request finished in 96.7008ms 200 application/json; charset=utf-8 info: Microsoft.AspNetCore.Hosting.Diagnostics[1] Request starting HTTP/1.1 GET http://localhost:63247/magic/modules/system/auth/authenticate?username=root&password=root info: Microsoft.AspNetCore.Cors.Infrastructure.CorsService[4] CORS policy execution successful. info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0] Executing endpoint 'magic.endpoint.controller.EndpointController.Get (magic.endpoint.controller)' info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[3] Route matched with {action = "Get", controller = "Endpoint"}. Executing controller action with signature System.Threading.Tasks.Task1[Microsoft.AspNetCore.Mvc.ActionResult] Get(System.String) on controller magic.endpoint.controller.EndpointController (magic.endpoint.controller).
info: Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor[1]
Executing ObjectResult, writing value of type 'Newtonsoft.Json.Linq.JObject'.
info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[2]
Executed action magic.endpoint.controller.EndpointController.Get (magic.endpoint.controller) in 78.664ms
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint 'magic.endpoint.controller.EndpointController.Get (magic.endpoint.controller)'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished in 94.4521ms 200 application/json; charset=utf-8
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/1.1 GET http://localhost:63247/magic/modules/system/setup/load-config-file
info: Microsoft.AspNetCore.Cors.Infrastructure.CorsService[4]
CORS policy execution successful.
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint 'magic.endpoint.controller.EndpointController.Get (magic.endpoint.controller)'
info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[3]
Route matched with {action = "Get", controller = "Endpoint"}. Executing controller action with signature System.Threading.Tasks.Task1[Microsoft.AspNetCore.Mvc.ActionResult] Get(System.String) on controller magic.endpoint.controller.EndpointController (magic.endpoint.controller). info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[2] Executed action magic.endpoint.controller.EndpointController.Get (magic.endpoint.controller) in 10.4389ms info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1] Executed endpoint 'magic.endpoint.controller.EndpointController.Get (magic.endpoint.controller)' fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1] An unhandled exception has occurred while executing the request. System.Security.SecurityException: Access denied at magic.lambda.auth.helpers.TicketFactory.VerifyTicket(ITicketProvider ticketProvider, String roles) at magic.lambda.auth.VerifyTicket.Signal(ISignaler signaler, Node input) at magic.signals.services.Signaler.Signal(String name, Node input) at magic.lambda.Eval.ExecuteAsync(ISignaler signaler, IEnumerable1 nodes)
at magic.lambda.Eval.SignalAsync(ISignaler signaler, Node input)
at magic.signals.services.Signaler.SignalAsync(String name, Node input)
at magic.endpoint.services.ExecutorAsync.<>c__DisplayClass8_0.<b__1>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at magic.signals.services.Signaler.ScopeAsync(String name, Object value, Func1 functor) at magic.endpoint.services.ExecutorAsync.<>c__DisplayClass8_0.<<ExecuteUrl>b__0>d.MoveNext() --- End of stack trace from previous location where exception was thrown --- at magic.signals.services.Signaler.ScopeAsync(String name, Object value, Func1 functor)
at magic.endpoint.services.ExecutorAsync.ExecuteUrl(String url, String verb, IEnumerable1 args, JContainer payload) at magic.endpoint.services.ExecutorAsync.ExecuteGetAsync(String url, DateTime ifModifiedSince, IEnumerable1 args)
at magic.endpoint.controller.EndpointController.Get(String url)
at lambda_method(Closure , Object )
at Microsoft.Extensions.Internal.ObjectMethodExecutorAwaitable.Awaiter.GetResult()
at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask1 actionResultValueTask) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync() --- End of stack trace from previous location where exception was thrown --- at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|24_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync() --- End of stack trace from previous location where exception was thrown --- at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker) at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>g__Awaited|6_0(ExceptionHandlerMiddleware middleware, HttpContext context, Task task) info: Microsoft.AspNetCore.Hosting.Diagnostics[2] Request finished in 102.3743ms 500 application/json

SQL AutoComplete for SQL CodeMirror editor

To allow for more easily see tables and columns as we create custom SQL. Implement both on "SQL" menu item in front end, and "Custom SQL" CRUDifier, at the bare minimum,

page

hi guys,
How can I define a pageable interface like "/api/controller?page=1&size=50"

Create "what's next" ordered lists on home component

Which informs the user to crudify his magic database, and/or generate a server key pair - Which checks the backend to see if the user has already done this, at which point the list items are hidden on a per item level.

Merge the CRUDify files for MySQL and MS SQL into one

The type of database should be a parameter, since there is way too much code repetition in the logic as it is now.

Also merge the slots for MySQL and MS SQL into one, taking the database type as a parameter, if possible ... (which might be difficult, but thinking about it ...)

Implement ability to load Hyperlambda files "cached"

Through additional slot, that loads the file only the initial loading, for then to cache it upon consecutive requests of the same file. Use some sort of Dictionary<string, Node>, with thread synchronisation, to implement it ...

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.