1
0
Fork 0
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:
Harvey Kandola 2017-02-23 16:39:23 -08:00
parent edccb39019
commit a4e3264e0c
19 changed files with 146 additions and 19 deletions

View file

@ -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

View file

@ -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 !!`);
}
}
}); });

View file

@ -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('/');
}, },

View file

@ -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`, {

View file

@ -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>

View file

@ -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,
}; };

View file

@ -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": "",

View file

@ -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

View file

@ -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")

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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"

View file

@ -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)

View file

@ -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)

View file

@ -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.

View file

@ -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)
}