Skip to content

Commit c9e5a6a

Browse files
committed
Merge branch 'master' of github.com:ParsePlatform/parse-server into new-quickstart
2 parents bec49e7 + 51862c1 commit c9e5a6a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1385
-631
lines changed

.DS_Store

-8 KB
Binary file not shown.

.github/ISSUE_TEMPLATE.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
Make sure these boxes are checked before submitting your issue -- thanks for reporting issues back to Parse Server!
22

3-
-[ ] You've met the [prerequisites](https://github.com/ParsePlatform/parse-server/wiki/Parse-Server-Guide#prerequisites).
3+
- [ ] You've met the [prerequisites](https://github.com/ParsePlatform/parse-server/wiki/Parse-Server-Guide#prerequisites).
44

5-
-[ ] You're running the [latest version](https://github.com/ParsePlatform/parse-server/releases) of Parse Server.
5+
- [ ] You're running the [latest version](https://github.com/ParsePlatform/parse-server/releases) of Parse Server.
66

7-
-[ ] You've searched through [existing issues](https://github.com/ParsePlatform/parse-server/issues?utf8=%E2%9C%93&q=). Chances are that your issue has been reported or resolved before.
7+
- [ ] You've searched through [existing issues](https://github.com/ParsePlatform/parse-server/issues?utf8=%E2%9C%93&q=). Chances are that your issue has been reported or resolved before.
88

99
#### Environment Setup
1010

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,6 @@ lib/
4040

4141
# cache folder
4242
.cache
43+
44+
# Mac DS_Store files
45+
.DS_Store

CHANGELOG.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,41 @@
11
## Parse Server Changelog
22

3+
### 2.1.5 (3/9/2016)
4+
5+
* New: FileAdapter for Google Cloud Storage [\#708](https://github.com/ParsePlatform/parse-server/pull/708) (mcdonamp)
6+
* Improvement: Minimize extra schema queries in some scenarios. [\#919](https://github.com/ParsePlatform/parse-server/pull/919) (Marco129)
7+
* Improvement: Move DatabaseController and Schema fully to adaptive mongo collection. [\#909](https://github.com/ParsePlatform/parse-server/pull/909) (nlutsenko)
8+
* Improvement: Cleanup PushController/PushRouter, remove raw mongo collection access. [\#903](https://github.com/ParsePlatform/parse-server/pull/903) (nlutsenko)
9+
* Improvement: Increment badge the right way [\#902](https://github.com/ParsePlatform/parse-server/pull/902) (flovilmart)
10+
* Improvement: Migrate ParseGlobalConfig to new database storage API. [\#901](https://github.com/ParsePlatform/parse-server/pull/901) (nlutsenko)
11+
* Improvement: Improve delete flow for non-existent \_Join collection [\#881](https://github.com/ParsePlatform/parse-server/pull/881) (Marco129)
12+
* Improvement: Adding a role scenario test for issue 827 [\#878](https://github.com/ParsePlatform/parse-server/pull/878) (gfosco)
13+
* Improvement: Test empty authData block on login for \#413 [\#863](https://github.com/ParsePlatform/parse-server/pull/863) (gfosco)
14+
* Improvement: Modified the npm dev script to support Windows [\#846](https://github.com/ParsePlatform/parse-server/pull/846) (aneeshd16)
15+
* Improvement: Move HooksController to use MongoCollection instead of direct Mongo access. [\#844](https://github.com/ParsePlatform/parse-server/pull/844) (nlutsenko)
16+
* Improvement: Adds public\_html and views for packaging [\#839](https://github.com/ParsePlatform/parse-server/pull/839) (flovilmart)
17+
* Improvement: Better support for windows builds [\#831](https://github.com/ParsePlatform/parse-server/pull/831) (flovilmart)
18+
* Improvement: Convert Schema.js to ES6 class. [\#826](https://github.com/ParsePlatform/parse-server/pull/826) (nlutsenko)
19+
* Improvement: Remove duplicated instructions [\#816](https://github.com/ParsePlatform/parse-server/pull/816) (hramos)
20+
* Improvement: Completely migrate SchemasRouter to new MongoCollection API. [\#794](https://github.com/ParsePlatform/parse-server/pull/794) (nlutsenko)
21+
* Fix: Do not require where clause in $dontSelect condition on queries. [\#925](https://github.com/ParsePlatform/parse-server/pull/925) (nlutsenko)
22+
* Fix: Make sure that ACLs propagate to before/after save hooks. [\#924](https://github.com/ParsePlatform/parse-server/pull/924) (nlutsenko)
23+
* Fix: Support params option in Parse.Cloud.httpRequest. [\#912](https://github.com/ParsePlatform/parse-server/pull/912) (carmenlau)
24+
* Fix: Fix flaky Parse.GeoPoint test. [\#908](https://github.com/ParsePlatform/parse-server/pull/908) (nlutsenko)
25+
* Fix: Handle legacy \_client\_permissions key in \_SCHEMA. [\#900](https://github.com/ParsePlatform/parse-server/pull/900) (drew-gross)
26+
* Fix: Fixes bug when querying equalTo on objectId and relation [\#887](https://github.com/ParsePlatform/parse-server/pull/887) (flovilmart)
27+
* Fix: Allow crossdomain on filesRouter [\#876](https://github.com/ParsePlatform/parse-server/pull/876) (flovilmart)
28+
* Fix: Remove limit when counting results. [\#867](https://github.com/ParsePlatform/parse-server/pull/867) (gfosco)
29+
* Fix: beforeSave changes should propagate to the response [\#865](https://github.com/ParsePlatform/parse-server/pull/865) (gfosco)
30+
* Fix: Delete relation field when \_Join collection not exist [\#864](https://github.com/ParsePlatform/parse-server/pull/864) (Marco129)
31+
* Fix: Related query on non-existing column [\#861](https://github.com/ParsePlatform/parse-server/pull/861) (gfosco)
32+
* Fix: Update markdown in .github/ISSUE\_TEMPLATE.md [\#859](https://github.com/ParsePlatform/parse-server/pull/859) (igorshubovych)
33+
* Fix: Issue with creating wrong \_Session for Facebook login [\#857](https://github.com/ParsePlatform/parse-server/pull/857) (tobernguyen)
34+
* Fix: Leak warnings in tests, use mongodb-runner from node\_modules [\#843](https://github.com/ParsePlatform/parse-server/pull/843) (drew-gross)
35+
* Fix: Reversed roles lookup [\#841](https://github.com/ParsePlatform/parse-server/pull/841) (flovilmart)
36+
* Fix: Improves loading of Push Adapter, fix loading of S3Adapter [\#833](https://github.com/ParsePlatform/parse-server/pull/833) (flovilmart)
37+
* Fix: Add field to system schema [\#828](https://github.com/ParsePlatform/parse-server/pull/828) (Marco129)
38+
339
### 2.1.4 (3/3/2016)
440

541
* New: serverInfo endpoint that returns server version and info about the server's features

README.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,38 @@ PARSE_SERVER_MAX_UPLOAD_SIZE
137137

138138
```
139139

140+
##### Configuring File Adapters
141+
Parse Server allows developers to choose from several options when hosting files: the `GridStoreAdapter`, which backed by MongoDB; the `S3Adapter`, which is backed by [Amazon S3](https://aws.amazon.com/s3/); or the `GCSAdapter`, which is backed by [Google Cloud Storage](https://cloud.google.com/storage/).
142+
143+
`GridStoreAdapter` is used by default and requires no setup, but if you're interested in using S3 or GCS, additional configuration information is available below.
144+
145+
###### Configuring `S3Adapter`
146+
147+
You can use the following environment variable setup to enable the S3 adapter:
148+
149+
```js
150+
S3_ACCESS_KEY
151+
S3_SECRET_KEY
152+
S3_BUCKET
153+
S3_REGION
154+
S3_BUCKET_PREFIX
155+
S3_DIRECT_ACCESS
156+
157+
```
158+
159+
###### Configuring `GCSAdapter`
160+
161+
You can use the following environment variable setup to enable the GCS adapter:
162+
163+
```js
164+
GCP_PROJECT_ID
165+
GCP_KEYFILE_PATH
166+
GCS_BUCKET
167+
GCS_BUCKET_PREFIX
168+
GCS_DIRECT_ACCESS
169+
170+
```
171+
140172
## Contributing
141173

142174
We really want Parse to be yours, to see it grow and thrive in the open source community. Please see the [Contributing to Parse Server guide](CONTRIBUTING.md).

package.json

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "parse-server",
3-
"version": "2.1.4",
3+
"version": "2.1.5",
44
"description": "An express module providing a Parse-compatible API server",
55
"main": "lib/index.js",
66
"repository": {
@@ -10,6 +10,8 @@
1010
"files": [
1111
"bin/",
1212
"lib/",
13+
"public_html/",
14+
"views/",
1315
"LICENSE",
1416
"PATENTS",
1517
"README.md"
@@ -26,6 +28,7 @@
2628
"commander": "^2.9.0",
2729
"deepcopy": "^0.6.1",
2830
"express": "^4.13.4",
31+
"gcloud": "^0.28.0",
2932
"mailgun-js": "^0.7.7",
3033
"mime": "^1.3.4",
3134
"mongodb": "~2.1.0",
@@ -53,11 +56,11 @@
5356
"nodemon": "^1.8.1"
5457
},
5558
"scripts": {
56-
"dev": "npm run build && bin/dev",
59+
"dev": "npm run build && node bin/dev",
5760
"build": "./node_modules/.bin/babel src/ -d lib/",
5861
"pretest": "cross-env MONGODB_VERSION=${MONGODB_VERSION:=3.0.8} ./node_modules/.bin/mongodb-runner start",
5962
"test": "cross-env NODE_ENV=test TESTING=1 ./node_modules/.bin/babel-node $COVERAGE_OPTION ./node_modules/jasmine/bin/jasmine.js",
60-
"posttest": "mongodb-runner stop",
63+
"posttest": "./node_modules/.bin/mongodb-runner stop",
6164
"coverage": "cross-env COVERAGE_OPTION='./node_modules/babel-istanbul/lib/cli.js cover -x **/spec/**' npm test",
6265
"start": "node ./bin/parse-server",
6366
"prepublish": "npm run build"

spec/AdapterLoader.spec.js

Lines changed: 48 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,75 @@
11

22
var loadAdapter = require("../src/Adapters/AdapterLoader").loadAdapter;
33
var FilesAdapter = require("../src/Adapters/Files/FilesAdapter").default;
4+
var ParsePushAdapter = require("../src/Adapters/Push/ParsePushAdapter");
5+
var S3Adapter = require("../src/Adapters/Files/S3Adapter").default;
6+
var GCSAdapter = require("../src/Adapters/Files/GCSAdapter").default;
47

58
describe("AdapterLoader", ()=>{
6-
9+
710
it("should instantiate an adapter from string in object", (done) => {
811
var adapterPath = require('path').resolve("./spec/MockAdapter");
912

1013
var adapter = loadAdapter({
1114
adapter: adapterPath,
1215
options: {
13-
key: "value",
16+
key: "value",
1417
foo: "bar"
1518
}
1619
});
17-
20+
1821
expect(adapter instanceof Object).toBe(true);
1922
expect(adapter.options.key).toBe("value");
2023
expect(adapter.options.foo).toBe("bar");
2124
done();
2225
});
23-
26+
2427
it("should instantiate an adapter from string", (done) => {
2528
var adapterPath = require('path').resolve("./spec/MockAdapter");
2629
var adapter = loadAdapter(adapterPath);
27-
30+
2831
expect(adapter instanceof Object).toBe(true);
2932
done();
3033
});
31-
34+
3235
it("should instantiate an adapter from string that is module", (done) => {
3336
var adapterPath = require('path').resolve("./src/Adapters/Files/FilesAdapter");
3437
var adapter = loadAdapter({
3538
adapter: adapterPath
3639
});
37-
40+
3841
expect(adapter instanceof FilesAdapter).toBe(true);
3942
done();
4043
});
41-
44+
4245
it("should instantiate an adapter from function/Class", (done) => {
4346
var adapter = loadAdapter({
4447
adapter: FilesAdapter
4548
});
4649
expect(adapter instanceof FilesAdapter).toBe(true);
4750
done();
4851
});
49-
52+
5053
it("should instantiate the default adapter from Class", (done) => {
5154
var adapter = loadAdapter(null, FilesAdapter);
5255
expect(adapter instanceof FilesAdapter).toBe(true);
5356
done();
5457
});
55-
58+
5659
it("should use the default adapter", (done) => {
5760
var defaultAdapter = new FilesAdapter();
5861
var adapter = loadAdapter(null, defaultAdapter);
5962
expect(adapter instanceof FilesAdapter).toBe(true);
6063
done();
6164
});
62-
65+
6366
it("should use the provided adapter", (done) => {
6467
var originalAdapter = new FilesAdapter();
6568
var adapter = loadAdapter(originalAdapter);
6669
expect(adapter).toBe(originalAdapter);
6770
done();
6871
});
69-
72+
7073
it("should fail loading an improperly configured adapter", (done) => {
7174
var Adapter = function(options) {
7275
if (!options.foo) {
@@ -77,11 +80,43 @@ describe("AdapterLoader", ()=>{
7780
param: "key",
7881
doSomething: function() {}
7982
};
80-
83+
8184
expect(() => {
8285
var adapter = loadAdapter(adapterOptions, Adapter);
8386
expect(adapter).toEqual(adapterOptions);
8487
}).not.toThrow("foo is required for that adapter");
8588
done();
8689
});
90+
91+
it("should load push adapter from options", (done) => {
92+
var options = {
93+
ios: {
94+
bundleId: 'bundle.id'
95+
}
96+
}
97+
expect(() => {
98+
var adapter = loadAdapter(undefined, ParsePushAdapter, options);
99+
expect(adapter.constructor).toBe(ParsePushAdapter);
100+
expect(adapter).not.toBe(undefined);
101+
}).not.toThrow();
102+
done();
103+
});
104+
105+
it("should load S3Adapter from direct passing", (done) => {
106+
var s3Adapter = new S3Adapter("key", "secret", "bucket")
107+
expect(() => {
108+
var adapter = loadAdapter(s3Adapter, FilesAdapter);
109+
expect(adapter).toBe(s3Adapter);
110+
}).not.toThrow();
111+
done();
112+
})
113+
114+
it("should load GCSAdapter from direct passing", (done) => {
115+
var gcsAdapter = new GCSAdapter("projectId", "path/to/keyfile", "bucket")
116+
expect(() => {
117+
var adapter = loadAdapter(gcsAdapter, FilesAdapter);
118+
expect(adapter).toBe(gcsAdapter);
119+
}).not.toThrow();
120+
done();
121+
})
87122
});

spec/FilesController.spec.js

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,52 @@
11
var FilesController = require('../src/Controllers/FilesController').FilesController;
22
var GridStoreAdapter = require("../src/Adapters/Files/GridStoreAdapter").GridStoreAdapter;
33
var S3Adapter = require("../src/Adapters/Files/S3Adapter").S3Adapter;
4+
var GCSAdapter = require("../src/Adapters/Files/GCSAdapter").GCSAdapter;
45
var Config = require("../src/Config");
56

67
var FCTestFactory = require("./FilesControllerTestFactory");
78

89

910
// Small additional tests to improve overall coverage
1011
describe("FilesController",()=>{
11-
12+
1213
// Test the grid store adapter
1314
var gridStoreAdapter = new GridStoreAdapter('mongodb://localhost:27017/parse');
1415
FCTestFactory.testAdapter("GridStoreAdapter", gridStoreAdapter);
15-
16+
1617
if (process.env.S3_ACCESS_KEY && process.env.S3_SECRET_KEY) {
17-
18+
1819
// Test the S3 Adapter
1920
var s3Adapter = new S3Adapter(process.env.S3_ACCESS_KEY, process.env.S3_SECRET_KEY, 'parse.server.tests');
20-
21+
2122
FCTestFactory.testAdapter("S3Adapter",s3Adapter);
22-
23+
2324
// Test S3 with direct access
2425
var s3DirectAccessAdapter = new S3Adapter(process.env.S3_ACCESS_KEY, process.env.S3_SECRET_KEY, 'parse.server.tests', {
2526
directAccess: true
2627
});
27-
28+
2829
FCTestFactory.testAdapter("S3AdapterDirect", s3DirectAccessAdapter);
29-
30+
3031
} else if (!process.env.TRAVIS) {
3132
console.log("set S3_ACCESS_KEY and S3_SECRET_KEY to test S3Adapter")
3233
}
34+
35+
if (process.env.GCP_PROJECT_ID && process.env.GCP_KEYFILE_PATH && process.env.GCS_BUCKET) {
36+
37+
// Test the GCS Adapter
38+
var gcsAdapter = new GCSAdapter(process.env.GCP_PROJECT_ID, process.env.GCP_KEYFILE_PATH, process.env.GCS_BUCKET);
39+
40+
FCTestFactory.testAdapter("GCSAdapter", gcsAdapter);
41+
42+
// Test GCS with direct access
43+
var gcsDirectAccessAdapter = new GCSAdapter(process.env.GCP_PROJECT_ID, process.env.GCP_KEYFILE_PATH, process.env.GCS_BUCKET, {
44+
directAccess: true
45+
});
46+
47+
FCTestFactory.testAdapter("GCSAdapterDirect", gcsDirectAccessAdapter);
48+
49+
} else if (!process.env.TRAVIS) {
50+
console.log("set GCP_PROJECT_ID, GCP_KEYFILE_PATH, and GCS_BUCKET to test GCSAdapter")
51+
}
3352
});

spec/FilesControllerTestFactory.js

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,34 @@
1-
21
var FilesController = require('../src/Controllers/FilesController').FilesController;
32
var Config = require("../src/Config");
43

54
var testAdapter = function(name, adapter) {
65
// Small additional tests to improve overall coverage
7-
6+
87
var config = new Config(Parse.applicationId);
98
var filesController = new FilesController(adapter);
109

1110
describe("FilesController with "+name,()=>{
12-
11+
1312
it("should properly expand objects", (done) => {
14-
13+
1514
var result = filesController.expandFilesInObject(config, function(){});
16-
15+
1716
expect(result).toBeUndefined();
18-
17+
1918
var fullFile = {
2019
type: '__type',
2120
url: "http://an.url"
2221
}
23-
22+
2423
var anObject = {
2524
aFile: fullFile
2625
}
2726
filesController.expandFilesInObject(config, anObject);
2827
expect(anObject.aFile.url).toEqual("http://an.url");
29-
28+
3029
done();
31-
})
32-
30+
})
31+
3332
it("should properly create, read, delete files", (done) => {
3433
var filename;
3534
filesController.createFile(config, "file.txt", "hello world").then( (result) => {
@@ -51,14 +50,14 @@ var testAdapter = function(name, adapter) {
5150
console.error(err);
5251
done();
5352
}).then((result) => {
54-
53+
5554
filesController.getFileData(config, filename).then((res) => {
5655
fail("the file should be deleted");
5756
done();
5857
}, (err) => {
59-
done();
58+
done();
6059
});
61-
60+
6261
}, (err) => {
6362
fail("The adapter should delete the file");
6463
console.error(err);

0 commit comments

Comments
 (0)