mirror of
https://github.com/unidoc/unioffice.git
synced 2025-04-29 13:49:10 +08:00

This caused problems with Libre. This reverts commit 59b2711e1b87be534c9cd3d155710d13cfe7743b.
253 lines
7.7 KiB
Go
253 lines
7.7 KiB
Go
// Copyright 2017 Baliance. All rights reserved.
|
|
//
|
|
// Use of this source code is governed by the terms of the Affero GNU General
|
|
// Public License version 3.0 as published by the Free Software Foundation and
|
|
// appearing in the file LICENSE included in the packaging of this file. A
|
|
// commercial license can be purchased by contacting sales@baliance.com.
|
|
|
|
package spreadsheetml
|
|
|
|
import (
|
|
"encoding/xml"
|
|
"fmt"
|
|
"strconv"
|
|
)
|
|
|
|
type CT_WorkbookProtection struct {
|
|
// Legacy Workbook Password
|
|
WorkbookPasswordAttr *string
|
|
// Workbook Password Character Set
|
|
WorkbookPasswordCharacterSetAttr *string
|
|
// Legacy Revisions Password
|
|
RevisionsPasswordAttr *string
|
|
// Revisions Password Character Set
|
|
RevisionsPasswordCharacterSetAttr *string
|
|
// Lock Structure
|
|
LockStructureAttr *bool
|
|
// Lock Windows
|
|
LockWindowsAttr *bool
|
|
// Lock Revisions
|
|
LockRevisionAttr *bool
|
|
// Cryptographic Algorithm Name
|
|
RevisionsAlgorithmNameAttr *string
|
|
// Password Hash Value
|
|
RevisionsHashValueAttr *string
|
|
// Salt Value for Password Verifier
|
|
RevisionsSaltValueAttr *string
|
|
// Iterations to Run Hashing Algorithm
|
|
RevisionsSpinCountAttr *uint32
|
|
// Cryptographic Algorithm Name
|
|
WorkbookAlgorithmNameAttr *string
|
|
// Password Hash Value
|
|
WorkbookHashValueAttr *string
|
|
// Salt Value for Password Verifier
|
|
WorkbookSaltValueAttr *string
|
|
// Iterations to Run Hashing Algorithm
|
|
WorkbookSpinCountAttr *uint32
|
|
}
|
|
|
|
func NewCT_WorkbookProtection() *CT_WorkbookProtection {
|
|
ret := &CT_WorkbookProtection{}
|
|
return ret
|
|
}
|
|
|
|
func (m *CT_WorkbookProtection) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
|
|
if m.WorkbookPasswordAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "workbookPassword"},
|
|
Value: fmt.Sprintf("%v", *m.WorkbookPasswordAttr)})
|
|
}
|
|
if m.WorkbookPasswordCharacterSetAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "workbookPasswordCharacterSet"},
|
|
Value: fmt.Sprintf("%v", *m.WorkbookPasswordCharacterSetAttr)})
|
|
}
|
|
if m.RevisionsPasswordAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "revisionsPassword"},
|
|
Value: fmt.Sprintf("%v", *m.RevisionsPasswordAttr)})
|
|
}
|
|
if m.RevisionsPasswordCharacterSetAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "revisionsPasswordCharacterSet"},
|
|
Value: fmt.Sprintf("%v", *m.RevisionsPasswordCharacterSetAttr)})
|
|
}
|
|
if m.LockStructureAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "lockStructure"},
|
|
Value: fmt.Sprintf("%d", b2i(*m.LockStructureAttr))})
|
|
}
|
|
if m.LockWindowsAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "lockWindows"},
|
|
Value: fmt.Sprintf("%d", b2i(*m.LockWindowsAttr))})
|
|
}
|
|
if m.LockRevisionAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "lockRevision"},
|
|
Value: fmt.Sprintf("%d", b2i(*m.LockRevisionAttr))})
|
|
}
|
|
if m.RevisionsAlgorithmNameAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "revisionsAlgorithmName"},
|
|
Value: fmt.Sprintf("%v", *m.RevisionsAlgorithmNameAttr)})
|
|
}
|
|
if m.RevisionsHashValueAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "revisionsHashValue"},
|
|
Value: fmt.Sprintf("%v", *m.RevisionsHashValueAttr)})
|
|
}
|
|
if m.RevisionsSaltValueAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "revisionsSaltValue"},
|
|
Value: fmt.Sprintf("%v", *m.RevisionsSaltValueAttr)})
|
|
}
|
|
if m.RevisionsSpinCountAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "revisionsSpinCount"},
|
|
Value: fmt.Sprintf("%v", *m.RevisionsSpinCountAttr)})
|
|
}
|
|
if m.WorkbookAlgorithmNameAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "workbookAlgorithmName"},
|
|
Value: fmt.Sprintf("%v", *m.WorkbookAlgorithmNameAttr)})
|
|
}
|
|
if m.WorkbookHashValueAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "workbookHashValue"},
|
|
Value: fmt.Sprintf("%v", *m.WorkbookHashValueAttr)})
|
|
}
|
|
if m.WorkbookSaltValueAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "workbookSaltValue"},
|
|
Value: fmt.Sprintf("%v", *m.WorkbookSaltValueAttr)})
|
|
}
|
|
if m.WorkbookSpinCountAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "workbookSpinCount"},
|
|
Value: fmt.Sprintf("%v", *m.WorkbookSpinCountAttr)})
|
|
}
|
|
e.EncodeToken(start)
|
|
e.EncodeToken(xml.EndElement{Name: start.Name})
|
|
return nil
|
|
}
|
|
|
|
func (m *CT_WorkbookProtection) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
|
|
// initialize to default
|
|
for _, attr := range start.Attr {
|
|
if attr.Name.Local == "workbookPassword" {
|
|
parsed, err := attr.Value, error(nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.WorkbookPasswordAttr = &parsed
|
|
}
|
|
if attr.Name.Local == "workbookPasswordCharacterSet" {
|
|
parsed, err := attr.Value, error(nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.WorkbookPasswordCharacterSetAttr = &parsed
|
|
}
|
|
if attr.Name.Local == "revisionsPassword" {
|
|
parsed, err := attr.Value, error(nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.RevisionsPasswordAttr = &parsed
|
|
}
|
|
if attr.Name.Local == "revisionsPasswordCharacterSet" {
|
|
parsed, err := attr.Value, error(nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.RevisionsPasswordCharacterSetAttr = &parsed
|
|
}
|
|
if attr.Name.Local == "lockStructure" {
|
|
parsed, err := strconv.ParseBool(attr.Value)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.LockStructureAttr = &parsed
|
|
}
|
|
if attr.Name.Local == "lockWindows" {
|
|
parsed, err := strconv.ParseBool(attr.Value)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.LockWindowsAttr = &parsed
|
|
}
|
|
if attr.Name.Local == "lockRevision" {
|
|
parsed, err := strconv.ParseBool(attr.Value)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.LockRevisionAttr = &parsed
|
|
}
|
|
if attr.Name.Local == "revisionsAlgorithmName" {
|
|
parsed, err := attr.Value, error(nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.RevisionsAlgorithmNameAttr = &parsed
|
|
}
|
|
if attr.Name.Local == "revisionsHashValue" {
|
|
parsed, err := attr.Value, error(nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.RevisionsHashValueAttr = &parsed
|
|
}
|
|
if attr.Name.Local == "revisionsSaltValue" {
|
|
parsed, err := attr.Value, error(nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.RevisionsSaltValueAttr = &parsed
|
|
}
|
|
if attr.Name.Local == "revisionsSpinCount" {
|
|
parsed, err := strconv.ParseUint(attr.Value, 10, 32)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
pt := uint32(parsed)
|
|
m.RevisionsSpinCountAttr = &pt
|
|
}
|
|
if attr.Name.Local == "workbookAlgorithmName" {
|
|
parsed, err := attr.Value, error(nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.WorkbookAlgorithmNameAttr = &parsed
|
|
}
|
|
if attr.Name.Local == "workbookHashValue" {
|
|
parsed, err := attr.Value, error(nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.WorkbookHashValueAttr = &parsed
|
|
}
|
|
if attr.Name.Local == "workbookSaltValue" {
|
|
parsed, err := attr.Value, error(nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.WorkbookSaltValueAttr = &parsed
|
|
}
|
|
if attr.Name.Local == "workbookSpinCount" {
|
|
parsed, err := strconv.ParseUint(attr.Value, 10, 32)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
pt := uint32(parsed)
|
|
m.WorkbookSpinCountAttr = &pt
|
|
}
|
|
}
|
|
// skip any extensions we may find, but don't support
|
|
for {
|
|
tok, err := d.Token()
|
|
if err != nil {
|
|
return fmt.Errorf("parsing CT_WorkbookProtection: %s", err)
|
|
}
|
|
if el, ok := tok.(xml.EndElement); ok && el.Name == start.Name {
|
|
break
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Validate validates the CT_WorkbookProtection and its children
|
|
func (m *CT_WorkbookProtection) Validate() error {
|
|
return m.ValidateWithPath("CT_WorkbookProtection")
|
|
}
|
|
|
|
// ValidateWithPath validates the CT_WorkbookProtection and its children, prefixing error messages with path
|
|
func (m *CT_WorkbookProtection) ValidateWithPath(path string) error {
|
|
return nil
|
|
}
|