Skip to content

Commit c311188

Browse files
committed
Merge branch 'ee-v0.10.0' of gitlab.com:spaceuptech/space-cloud-ee into ee-v0.10.0
2 parents 2d60f60 + df840db commit c311188

File tree

8 files changed

+137
-56
lines changed

8 files changed

+137
-56
lines changed

docs/manual/database/live-query.md

+86-11
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Listening to real-time`db.liveQuery
1+
# Listening to real-time `db.liveQuery`
22
You can listen / subscribe to changes happening in your app's data in real time by simply calling `db.liveQuery` on the frontend. Here's a code snippet to do this:
33

44
<div class="row tabs-wrapper">
@@ -25,8 +25,8 @@ const db = api.Mongo();
2525
const condition = cond("category", "==", 'frontend');
2626

2727
// Callback for data changes:
28-
const onSnapshot = (docs, type) => {
29-
console.log(docs, snapshot)
28+
const onSnapshot = (docs, type, changedDoc) => {
29+
console.log(docs, snapshot, changedDoc)
3030
}
3131

3232
// Callback for error while subscribing
@@ -51,14 +51,19 @@ API api = new API("books-app", "localhost", 8081);
5151
SQL db = api.MySQL();
5252
LiveQueryUnsubscribe unsubscribe = db.liveQuery("books").subscribe(new LiveDataListener() {
5353
@Override
54-
public void onSnapshot(LiveData data, String type) {
54+
public void onSnapshot(LiveData data, String type, ChangedData changedData) {
5555
System.out.println(type);
5656
for (Book book : data.getValue(Book.class)) {
5757
System.out.printf("ID:%d, Name:%s, Author:%s\n", book.getId(), book.getName(), book.getAuthor());
5858
}
59+
Book book = changedData.getValue(Book.class);
60+
if (book!=null) {
61+
System.out.println("CHANGED: ");
62+
System.out.printf("ID:%d, Name:%s, Author:%s\n", book.getId(), book.getName(), book.getAuthor());
63+
System.out.println();
64+
}
5965
System.out.println();
6066
}
61-
6267
@Override
6368
public void onError(String error) {
6469
System.out.println(error);
@@ -79,9 +84,10 @@ api = API('books-app', 'localhost:8081')
7984
db = api.my_sql()
8085

8186

82-
def on_snapshot(docs, kind):
87+
def on_snapshot(docs, kind, changedDoc):
8388
print("DOCS:", docs)
8489
print("KIND OF LIVE QUERY:", kind)
90+
print("CHANGED DOC:", changedDoc)
8591

8692

8793
def on_error(error):
@@ -111,15 +117,18 @@ func main() {
111117
fmt.Println(err)
112118
}
113119
db := api.MySQL()
114-
db.LiveQuery("books").Subscribe(func(liveData *model.LiveData, changeType string) () {
115-
fmt.Println(changeType)
120+
db.LiveQuery("books").Subscribe(func(liveData *model.LiveData, changeType string, changedData *model.ChangedData) () {
121+
fmt.Println("type", changeType)
116122
var v []interface{}
117123
liveData.Unmarshal(&v)
118-
fmt.Println(v)
124+
fmt.Println("data", v)
125+
var v2 interface{}
126+
changedData.Unmarshal(&v2)
127+
fmt.Println("chagned", v2)
128+
fmt.Println()
119129
}, func(err error) () {
120130
fmt.Println(err)
121131
})
122-
for {}
123132
}
124133
</code>
125134
</pre>
@@ -132,13 +141,79 @@ func main() {
132141
**docs:** An array of latest result set.
133142
**type:** Type of operation due to which the `onSnapshot` is called. It can have one of the following values:
134143
- **initial** - Called only once for the initial data on successful subscription
135-
- **write** - Whenever any data is added or updated
144+
- **insert** - Whenever any data is added
145+
- **update** - Whenever any data is updated
136146
- **delete** - Whenever any data is deleted
147+
**changedDoc:** The doc that changed.
137148

138149
`onError` function is called with the `error` if there was any error subscribing to data.
139150

140151
As you would have noticed the `subscribe` function returns an `unsubscribe` function. You should call this function whenever you want to unsubscribe to the changes.
141152

153+
## Setting the liveQuery options:
154+
You can set the liveQuery options using the `options()` function.
155+
The function helps to set `changesOnly` to true or false (default).
156+
If `changesOnly` is false, it caches the docs. `onSnapshot` will be called with all 3 parameters set.
157+
If `changesOnly` is true, it does not cache the docs and also ignores the initial values. `onSnapshot` will be called with only the last 2 parameters set.
158+
159+
Here's a code snippet to do this:
160+
161+
<div class="row tabs-wrapper">
162+
<div class="col s12" style="padding:0">
163+
<ul class="tabs">
164+
<li class="tab col s2"><a class="active" href="#live-query-options-js">Javascript</a></li>
165+
<li class="tab col s2"><a href="#live-query-options-java">Java</a></li>
166+
<li class="tab col s2"><a href="#live-query-options-python">Python</a></li>
167+
<li class="tab col s2"><a href="#live-query-options-golang">Golang</a></li>
168+
</ul>
169+
</div>
170+
<div id="live-query-options-js" class="col s12" style="padding:0">
171+
<pre>
172+
<code>
173+
let unsubscribe = db.liveQuery('posts').where({}).options({ changesOnly: true })subscribe(onSnapshot, onError)
174+
</code>
175+
</pre>
176+
</div>
177+
<div id="live-query-options-java" class="col s12" style="padding:0">
178+
<pre>
179+
<code class="java">
180+
LiveQueryUnsubscribe unsubscribe = db.liveQuery("books")
181+
.options(LiveQueryOptions.Builder().setChangesOnly(true)).subscribe(new LiveDataListener() {
182+
@Override
183+
public void onSnapshot(LiveData data, String type, ChangedData changedData) {
184+
// ...
185+
}
186+
@Override
187+
public void onError(String error) {
188+
// ...
189+
}
190+
});
191+
</code>
192+
</pre>
193+
</div>
194+
<div id="live-query-options-python" class="col s12" style="padding:0">
195+
<pre>
196+
<code class="python">
197+
unsubscribe = db.live_query('books').options(changes_only=True).subscribe(on_snapshot, on_error)
198+
</code>
199+
</pre>
200+
</div>
201+
<div id="live-query-options-golang" class="col s12" style="padding:0">
202+
<pre>
203+
<code class="golang">
204+
db.LiveQuery("books").Options(&model.LiveQueryOptions{ChangesOnly: false}).
205+
Subscribe(func(liveData *model.LiveData, changeType string, changedData *model.ChangedData) () {
206+
// ...
207+
}, func(err error) () {
208+
// ...
209+
})
210+
}
211+
</code>
212+
</pre>
213+
</div>
214+
</div>
215+
216+
142217
## Next steps
143218

144219
Now you know how to subscribe to realtime changes in data. The next step would be to have a look at how to update data from your frontend.

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ require (
2828
github.com/urfave/cli v1.20.0
2929
github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c // indirect
3030
github.com/xdg/stringprep v1.0.0 // indirect
31-
go.mongodb.org/mongo-driver v1.0.0-rc1
31+
go.mongodb.org/mongo-driver v1.0.4
3232
golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5
3333
golang.org/x/sync v0.0.0-20190423024810-112230192c58 // indirect
3434
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 // indirect

go.sum

+2-12
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
cloud.google.com/go v0.26.0 h1:e0WKqKTd5BnrG8aKH3J3h+QvEIQtSUcf2n5UZ5ZgLtQ=
21
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
32
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
43
github.com/Azure/go-autorest v11.1.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
@@ -42,7 +41,6 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekf
4241
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
4342
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
4443
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
45-
github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
4644
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
4745
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
4846
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -51,7 +49,6 @@ github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8l
5149
github.com/google/btree v0.0.0-20160524151835-7d79101e329e/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
5250
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c h1:964Od4U6p2jUkFxvCydnIczKteheJEzHRToSGK3Bnlw=
5351
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
54-
github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
5552
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
5653
github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
5754
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
@@ -108,7 +105,6 @@ github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNU
108105
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
109106
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
110107
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
111-
github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw=
112108
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
113109
github.com/kr/pty v1.1.4 h1:5Myjjh3JY/NaAi4IsUbHADytDyl1VE1Y9PXDlL+P/VQ=
114110
github.com/kr/pty v1.1.4/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
@@ -183,13 +179,12 @@ github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c h1:u40Z8hqBAAQyv+vATcGgV
183179
github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
184180
github.com/xdg/stringprep v1.0.0 h1:d9X0esnoa3dFsV0FG35rAT0RIhYFlPq7MiP+DW89La0=
185181
github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
186-
go.mongodb.org/mongo-driver v1.0.0-rc1 h1:Y9CfPSIKyLMS9MkrjBF+Nmo1SoEgPuyhiyVP3wd1oxY=
187-
go.mongodb.org/mongo-driver v1.0.0-rc1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
182+
go.mongodb.org/mongo-driver v1.0.4 h1:bHxbjH6iwh1uInchXadI6hQR107KEbgYsMzoblDONmQ=
183+
go.mongodb.org/mongo-driver v1.0.4/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
188184
golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
189185
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
190186
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
191187
golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
192-
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
193188
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
194189
golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5 h1:8dUaAV7K4uHsF56JQWkprecIQKdPHtR9jCHF5nB8uzc=
195190
golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -209,7 +204,6 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn
209204
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
210205
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980 h1:dfGZHvZk057jK2MCeWus/TowKpJ8y4AmooUzdBSR9GU=
211206
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
212-
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs=
213207
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
214208
golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a h1:tImsplftrFpALCYumobsd0K86vlAs/eXGFms2txfJfA=
215209
golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -222,14 +216,12 @@ golang.org/x/sys v0.0.0-20180606202747-9527bec2660b/go.mod h1:STP8DvDyc/dI5b8T5h
222216
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
223217
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
224218
golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
225-
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
226219
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
227220
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
228221
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
229222
golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
230223
golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f h1:25KHgbfyiSm6vwQLbM3zZIe1v9p/3ea4Rz+nnM5K/i4=
231224
golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
232-
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
233225
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
234226
golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
235227
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
@@ -242,12 +234,10 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm
242234
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
243235
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
244236
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
245-
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
246237
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
247238
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
248239
google.golang.org/appengine v1.6.0 h1:Tfd7cKwKbFRsI8RMAD3oqqw7JPFRrvFlOsfbgVkjOOw=
249240
google.golang.org/appengine v1.6.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
250-
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc=
251241
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
252242
google.golang.org/genproto v0.0.0-20190530194941-fb225487d101 h1:wuGevabY6r+ivPNagjUXGGxF+GqgMd+dBhjsxW4q9u4=
253243
google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=

utils/admin/validate.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ func (v *validator) startValidation(id, userID, key string, mode int) error {
5151

5252
// Stop the validation process
5353
v.stopValidation()
54+
v.reduceMode()
5455
return
5556
}
5657

@@ -67,7 +68,6 @@ func (v *validator) startValidation(id, userID, key string, mode int) error {
6768

6869
func (v *validator) stopValidation() {
6970
v.setActive(false)
70-
v.reduceMode()
7171
if v.socket != nil {
7272
v.socket.Close()
7373
}

utils/admin/websocket.go

+1
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ func (v *validator) routineRead() error {
6464
log.Println("Validate Error -", data.Error)
6565
// Reduce op mode to open source
6666
v.stopValidation()
67+
v.reduceMode()
6768
}
6869
}
6970
}

utils/handlers/config.go

+11-3
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ func HandleLoadDeploymentConfig(adminMan *admin.Manager, syncMan *syncman.SyncMa
125125
token := getToken(r)
126126

127127
// Check if the token is valid
128-
if status, err := adminMan.IsAdminOpAuthorised(token, "deploy"); err != nil {
128+
if status, err := adminMan.IsAdminOpAuthorised(token, "op"); err != nil {
129129
w.WriteHeader(status)
130130
json.NewEncoder(w).Encode(map[string]string{"error": err.Error()})
131131
return
@@ -185,6 +185,14 @@ func HandleStoreDeploymentConfig(adminMan *admin.Manager, syncMan *syncman.SyncM
185185
}
186186
defer r.Body.Close()
187187

188+
// Check if the request is authorised
189+
status, err := adminMan.IsAdminOpAuthorised(token, "deploy")
190+
if err != nil {
191+
w.WriteHeader(status)
192+
json.NewEncoder(w).Encode(map[string]string{"error": err.Error()})
193+
return
194+
}
195+
188196
// Set the deploy config
189197
if err := syncMan.SetDeployConfig(token, c); err != nil {
190198
w.WriteHeader(http.StatusInternalServerError)
@@ -214,7 +222,7 @@ func HandleStoreOperationModeConfig(adminMan *admin.Manager, syncMan *syncman.Sy
214222
defer r.Body.Close()
215223

216224
// Check if the request is authorised
217-
status, err := adminMan.IsAdminOpAuthorised(token, "deploy")
225+
status, err := adminMan.IsAdminOpAuthorised(token, "op")
218226
if err != nil {
219227
w.WriteHeader(status)
220228
json.NewEncoder(w).Encode(map[string]string{"error": err.Error()})
@@ -252,7 +260,7 @@ func HandleLoadOperationModeConfig(adminMan *admin.Manager, syncMan *syncman.Syn
252260
token := getToken(r)
253261

254262
// Check if the token is valid
255-
if status, err := adminMan.IsAdminOpAuthorised(token, "deploy"); err != nil {
263+
if status, err := adminMan.IsAdminOpAuthorised(token, "op"); err != nil {
256264
w.WriteHeader(status)
257265
json.NewEncoder(w).Encode(map[string]string{"error": err.Error()})
258266
return

utils/handlers/crud.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -364,8 +364,8 @@ func HandleCrudBatch(isProd bool, projects *projects.Projects) http.HandlerFunc
364364
// Send error response
365365
if err != nil {
366366
// Send realtime nack
367-
for _, m := range msgIDs {
368-
state.Realtime.SendAck(m.id, meta.project, m.col, false)
367+
for j := 0; j < i; j++ {
368+
state.Realtime.SendAck(msgIDs[j].id, meta.project, msgIDs[j].col, false)
369369
}
370370

371371
// Send http response

0 commit comments

Comments
 (0)