Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
KHUSHAL_SHAH authored and KHUSHAL_SHAH committed Feb 21, 2019
2 parents 8f721f9 + 4509c7e commit 0f0e92c
Show file tree
Hide file tree
Showing 112 changed files with 9,888 additions and 176 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,8 @@
# Output of the go coverage tool, specifically when used with LiteIDE
*.out

node_modules
css
.sass-cache

space-cloud
76 changes: 76 additions & 0 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# Contributor Covenant Code of Conduct

## Our Pledge

In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.

## Our Standards

Examples of behavior that contributes to creating a positive environment
include:

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting

## Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.

## Scope

This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at [email protected]. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html

[homepage]: https://www.contributor-covenant.org

For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq
13 changes: 13 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
FROM alpine:3.9
WORKDIR /space-cloud
RUN set -ex \
&& apk add --no-cache ca-certificates \
&& apk add --no-cache unzip \
&& wget https://spaceuptech.com/downloads/linux/space-cloud.zip \
&& unzip space-cloud.zip \
&& rm space-cloud.zip \
&& chmod +x space-cloud
ENV PROD=false
ENV PATH="/space-cloud:${PATH}"
EXPOSE 8080
CMD space-cloud run
100 changes: 99 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,100 @@
# Space Cloud
Space Cloud is an open source, high performance web service which provides instant REST APIs on the database of your choice. Build Internet Scale apps with the agility of a prototype! https://spaceuptech.com
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)

<a href="https://discord.gg/ypXEEBr"><img src="https://img.shields.io/badge/chat-discord-brightgreen.svg?logo=discord&style=flat"></a>
<a href="https://twitter.com/intent/follow?screen_name=spaceuptech"><img src="https://img.shields.io/badge/Follow-spaceuptech-blue.svg?style=flat&logo=twitter"></a>

Space Cloud is an open source, high performance web service which provides instant Realtime APIs on the database of your choice. Build Internet Scale apps with the agility of a prototype!

## Table of Contents

- [About Space Cloud](#about-space-cloud)
- [What makes Space Cloud unique](#what-makes-space-cloud-unique)
- [Documentation](#documentation)
- [Getting started](#getting-started)
- [Prerequisites](#prerequisites)
- [Download Space Cloud](#download-space-cloud)
- [Download config file](#download-the-config-file)
- [Start Space Cloud](#start-space-cloud)
- [Download TODO App](#download-the-todo-app)
- [Support & Troubleshooting](#support--troubleshooting)
- [Contributing](#contributing)
- [License](#license)

## About Space Cloud

> Note: Space Cloud is in still in Beta.
Space Cloud is an open-source, high performance web engine which lets you create instant Realtime APIs on most of the databases out there. Written in Golang, it provides a high throughput layer for your backend services. It's completely unopinionated and works with the tech stack of your choice.

Space Cloud is purpose-built to power fast-growing, realtime online services on public, private and hybrid clouds requiring global scale at prototyping agility. Built with extensibility in mind, it provides APIs for you to extend the platform in the form of functions in any language.

## What makes Space Cloud unique?
Space Cloud is a single web engine which integrates with all you back end technologies and exposes them as easy-to-use REST APIs. You can leverage the power of the tools you already love without changing a single line of code. No migrations are necessary. Add new platforms or technologies as needed without having to worry about how to use them.

In a nutshell, Space Cloud provides you:
- Instant Realtime APIs to consume directly from your frontend.
- Authentication and authorization baked in by default.
- Freedom from vendor lock ins.
- Flexibility to work with the tech stack of your choice.
- Various pre-built modules such as User Management, Realtime CRUD and File Storage.

## Documentation
We are working hard to document every aspect of Space Cloud to give you the best onboarding experience. Here are links to the various docs we have:
- Space Cloud (Coming soon!)
- Client APIs:
- [Javascript client](https://github.com/spaceuptech/space-api-js/wiki)
- Java client (Coming soon!)

## Getting started
Let's see how to build an end-to-end todo app using Space Cloud

### Prerequisites
- [MongoDB database](https://docs.mongodb.com/manual/installation/)

### Download Space Cloud
You need to download the `space-cloud` binary for your operating system or you could build it directly from its source code. You need go version 1.11.2 or later to build it from source.

Download the binary for your OS from here:
- [Mac](https://spaceuptech.com/downloads/darwin/space-cloud.zip)
- [Linux](https://spaceuptech.com/downloads/linux/space-cloud.zip)
- [Windows](https://spaceuptech.com/downloads/windows/space-cloud.zip)

Make the `space-cloud` binary executable and add it to you `PATH`.

### Download the config file
Space Cloud needs a config file in order to function properly. It relies on the config file to load information like the database connection string, security rules, etc.

You can find a sample config for the todo app [here](https://raw.githubusercontent.com/spaceuptech/space-cloud/master/examples/basic-todo-app/config.yaml). Feel free to explore the file.

### Start Space Cloud
You can start `space-cloud` with the following command. Make sure mongo db is running before this step
```
space-cloud run --config config.yml
```

That's it. Your backend is up and running!

### Download the TODO App
We have built a simple todo app using HTML and vanilla Javascript which works with the backend you have just created. You can find it [here](https://raw.githubusercontent.com/spaceuptech/space-cloud/master/examples/basic-todo-app/index.html).

Feel free to play around with it to explore all the capabilities of Space Cloud.

## Support & Troubleshooting

The documentation and community will help you troubleshoot most issues. If you have encountered a bug or need to get in touch with us, you can contact us using one of the following channels:

* Support & feedback: [Discord](https://discord.gg/ypXEEBr)
* Issue & bug tracking: [GitHub issues](https://github.com/spaceuptech/space-cloud/issues)
* Follow product updates: [@spaceuptech](https://twitter.com/spaceuptech)

## Contributing
Space Cloud is a young project. We'd love to have you on board if you wish to contribute. To help you get started, here are a few areas you can help us with:
- Writing the documentation
- Making sample apps in React, Angular, Android, and any other frontend tech you can think of
- Deciding the road map of the project
- Creating issues for any bugs you find
- And of course, with code for bug fixes and new enhancements

## License
Space Cloud is [Apache 2.0 licensed](https://github.com/spaceuptech/space-cloud/blob/master/LICENSE).
37 changes: 16 additions & 21 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,8 @@ type Config struct {

// Project holds the project level configuration
type Project struct {
Name string `json:"name"`
Env map[string]*Env `json:"env"` // The key here is the env name
}

// Env holds the configuration for a particular environment
type Env struct {
Secret string
ID string `json:"id"`
Secret string `json:"secret"`
Modules *Modules `json:"modules"`
}

Expand All @@ -31,7 +26,7 @@ type Crud map[string]*CrudStub // The key here is the database type

// CrudStub holds the config at the database level
type CrudStub struct {
Connection string `json:"conn"`
Conn string `json:"conn"`
Collections map[string]*TableRule `json:"collections"` // The key here is table name
IsPrimary bool `json:"isPrimary"`
}
Expand All @@ -44,15 +39,15 @@ type TableRule struct {

// Rule is the authorisation object at the query level
type Rule struct {
Rule string `json:"rule"`
Eval string `json:"eval"`
FieldType string `json:"type"`
F1 interface{} `json:"f1"`
F2 interface{} `json:"f2"`
Clauses []*Rule `json:"clauses"`
DbType string `json:"db"`
Col string `json:"col"`
Find map[string]interface{} `json:"find"`
Rule string `json:"rule"`
Eval string `json:"eval"`
Type string `json:"type"`
F1 interface{} `json:"f1"`
F2 interface{} `json:"f2"`
Clauses []*Rule `json:"clauses"`
DB string `json:"db"`
Col string `json:"col"`
Find map[string]interface{} `json:"find"`
}

// Auth holds the mapping of the sign in method
Expand All @@ -79,10 +74,10 @@ type Realtime struct {

// FileStore holds the config for the file store module
type FileStore struct {
Enabled bool `json:"enabled"`
StoreType string `json:"storeType"`
Connection string `json:"conn"`
Rules []*FileRule `json:"rules"`
Enabled bool `json:"enabled"`
StoreType string `json:"storeType"`
Conn string `json:"conn"`
Rules map[string]*FileRule `json:"rules"`
}

// FileRule is the authorization object at the file rule level
Expand Down
10 changes: 5 additions & 5 deletions config/http.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,17 @@ import (
)

// HandleConfig returns the handler to load the config via a REST endpoint
func HandleConfig(env string, cb func(*Config) error) http.HandlerFunc {
func HandleConfig(isProd bool, cb func(*Project) error) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
// Disable this feature if env is not dev
if env != "dev" {
// Disable this feature if env is prod
if isProd {
w.WriteHeader(http.StatusBadRequest)
json.NewEncoder(w).Encode(map[string]string{"error": "This active only in the dev environment"})
return
}

// Load the body of the request
config := new(Config)
config := new(Project)
err := json.NewDecoder(r.Body).Decode(config)
defer r.Body.Close()

Expand All @@ -31,7 +31,7 @@ func HandleConfig(env string, cb func(*Config) error) http.HandlerFunc {
err = cb(config)
if err != nil {
w.WriteHeader(http.StatusBadRequest)
json.NewEncoder(w).Encode(map[string]string{"error": "Config was of invalid type"})
json.NewEncoder(w).Encode(map[string]string{"error": err.Error()})
return
}

Expand Down
17 changes: 8 additions & 9 deletions config/load.go
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
package config

import (
"encoding/json"
"io/ioutil"
"github.com/spf13/viper"
)

// LoadConfigFromFile loads the config from the provided file path
func LoadConfigFromFile(path string) (*Config, error) {
data, err := ioutil.ReadFile(path)
if err != nil {
return nil, err
}
func LoadConfigFromFile(path string) (*Project, error) {
viper.SetConfigFile(path)

conf := new(Project)
viper.Unmarshal(conf)

conf := new(Config)
err = json.Unmarshal(data, conf)
viper.ReadInConfig()
err := viper.Unmarshal(&conf)
if err != nil {
return nil, err
}
Expand Down
68 changes: 68 additions & 0 deletions docs/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
[
{
"name": "Getting Started",
"url": "getting-started",
"pages": [
["space-cli", "Quick start (Space CLI)"],
["manual", "Quick start (Manual)"],
["sample-apps", "Sample Apps"]
]
},
{
"name": "Configuration File",
"url": "config",
"pages": []
},
{
"name": "User Management",
"url": "user-management",
"pages": [
["oauth", "OAuth"]
]
},
{
"name": "Database",
"url": "database",
"pages": [
["data-explorer", "Data Explorer"]
]
},
{
"name": "File Storage",
"url": "file-storage",
"pages": []
},
{
"name": "Realtime",
"url": "realtime",
"pages": []
},
{
"name": "Functions",
"url": "functions",
"pages": []
},
{
"name": "Security",
"url": "security",
"pages": [
["database", "Database"],
["file-storage", "File Storage"]
]
},
{
"name": "Deploy",
"url": "deploy",
"pages": []
},
{
"name": "API Reference",
"url": "api",
"pages": []
},
{
"name": "Architecture",
"url": "architecture",
"pages": []
}
]
Loading

0 comments on commit 0f0e92c

Please sign in to comment.