Coder Social home page Coder Social logo

arduosoft / rawcms Goto Github PK

View Code? Open in Web Editor NEW
170.0 13.0 71.0 3.66 MB

RawCMS is the headless CMS written in asp.net core build for developers that embraces API first technology. Please give us a feedback!

Home Page: https://forms.gle/wvu1HF9P52ZdXujv6

License: GNU General Public License v3.0

C# 71.74% HTML 6.84% Dockerfile 0.16% Batchfile 0.01% JavaScript 20.35% CSS 0.32% Shell 0.59%
headless-cms help-wanted contributions-welcome vue dotnet-core mdm api-gateway low-code looking-for-contributors hacktoberfest

rawcms's Introduction

RawCMS is a headless CMS written in ASP.NET Core, built for developers that embrace API-first technology. RawCMS uses MongoDB as its data storage and is ready to be hosted on Docker containers.

CodeFactor Build status Tweet Join the chat at https://gitter.im/arduosoft/RawCMS-Headless-CMS-Aspnet

Contribution

We are actively seeking contribution to continue improving our open source project. Any kind of help is welcome. Just a star on the project is a lot. If you would like to contribute as a developer, you can join the project by filling out this form or by opening an issue. Any other kind of contribution, from docs to tests, is also welcome.

๐Ÿ“ฃ Please fill out our fast 5-question survey so that we can learn what do you think about RawCMS, how you are using it, and what improvements we should make. Thank you! ๐Ÿ‘ฏ

Key Benefits and Advantages

โš’ Data Modelling without coding

Whether you're dealing with web apps, mobile apps or client application, just forget about all data management effort. All you will need with RawCMS is to define your data structure and relationships, using a simple and intuitive UI. Simply say stop to the boring repetitive code!

๐ŸŽ› Agnostic and Universal Framework for your Data

Due to the API approach, RawCMS is very flexible and adapts perfectly to all use cases. Using GraphQL or REST standard RawCMS can be used by everybody without any headhaches. This gives you a solid and modern foundation for your project.

๐Ÿš€ Ready to use

Built on top of the well-known .net core framework, RawCMS can be deployed on every platforms in a click. No longer are there concerns about OS licenses or portability, just run it. Benefit from all existing Symfony Components and Bundles provided by the community, or create your own Bundles to extend projects with reusable components.

๐Ÿ’Ž Your backend consolidated in one Platform

No more point-to-point integration, multiple tools, or expenses. You can consolidate Log Collecting, Api Gateway, Translation, Session Storage and CMS in one, simple, free platform.

โœจ๏ธ Modern and Intuitive Architecture

We love quality software design and aim to help others on building wonderful applications! Using RawCMS you will keep you architecture clean and efficient.

Architectural Prospective

With RawCMs you have a central platform that manages most critical services, making them a commodity. You only have to focus on the UI development and on implementation of business logins. No more stress on deploying services or selecting online tools. You simply have a well-kept, and free, Content Management System.

Use RawCms brings to a clean and easy to manage infrastructure, compared to the traditional design. You have a meshed connected system, with multiple services that talks together. The old style approach is hard to mantain and costly.

The resulting program is possible thanks to the modular and scalable RawCMS architecture. See the key points:

  1. Modular: Each module is shipped in a NuGet package that can be added to the system to gain new features
  2. Headless: RawCMS doesn't include any presentation logic. All presentation is delegated to the caller. This aims to create a scalable and reusable system
  3. Packaged: RawCMS must be shipped into a single deployable package or added into an existent ASP.NET Core application as a NuGet package.
  4. Extensible: RawCMS must be customized by the user through extension only. So no changes to the code will be done, just adding new packages.
  5. Buildless: RawCMS must give the possibility to manage an installation without the need to manage a codebase or a code repository. It will be possible to add lambdas code at runtime.
  6. Caller Friendly: Produce data in many formats to help integration (Odata, GraphQL)

Preview and Demo

Data Modeling

Data modeling is based off a simple UI that allows for flexible field definition and relational table in a single click.

Data Entry

Categories may be entered manually for configuration of data entered.

Searching

Using the full capabilities offered by MongoDB, data can be queried with speed and finesse.

Hook

Directly through the UI, data can be added or altered with ease.

Portable settings

All the settings configured by UI are stored in json format and can be ported form one environment to another (by a copy and paste or using the cli)

Custom endpoints

Low Level Features

  • Store and filter any data using MongoDB expression
  • Docker container ready
  • Data validation
  • Possibility to add business logic on the backend
  • Authentication against external Oauth2 server
  • Provide Oauth2 tokens and store users into local DB
  • Possibility to create a custom endpoint
  • Upsert and incremental update
  • GraphQL data query
  • Api Gateway
  • Relation between entities

Live Demo (CMS, Lambdas, User management, GraphQL)

This app runs in Heroku free tier

URL: http://rawcms-demo.herokuapp.com/

Username: bob

Password: XYZ

You can follow this tutorial for a quick start.

Getting Started

RawCMS is dockerized from the development stage so modern hosting is fully supported. Here are a few options for deployment.

  1. Docker Compose using the provided docker-compose file
  2. Kubernetes using the provided docker images
  3. Heroku using the provided images

Or within the command line:

wget https://raw.githubusercontent.com/arduosoft/RawCMS/master/docker/docker-compose-prod.yml -o docker-compose.yml # or download it manually ;-)
docker-compose up

License

This software is published under the GNU General Public License v3.

rawcms's People

Contributors

aaqibwiki avatar abimael-o-o avatar alti21 avatar chan18 avatar chriswmercer avatar dansr81 avatar eekbatani avatar girardengo avatar gitter-badger avatar hkiiita avatar imanishbarnwal avatar kayla312 avatar keggyy avatar marcuson avatar mikehigginbottom avatar mirkoconti avatar nel417 avatar priyanshbalyan avatar shayneofficer avatar tokarzkj avatar tymurmirzaiev avatar zarekparker avatar zeppabot avatar zeppaman 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

rawcms's Issues

Log Search panel

User story

Add a log search panel to seach into logs

task

  • Add a new menu entry on the left menu called 'Logs'.
  • Link the previous entry to a new view
  • The view should show an input box with a search button on top and a text area or similar on the rest of the page. The user can input the search text in the box and click on the button. The results will be shown on the text area below.
  • Improve documentation of FullText plugin (https://github.com/arduosoft/RawCMS/blob/master/docs/FullText.md)

acceptance criteria

On button click, the FE app should invoke the API to search log (see https://github.com/arduosoft/RawCMS/blob/master/docs/FullText.md). Results should be shown on a text area below. Documentation of Full Text plugin should properly explain how to invoke the API and how this new FE view is done.

Collection creation - change

Now collection is created if caller POST to it an entity.

  1. using config let sysadmin to define if collection can be added dynamically or only if specified in schema
  2. change the way to check if a collection exist. All collection must be loaded at startup and this list have to be used to understand if collection exists or not.

setup of project

User story

Create a stable project to host all modules. web ui should be dynamic and add feature with modules activation.

Task

Create the project scaffolding

Conventional Commit-3

User story

create an hook that intercept commit messages using hook.
https://git-scm.com/book/pl/v2/Customizing-Git-Git-Hooks

task

write here how to implement the feature. use checklist to divide the whole work in smaller parts

solution 1 : home made

This git hook must parse the commit messages using conventional code. Each line will be a message.
All info will be added to changelog file automatically.

By convention changelog will have following structure:

# TITLE
description
## last realease

## previous release

Commmit lines will be added under last release section, separated by type. During relase a new section will be added.

solution 2 : tool made

use a tool to automatically generate changelog file before commit. The output will be the best we can using this tool.
https://github.com/conventional-changelog/conventional-changelog

acceptance criteria

  • during commit changelog is altered\generande BEFORE commit
  • after commit in git there is the file version WITH changes
  • changelog is redable and useful for final users.

Refactor on AppEngine

What to do:

  • : move reflection helper methods outside the appengine
  • : move all DI driven information to regular DI engine (or autofac, if needed)
  • : refactor the code
  • : test

expose additional entities to support UI implementation

User story

expose additional entities to support UI implementation

task

write here how to implement the feature. use checklist to divide the whole work in smaller parts

acceptance criteria

what functional and technical requirement must be respected to consider the feature woking (even if program works).

Internal Server Error on crud service if Authorization in header

Issue
Internal server error when crud service are called with Authorization in header

To Reproduce

Steps to reproduce the behavior:

using client (after logging in ):

dotnet RawCMS.Client.dll insert -c test -f /tmp/test.json

where /tmp/test.json are simple json with some data and test are collection where we want to save data.

using RestSharp:


string Token="<token>"; 
string ulr = "<url>"; // ie. http://localhost:5000/api/crud/test
string Data = "<data to save in collection>";

RestClient client = new RestClient(url);
RestRequest request = new RestRequest(Method.POST)
{
    //request headers
    RequestFormat = DataFormat.Json
};
request.AddHeader("Content-Type", "application/json");

//add parameters and token to request
request.Parameters.Clear();
request.AddParameter("application/json", Data, ParameterType.RequestBody);
request.AddParameter("Authorization", "Bearer " +Token, ParameterType.HttpHeader);

//make the API request and get a response
IRestResponse response = client.Execute(request);

Expected behavior
data saved in collection

Results
Internal server error.

Authentication-20

User story

Raw CMS will be integrated with identity server. This will allow to act as identity server (and federate other resource server via introspection or jwt) or take part as resouce server to a oauth based infrastucrure.

task

Basing on configuration RawCMS will change identity server configuration. This will be transparent for lambda that will recognise user and roles (no matter where they came from).
In case of integrated identity server with local user, external app will came to rawcms to authenticate user using identiy server urls. Then the token will be used for interactions with RawCMS or thid party application that are federate over RawCMS.
In case of using RawCMS as resource server, application will take tokens from outside system.

About identity server implementation on mongodb, this is the only working example I found

acceptance criteria

  • user will be able to drive config by config files
  • app can autenticate on external system
  • app provide internal standalone auth mechanism

401 not working

Describe the bug
whenRawAuthorizationAttribute send 401 connection is dropped instead of a valid response

To Reproduce
Steps to reproduce the behavior:

  1. add apidaminkey to auth config
  2. Send a request on http://localhost:28436/system/Admin/_users without authorization header

Expected behavior
connection is dropped

Additional context
Add any other context about the problem here.

Cli interface

User story

Create a Cli application (.exe), based on .net core that manage:

  • first parameter the commend to execute
  • parameters used fro command.

task

microframework can be used to manage arguments [this is a valid example] (https://github.com/commandlineparser/commandline)

Commands:

  • list (entity type): list all entries for a given entity type
  • save (entity type, file path): save file document into collection.
  • remove (entity type, id ): remove entity from database collection
  • sync: take all items into current dir, in the way that
    • folder name match collection name
    • all items inside the folder will be saved (upsert)
    • all items in database not found in file system will be deleted (-- delete options)
    • user can have a dry run to see what will append befor apply changes (--dry-run)

raw-cli

Examples

raw-cli list users
raw-cli list users -id 24
raw-cli save users -f user.json
raw-cli remove users -id 34
raw-cli sync --project-folder C:\test\ --delete --dry-run

note list and remove take id arguments as imput. in this case all arguments are applied by name\value and all parameters compose document sample to use for query data.

All interaction will be using CRUD service into application.

login

After task for autentication, login\logout commands will be added to command list. Basically login will take the authorization token while logout will clear\revoke it.

acceptance criteria

  • user can run cli to change config without accessing database

  • user can run cli to sycn configuration

  • logging

  • login

  • login kubernetes like

  • list

  • save\update

  • sync from folder (with --delete option)

  • dryrun

  • delete

Login

User story

Create login page.

task

  • login page

acceptance criteria

what functional and technical requirement must be respected to consider the feature woking (even if program works).

Share Collection Schema Data Fetch

task

Entity Validation and Collection schema service duplicate same logic. Solution:

  • move all logit to collection schema and privide to grpahQL and Entity validation
  • make configuration static as per Entity validation to avoid continuous reload

acceptance criteria

Into CollectionSchemaService id and audit fields are added by design, so the user dont need to add it manually on schema definition

Authentication

Integrate authentication. This must be configurable and almost support:

  • RawCMS as Identity server
  • RawCMS ad federated resource

Target is to use standard library from asp.net core and allow user to configure it at runtime. Configuration will be stored in regular config store.

notes

  • add _id & audit on GraphQL mapping by default
  • fulltext indexing: implement delete
  • log doubled
  • base path for log relative to the solution /log + gitignore
  • dev on https
  • dockercompose for developing (with database seed)
  • change index creation from get to post

Dynamic edit form

User story

create a form that, for a single record of an entity allow insert, edit or delete.

task

write here how to implement the feature. use checklist to divide the whole work in smaller parts

acceptance criteria

what functional and technical requirement must be respected to consider the feature woking (even if program works).

Postman test suite

We need to create a test suite starting from the test postman collection inside the doc folder.

This will allow having a replicable test suite.

Case Username

Username is case sensitive and work only if is write on upper case.

In _users collection i have:

{"_id":"5c716e09efb5283144ec154a","UserName":"ema","NormalizedUserName":"ema","Email":"[email protected]","NormalizedEmail":"[email protected]","Roles":[],"Metadata":{},"_createdon":"2018-12-23T17:43:50.2602188+01:00","_modifiedon":"2018-12-23T17:43:50.266117+01:00","PasswordHash":"WFla"}

and I unable to get token, if change NormalizedUserName in upper case all work

Dynamic data list

User story

This list, for a given entity, diplay a data grid with all data paged, sorted and filterd

task

  • pagination
  • sorting
  • filtering

acceptance criteria

Dev portal

User story

Add a page called dev portal with link to swagger and graphi and docs

task

write here how to implement the feature. use checklist to divide the whole work in smaller parts

acceptance criteria

what functional and technical requirement must be respected to consider the feature woking (even if program works).

Keystore abstraction

User story

the user want to store keys data to other system than memory

task

create a class abstraction and use a lambda to provide it to make possible an implementation of a custom provider

acceptance criteria

the system works as expected

make all async

User story

all methods now are sync, that have to be moved to async

Related collections inside graphql

Hi there, I have contacted you in regards runtime schema in graphql on gitter. I have seen your example which is pretty cool, but couldn't reporoduce anything like it in SQL, or lets say I could partially, but the problem is that my fields are all of the same type, and that my related tables cannot get loaded, I seen that in mongodb you have a object navigational propertywith which you check if a collection is a navigation property.

Do you have any advice on how to do it with a sql, or lets say a table relationship?

You can mark this as a question.

Title on app top bar

User story

For now, the title of each section of the FE app is placed under the app top bar, above any other content. The idea is to place such title in the top bar itself in the center (see image below, example based on entities route).
image

Task

The current title to show in the top bar should be stored inside Vuex. You can edit the Vuex store configuration in file raw-cms-app/modules/core/config.js and add a new property on state, e.g. called topBarTitle, with related mutation and action (see https://vuex.vuejs.org/ for more info on Vuex). Then the top bar should have a computed property which reads the title on Vuex state and renders it in the template.

Acceptance Criteria

This is the expected final result (example based on entities route):
image
The title on the top bar should update according to current active route.

Log as Lambda-5

User story

We wanto do give user the possibility to log everyting and alter logs introducing multiple logger.

task

Solution:

  • implement our custom logger service.

  • implement a log lambda

    System will use always logger service. Logger service will trigger all logger lambda added to the system.
    Nlog lambda will be provided as default (in the way that all will be logged as standard log.)

    User will be free to add custom lambda logging that will receive logging message and also event trigger notification.

acceptance criteria

  • without any config app will continue logging on text file or nlog target
  • user will be able to add custom loggers
  • no overhead on logging time (except custom code time)

CRUD on entities

User story

Create a CRUD on entities to manage schema

task

  • show list
  • show detail
  • create
  • update
  • delete

acceptance criteria

what functional and technical requirement must be respected to consider the feature woking (even if program works).

Spelling/Grammar Mistakes in ReadMe

Description
There are several grammar and spelling mistakes in the readMe that compromise the readers experience and comprehension of the information.

rReproduction
Scroll down to readMe content on the repository home page. If the mistakes are not clear, copy and paste them into a word processor such as Microsoft Word, and it will highlight all the spelling and grammar issues.

Expected vs Actual behavior
Some of many examples:
Expected: "Technical Documentation
Actual: "Tecnical Documentation

Screenshots

image

Additional context
I'll proceed to correcting all the spelling and grammar mistakes to enhance the reading experience of the readMe file.

Crud Service Refactor

Create an interface for crud service, and move implementation to "MongoDBCRUDService". This will allow to change implementation using regular asp.net core DI.

Review wiki and documentation

Documentation needs to be reviewed to remove grammars error and improved to be largely understood.

During this review you should put in user shoes and notes all point that are not clear or section that have to be expanded.

.net core 3

User story

Port project to .net 3.0

task

change the target framework and test all

acceptance criteria

all works as with the framework 2

Field management

User story

manage add end edit of filed using a popup

  • Using Monaco editor
  • Using form

No connection could be made because the target machine actively refused it.

screen shot of error

network error

To Reproduce
Steps to reproduce the behavior:
1 - start the back end
2 - start the front end
3- login to the app.

Expected behavior

  • it has to show list of users
    image

Desktop

  • OS: Windows 10 pro
  • Browser: firefox browser
  • Version: 71.0 (64-bit)

Additional context
When i cloned the repo, i did built the app, the port has changed after the building, So i configured to respective prot in my env.json file for my vue app. Then i tried to login. Then this error show up.

Plugin compilation

User story

the developer want to compile and package plugin code automatically. Now he have to compile the single project, that copy output to plugin directory and it is a loose of time

task

add a nuget package or a specific configuration to compile and copy code automatically.

Make all async

User story

all method in the chain mus be async

task

make controller, services and lambda async

acceptance criteria

no regression

Configuration

Using _config collection user will store settings.
Application will read all settings from collection. Environment name will be the only parameter from file config.

{
 "Name": "pluginname",
 settings:
 {
    **custom values here**
 }
}

Each plugin will receive only its configuration (settings node) as jObject.

configuration api

As each regular entity _config collection will be available using admin controller.

Adding roles support for schema

User story

I want to add authorized role list into collection schema ancd then validate crud calls based on user claims

task

Add fields on collection schema, tihis should be enough to save/restore roles info. Add a lambda on query and presave \ predelete to block unauthirized request

Login page not login on enter hit

The enter on login pagin do not trigger page submit

To Reproduce
add username and password then hit enter button

Expected behavior
The submit happen and if credential are correct it login

no check for collection on insert\update

Describe the bug
Now collection is created if caller POST to it an entity.

using config let sysadmin to define if collection can be added dynamically or only if specified in schema
change the way to check if a collection exist. All collection must be loaded at startup and this list have to be used to understand if collection exists or not.

To Reproduce
Create a new entity inside a existing collection, code will try to create it

sonarlint config - 3

User story

code must be validated using sonarlint

task

integrate sonalint an solve code issues, changing configuration using rule that make sense.

acceptance criteria

  • sonarlin is working
  • sonarling report 0 erroros

Monaco code snippet

User story

Add the possibility on entity management for supporting monaco editor for javascript lambda

task

write here how to implement the feature. use checklist to divide the whole work in smaller parts

acceptance criteria

what functional and technical requirement must be respected to consider the feature woking (even if program works).

Api gateway module

User story

Add a module that will provide an apigateway

task

write here how to implement the feature. use checklist to divide the whole work in smaller parts

acceptance criteria

what functional and technical requirement must be respected to consider the feature woking (even if program works).

unload\load plugins

User story

the plugin must be loaded \ unload at runtime

task

create a contoller on core that reload the plugins by appengine

acceptance criteria

it is possible to reload or unload a plugin without restarting the app

Dashboard

User story

create a welcome page with some indicators (i.e. #records, #entities, #call during last week)

task

  • BE See issue #139
  • FE

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.