mirror of
https://github.com/documize/community.git
synced 2025-07-21 22:29:41 +02:00
implemented edition license checks
This commit is contained in:
parent
edccb39019
commit
a4e3264e0c
19 changed files with 146 additions and 19 deletions
|
@ -8,7 +8,7 @@ The mission is to bring software dev inspired features (refactoring, testing, li
|
||||||
|
|
||||||
## Latest version
|
## Latest version
|
||||||
|
|
||||||
v0.42.0
|
v0.43.0
|
||||||
|
|
||||||
## OS Support
|
## OS Support
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,18 @@
|
||||||
// https://documize.com
|
// https://documize.com
|
||||||
|
|
||||||
import Ember from 'ember';
|
import Ember from 'ember';
|
||||||
|
import NotifierMixin from '../../mixins/notifier';
|
||||||
|
|
||||||
export default Ember.Component.extend({
|
const {
|
||||||
|
inject: { service }
|
||||||
|
} = Ember;
|
||||||
|
|
||||||
|
export default Ember.Component.extend(NotifierMixin, {
|
||||||
|
appMeta :service(),
|
||||||
|
|
||||||
|
didRender() {
|
||||||
|
if (this.get('appMeta').invalidLicense()) {
|
||||||
|
this.showNotification(`!! Expired or invalid license !!`);
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -27,9 +27,15 @@ export default Ember.Service.extend({
|
||||||
title: '',
|
title: '',
|
||||||
version: '',
|
version: '',
|
||||||
message: '',
|
message: '',
|
||||||
|
edition: 'Community',
|
||||||
|
valid: true,
|
||||||
allowAnonymousAccess: false,
|
allowAnonymousAccess: false,
|
||||||
setupMode: false,
|
setupMode: false,
|
||||||
|
|
||||||
|
invalidLicense() {
|
||||||
|
return this.valid === false;
|
||||||
|
},
|
||||||
|
|
||||||
getBaseUrl(endpoint) {
|
getBaseUrl(endpoint) {
|
||||||
return [this.get('endpoint'), endpoint].join('/');
|
return [this.get('endpoint'), endpoint].join('/');
|
||||||
},
|
},
|
||||||
|
|
|
@ -54,7 +54,7 @@ export default Ember.Service.extend({
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// Saves product license
|
// Saves product license.
|
||||||
saveLicense(license) {
|
saveLicense(license) {
|
||||||
if(this.get('sessionService.isGlobalAdmin')) {
|
if(this.get('sessionService.isGlobalAdmin')) {
|
||||||
return this.get('ajax').request(`global/license`, {
|
return this.get('ajax').request(`global/license`, {
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
<div class="input-control">
|
<div class="input-control">
|
||||||
<label>License</label>
|
<label>License</label>
|
||||||
<div class="tip">XML format accepted</div>
|
<div class="tip">XML format accepted</div>
|
||||||
{{textarea value=model.license rows="5"}}
|
{{textarea value=model.license rows="15"}}
|
||||||
</div>
|
</div>
|
||||||
<div class="regular-button button-blue" {{ action 'saveLicense' }}>save</div>
|
<div class="regular-button button-blue" {{ action 'saveLicense' }}>save</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -63,9 +63,22 @@ function isAjaxNotFoundError(reason) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isInvalidLicenseError(reason) {
|
||||||
|
if (typeof reason === "undefined" || typeof reason.errors === "undefined") {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reason.errors.length > 0 && reason.errors[0].status === "402") {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
getSubdomain,
|
getSubdomain,
|
||||||
getAppUrl,
|
getAppUrl,
|
||||||
isAjaxAccessError,
|
isAjaxAccessError,
|
||||||
isAjaxNotFoundError,
|
isAjaxNotFoundError,
|
||||||
|
isInvalidLicenseError,
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "documize",
|
"name": "documize",
|
||||||
"version": "0.42.0",
|
"version": "0.43.0",
|
||||||
"description": "The Document IDE",
|
"description": "The Document IDE",
|
||||||
"private": true,
|
"private": true,
|
||||||
"repository": "",
|
"repository": "",
|
||||||
|
|
|
@ -109,25 +109,13 @@ func GetLicense(w http.ResponseWriter, r *http.Request) {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
output, err := xml.MarshalIndent(x, " ", " ")
|
output, err := xml.Marshal(x)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("error: %v\n", err)
|
fmt.Printf("error: %v\n", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
w.Write(output)
|
w.Write(output)
|
||||||
|
|
||||||
// // marshal as JSON
|
|
||||||
// var y map[string]interface{}
|
|
||||||
// json.Unmarshal([]byte(config), &y)
|
|
||||||
|
|
||||||
// json, err := json.Marshal(y)
|
|
||||||
// if err != nil {
|
|
||||||
// writeJSONMarshalError(w, method, "EDITION-LICENSE", err)
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
|
|
||||||
// util.WriteSuccessBytes(w, json)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SaveLicense persists product license
|
// SaveLicense persists product license
|
||||||
|
|
|
@ -41,6 +41,11 @@ func writeTransactionError(w http.ResponseWriter, method string, err error) {
|
||||||
log.Error(fmt.Sprintf("Unable to get database transaction for method %s", method), err)
|
log.Error(fmt.Sprintf("Unable to get database transaction for method %s", method), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsInvalidLicense returns true if license is invalid
|
||||||
|
func IsInvalidLicense() bool {
|
||||||
|
return Product.License.Valid == false
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
func WriteAddRecordError(w http.ResponseWriter, method string, err error) {
|
func WriteAddRecordError(w http.ResponseWriter, method string, err error) {
|
||||||
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||||||
|
|
|
@ -32,6 +32,11 @@ import (
|
||||||
|
|
||||||
// AddFolder creates a new folder.
|
// AddFolder creates a new folder.
|
||||||
func AddFolder(w http.ResponseWriter, r *http.Request) {
|
func AddFolder(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if IsInvalidLicense() {
|
||||||
|
util.WriteBadLicense(w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
method := "AddFolder"
|
method := "AddFolder"
|
||||||
p := request.GetPersister(r)
|
p := request.GetPersister(r)
|
||||||
|
|
||||||
|
@ -263,6 +268,11 @@ func UpdateFolder(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
// RemoveFolder moves documents to another folder before deleting it
|
// RemoveFolder moves documents to another folder before deleting it
|
||||||
func RemoveFolder(w http.ResponseWriter, r *http.Request) {
|
func RemoveFolder(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if IsInvalidLicense() {
|
||||||
|
util.WriteBadLicense(w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
method := "RemoveFolder"
|
method := "RemoveFolder"
|
||||||
p := request.GetPersister(r)
|
p := request.GetPersister(r)
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,8 @@ func GetMeta(w http.ResponseWriter, r *http.Request) {
|
||||||
data.Message = org.Message
|
data.Message = org.Message
|
||||||
data.AllowAnonymousAccess = org.AllowAnonymousAccess
|
data.AllowAnonymousAccess = org.AllowAnonymousAccess
|
||||||
data.Version = Product.Version
|
data.Version = Product.Version
|
||||||
|
data.Edition = Product.License.Edition
|
||||||
|
data.Valid = Product.License.Valid
|
||||||
|
|
||||||
json, err := json.Marshal(data)
|
json, err := json.Marshal(data)
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,11 @@ import (
|
||||||
|
|
||||||
// AddDocumentPage inserts new section into document.
|
// AddDocumentPage inserts new section into document.
|
||||||
func AddDocumentPage(w http.ResponseWriter, r *http.Request) {
|
func AddDocumentPage(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if IsInvalidLicense() {
|
||||||
|
util.WriteBadLicense(w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
method := "AddDocumentPage"
|
method := "AddDocumentPage"
|
||||||
p := request.GetPersister(r)
|
p := request.GetPersister(r)
|
||||||
|
|
||||||
|
@ -286,6 +291,11 @@ func GetDocumentPagesBatch(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
// DeleteDocumentPage deletes a page.
|
// DeleteDocumentPage deletes a page.
|
||||||
func DeleteDocumentPage(w http.ResponseWriter, r *http.Request) {
|
func DeleteDocumentPage(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if IsInvalidLicense() {
|
||||||
|
util.WriteBadLicense(w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
method := "DeleteDocumentPage"
|
method := "DeleteDocumentPage"
|
||||||
p := request.GetPersister(r)
|
p := request.GetPersister(r)
|
||||||
|
|
||||||
|
@ -354,6 +364,11 @@ func DeleteDocumentPage(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
// DeleteDocumentPages batch deletes pages.
|
// DeleteDocumentPages batch deletes pages.
|
||||||
func DeleteDocumentPages(w http.ResponseWriter, r *http.Request) {
|
func DeleteDocumentPages(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if IsInvalidLicense() {
|
||||||
|
util.WriteBadLicense(w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
method := "DeleteDocumentPages"
|
method := "DeleteDocumentPages"
|
||||||
p := request.GetPersister(r)
|
p := request.GetPersister(r)
|
||||||
|
|
||||||
|
@ -433,6 +448,11 @@ func DeleteDocumentPages(w http.ResponseWriter, r *http.Request) {
|
||||||
// that this is a new revision. If the page is the first in a document
|
// that this is a new revision. If the page is the first in a document
|
||||||
// then the corresponding document title will also be changed.
|
// then the corresponding document title will also be changed.
|
||||||
func UpdateDocumentPage(w http.ResponseWriter, r *http.Request) {
|
func UpdateDocumentPage(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if IsInvalidLicense() {
|
||||||
|
util.WriteBadLicense(w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
method := "UpdateDocumentPage"
|
method := "UpdateDocumentPage"
|
||||||
p := request.GetPersister(r)
|
p := request.GetPersister(r)
|
||||||
params := mux.Vars(r)
|
params := mux.Vars(r)
|
||||||
|
@ -540,6 +560,11 @@ func UpdateDocumentPage(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
// ChangeDocumentPageSequence will swap page sequence for a given number of pages.
|
// ChangeDocumentPageSequence will swap page sequence for a given number of pages.
|
||||||
func ChangeDocumentPageSequence(w http.ResponseWriter, r *http.Request) {
|
func ChangeDocumentPageSequence(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if IsInvalidLicense() {
|
||||||
|
util.WriteBadLicense(w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
method := "ChangeDocumentPageSequence"
|
method := "ChangeDocumentPageSequence"
|
||||||
p := request.GetPersister(r)
|
p := request.GetPersister(r)
|
||||||
|
|
||||||
|
@ -598,6 +623,11 @@ func ChangeDocumentPageSequence(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
// ChangeDocumentPageLevel handles page indent/outdent changes.
|
// ChangeDocumentPageLevel handles page indent/outdent changes.
|
||||||
func ChangeDocumentPageLevel(w http.ResponseWriter, r *http.Request) {
|
func ChangeDocumentPageLevel(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if IsInvalidLicense() {
|
||||||
|
util.WriteBadLicense(w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
method := "ChangeDocumentPageLevel"
|
method := "ChangeDocumentPageLevel"
|
||||||
p := request.GetPersister(r)
|
p := request.GetPersister(r)
|
||||||
|
|
||||||
|
@ -740,6 +770,11 @@ func GetPageMoveCopyTargets(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
// GetDocumentRevisions returns all changes for a document.
|
// GetDocumentRevisions returns all changes for a document.
|
||||||
func GetDocumentRevisions(w http.ResponseWriter, r *http.Request) {
|
func GetDocumentRevisions(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if IsInvalidLicense() {
|
||||||
|
util.WriteBadLicense(w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
method := "GetDocumentPageRevisions"
|
method := "GetDocumentPageRevisions"
|
||||||
p := request.GetPersister(r)
|
p := request.GetPersister(r)
|
||||||
|
|
||||||
|
@ -770,6 +805,11 @@ func GetDocumentRevisions(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
// GetDocumentPageRevisions returns all changes for a given page.
|
// GetDocumentPageRevisions returns all changes for a given page.
|
||||||
func GetDocumentPageRevisions(w http.ResponseWriter, r *http.Request) {
|
func GetDocumentPageRevisions(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if IsInvalidLicense() {
|
||||||
|
util.WriteBadLicense(w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
method := "GetDocumentPageRevisions"
|
method := "GetDocumentPageRevisions"
|
||||||
p := request.GetPersister(r)
|
p := request.GetPersister(r)
|
||||||
|
|
||||||
|
@ -807,6 +847,11 @@ func GetDocumentPageRevisions(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
// GetDocumentPageDiff returns HTML diff between two revisions of a given page.
|
// GetDocumentPageDiff returns HTML diff between two revisions of a given page.
|
||||||
func GetDocumentPageDiff(w http.ResponseWriter, r *http.Request) {
|
func GetDocumentPageDiff(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if IsInvalidLicense() {
|
||||||
|
util.WriteBadLicense(w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
method := "GetDocumentPageDiff"
|
method := "GetDocumentPageDiff"
|
||||||
p := request.GetPersister(r)
|
p := request.GetPersister(r)
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,11 @@ import (
|
||||||
|
|
||||||
// AddPin saves pinned item.
|
// AddPin saves pinned item.
|
||||||
func AddPin(w http.ResponseWriter, r *http.Request) {
|
func AddPin(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if IsInvalidLicense() {
|
||||||
|
util.WriteBadLicense(w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
method := "AddPin"
|
method := "AddPin"
|
||||||
p := request.GetPersister(r)
|
p := request.GetPersister(r)
|
||||||
params := mux.Vars(r)
|
params := mux.Vars(r)
|
||||||
|
@ -131,6 +136,11 @@ func GetUserPins(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
// DeleteUserPin removes saved user pin.
|
// DeleteUserPin removes saved user pin.
|
||||||
func DeleteUserPin(w http.ResponseWriter, r *http.Request) {
|
func DeleteUserPin(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if IsInvalidLicense() {
|
||||||
|
util.WriteBadLicense(w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
method := "DeleteUserPin"
|
method := "DeleteUserPin"
|
||||||
p := request.GetPersister(r)
|
p := request.GetPersister(r)
|
||||||
params := mux.Vars(r)
|
params := mux.Vars(r)
|
||||||
|
@ -175,6 +185,11 @@ func DeleteUserPin(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
// UpdatePinSequence records order of pinned items.
|
// UpdatePinSequence records order of pinned items.
|
||||||
func UpdatePinSequence(w http.ResponseWriter, r *http.Request) {
|
func UpdatePinSequence(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if IsInvalidLicense() {
|
||||||
|
util.WriteBadLicense(w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
method := "UpdatePinSequence"
|
method := "UpdatePinSequence"
|
||||||
p := request.GetPersister(r)
|
p := request.GetPersister(r)
|
||||||
params := mux.Vars(r)
|
params := mux.Vars(r)
|
||||||
|
|
|
@ -185,6 +185,11 @@ func RefreshSections(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
// AddBlock inserts new reusable content block into database.
|
// AddBlock inserts new reusable content block into database.
|
||||||
func AddBlock(w http.ResponseWriter, r *http.Request) {
|
func AddBlock(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if IsInvalidLicense() {
|
||||||
|
util.WriteBadLicense(w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
method := "AddBlock"
|
method := "AddBlock"
|
||||||
p := request.GetPersister(r)
|
p := request.GetPersister(r)
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ var Product core.ProdInfo
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Product.Major = "0"
|
Product.Major = "0"
|
||||||
Product.Minor = "42"
|
Product.Minor = "43"
|
||||||
Product.Patch = "0"
|
Product.Patch = "0"
|
||||||
Product.Version = fmt.Sprintf("%s.%s.%s", Product.Major, Product.Minor, Product.Patch)
|
Product.Version = fmt.Sprintf("%s.%s.%s", Product.Major, Product.Minor, Product.Patch)
|
||||||
Product.Edition = "Community"
|
Product.Edition = "Community"
|
||||||
|
|
|
@ -36,6 +36,11 @@ import (
|
||||||
|
|
||||||
// SaveAsTemplate saves existing document as a template.
|
// SaveAsTemplate saves existing document as a template.
|
||||||
func SaveAsTemplate(w http.ResponseWriter, r *http.Request) {
|
func SaveAsTemplate(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if IsInvalidLicense() {
|
||||||
|
util.WriteBadLicense(w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
method := "SaveAsTemplate"
|
method := "SaveAsTemplate"
|
||||||
p := request.GetPersister(r)
|
p := request.GetPersister(r)
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,11 @@ import (
|
||||||
|
|
||||||
// AddUser is the endpoint that enables an administrator to add a new user for their orgaisation.
|
// AddUser is the endpoint that enables an administrator to add a new user for their orgaisation.
|
||||||
func AddUser(w http.ResponseWriter, r *http.Request) {
|
func AddUser(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if IsInvalidLicense() {
|
||||||
|
util.WriteBadLicense(w)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
method := "AddUser"
|
method := "AddUser"
|
||||||
p := request.GetPersister(r)
|
p := request.GetPersister(r)
|
||||||
|
|
||||||
|
|
|
@ -341,6 +341,8 @@ type SiteMeta struct {
|
||||||
URL string `json:"url"`
|
URL string `json:"url"`
|
||||||
AllowAnonymousAccess bool `json:"allowAnonymousAccess"`
|
AllowAnonymousAccess bool `json:"allowAnonymousAccess"`
|
||||||
Version string `json:"version"`
|
Version string `json:"version"`
|
||||||
|
Edition string `json:"edition"`
|
||||||
|
Valid bool `json:"valid"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Template is used to create a new document.
|
// Template is used to create a new document.
|
||||||
|
|
|
@ -164,3 +164,17 @@ func WriteJSON(w http.ResponseWriter, v interface{}) {
|
||||||
_, err = w.Write(j)
|
_, err = w.Write(j)
|
||||||
log.IfErr(err)
|
log.IfErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WriteBadLicense writes 402 when license is invalid
|
||||||
|
func WriteBadLicense(w http.ResponseWriter) {
|
||||||
|
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||||||
|
w.WriteHeader(http.StatusPaymentRequired)
|
||||||
|
var e struct {
|
||||||
|
Reason string
|
||||||
|
}
|
||||||
|
e.Reason = "invalid or expired Documize license"
|
||||||
|
|
||||||
|
j, _ := json.Marshal(e)
|
||||||
|
_, err := w.Write(j)
|
||||||
|
log.IfErr(err)
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue