move subject related server functions to subject
This commit is contained in:
parent
039f72c3d5
commit
b9c2539073
|
@ -31,109 +31,3 @@ func (s *Server) store(res *pkiadm.Result) error {
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) CreateSubject(inSubj pkiadm.Subject, res *pkiadm.Result) error {
|
|
||||||
s.lock()
|
|
||||||
defer s.unlock()
|
|
||||||
|
|
||||||
subj, err := NewSubject(inSubj.ID, inSubj.Name)
|
|
||||||
if err != nil {
|
|
||||||
res.SetError(err, "Could not create new subject '%s'", inSubj.ID)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
if err := s.storage.AddSubject(subj); err != nil {
|
|
||||||
res.SetError(err, "Could not add subject '%s'", inSubj.ID)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return s.store(res)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Server) SetSubject(changeset pkiadm.SubjectChange, res *pkiadm.Result) error {
|
|
||||||
s.lock()
|
|
||||||
defer s.unlock()
|
|
||||||
|
|
||||||
subj, err := s.storage.GetSubject(ResourceName{ID: changeset.Subject.ID, Type: RTSubject})
|
|
||||||
if err != nil {
|
|
||||||
res.SetError(err, "Could not find subject '%s'", changeset.Subject.ID)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
changes := changeset.Subject.Name
|
|
||||||
for _, field := range changeset.FieldList {
|
|
||||||
switch field {
|
|
||||||
case "serial":
|
|
||||||
subj.Data.SerialNumber = changes.SerialNumber
|
|
||||||
case "common-name":
|
|
||||||
subj.Data.CommonName = changes.CommonName
|
|
||||||
case "country":
|
|
||||||
subj.Data.Country = changes.Country
|
|
||||||
case "org":
|
|
||||||
subj.Data.Organization = changes.Organization
|
|
||||||
case "org-unit":
|
|
||||||
subj.Data.OrganizationalUnit = changes.OrganizationalUnit
|
|
||||||
case "locality":
|
|
||||||
subj.Data.Locality = changes.Locality
|
|
||||||
case "province":
|
|
||||||
subj.Data.Province = changes.Province
|
|
||||||
case "street":
|
|
||||||
subj.Data.StreetAddress = changes.StreetAddress
|
|
||||||
case "code":
|
|
||||||
subj.Data.PostalCode = changes.PostalCode
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if err := s.storage.Update(ResourceName{ID: subj.ID, Type: RTSubject}); err != nil {
|
|
||||||
res.SetError(err, "Could update resource '%s'", changeset.Subject.ID)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return s.store(res)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Server) ListSubjects(filter pkiadm.Filter, res *pkiadm.ResultSubjects) error {
|
|
||||||
s.lock()
|
|
||||||
defer s.unlock()
|
|
||||||
|
|
||||||
for _, subj := range s.storage.Subjects {
|
|
||||||
res.Subjects = append(res.Subjects, pkiadm.Subject{
|
|
||||||
ID: subj.ID,
|
|
||||||
Name: subj.GetName(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Server) DeleteSubject(inSubj pkiadm.ResourceName, res *pkiadm.Result) error {
|
|
||||||
s.lock()
|
|
||||||
defer s.unlock()
|
|
||||||
|
|
||||||
subj, err := s.storage.Get(ResourceName{ID: inSubj.ID, Type: RTSubject})
|
|
||||||
if err == ENotFound {
|
|
||||||
return nil
|
|
||||||
} else if err != nil {
|
|
||||||
res.SetError(err, "Could not find resource '%s'", inSubj)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
if err := s.storage.Remove(subj); err != nil {
|
|
||||||
res.SetError(err, "Could not remove subject '%s'", inSubj)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return s.store(res)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Server) ShowSubject(inSubj pkiadm.ResourceName, res *pkiadm.ResultSubjects) error {
|
|
||||||
s.lock()
|
|
||||||
defer s.unlock()
|
|
||||||
|
|
||||||
subj, err := s.storage.GetSubject(ResourceName{ID: inSubj.ID, Type: RTSubject})
|
|
||||||
if err == ENotFound {
|
|
||||||
return nil
|
|
||||||
} else if err != nil {
|
|
||||||
res.Result.SetError(err, "could not find resource '%s'", inSubj)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
res.Subjects = []pkiadm.Subject{
|
|
||||||
pkiadm.Subject{
|
|
||||||
ID: subj.ID,
|
|
||||||
Name: subj.GetName(),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
|
@ -2,6 +2,8 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/x509/pkix"
|
"crypto/x509/pkix"
|
||||||
|
|
||||||
|
"github.com/gibheer/pkiadm"
|
||||||
)
|
)
|
||||||
|
|
||||||
type (
|
type (
|
||||||
|
@ -39,3 +41,115 @@ func (sub *Subject) DependsOn() []ResourceName { return []ResourceName{} }
|
||||||
func (sub *Subject) GetName() pkix.Name {
|
func (sub *Subject) GetName() pkix.Name {
|
||||||
return sub.Data
|
return sub.Data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CreateSubject is the RPC endpoint to create a new subject.
|
||||||
|
func (s *Server) CreateSubject(inSubj pkiadm.Subject, res *pkiadm.Result) error {
|
||||||
|
s.lock()
|
||||||
|
defer s.unlock()
|
||||||
|
|
||||||
|
subj, err := NewSubject(inSubj.ID, inSubj.Name)
|
||||||
|
if err != nil {
|
||||||
|
res.SetError(err, "Could not create new subject '%s'", inSubj.ID)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if err := s.storage.AddSubject(subj); err != nil {
|
||||||
|
res.SetError(err, "Could not add subject '%s'", inSubj.ID)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return s.store(res)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSubject is the RPC endpoint to adjust fields on a subject.
|
||||||
|
func (s *Server) SetSubject(changeset pkiadm.SubjectChange, res *pkiadm.Result) error {
|
||||||
|
s.lock()
|
||||||
|
defer s.unlock()
|
||||||
|
|
||||||
|
subj, err := s.storage.GetSubject(ResourceName{ID: changeset.Subject.ID, Type: RTSubject})
|
||||||
|
if err != nil {
|
||||||
|
res.SetError(err, "Could not find subject '%s'", changeset.Subject.ID)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
changes := changeset.Subject.Name
|
||||||
|
for _, field := range changeset.FieldList {
|
||||||
|
switch field {
|
||||||
|
case "serial":
|
||||||
|
subj.Data.SerialNumber = changes.SerialNumber
|
||||||
|
case "common-name":
|
||||||
|
subj.Data.CommonName = changes.CommonName
|
||||||
|
case "country":
|
||||||
|
subj.Data.Country = changes.Country
|
||||||
|
case "org":
|
||||||
|
subj.Data.Organization = changes.Organization
|
||||||
|
case "org-unit":
|
||||||
|
subj.Data.OrganizationalUnit = changes.OrganizationalUnit
|
||||||
|
case "locality":
|
||||||
|
subj.Data.Locality = changes.Locality
|
||||||
|
case "province":
|
||||||
|
subj.Data.Province = changes.Province
|
||||||
|
case "street":
|
||||||
|
subj.Data.StreetAddress = changes.StreetAddress
|
||||||
|
case "code":
|
||||||
|
subj.Data.PostalCode = changes.PostalCode
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := s.storage.Update(ResourceName{ID: subj.ID, Type: RTSubject}); err != nil {
|
||||||
|
res.SetError(err, "Could update resource '%s'", changeset.Subject.ID)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return s.store(res)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListSubjects is the RPC endpoint to list all available subjects.
|
||||||
|
func (s *Server) ListSubjects(filter pkiadm.Filter, res *pkiadm.ResultSubjects) error {
|
||||||
|
s.lock()
|
||||||
|
defer s.unlock()
|
||||||
|
|
||||||
|
for _, subj := range s.storage.Subjects {
|
||||||
|
res.Subjects = append(res.Subjects, pkiadm.Subject{
|
||||||
|
ID: subj.ID,
|
||||||
|
Name: subj.GetName(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteSubject is the RPC endpoint to delete a subject.
|
||||||
|
func (s *Server) DeleteSubject(inSubj pkiadm.ResourceName, res *pkiadm.Result) error {
|
||||||
|
s.lock()
|
||||||
|
defer s.unlock()
|
||||||
|
|
||||||
|
subj, err := s.storage.Get(ResourceName{ID: inSubj.ID, Type: RTSubject})
|
||||||
|
if err == ENotFound {
|
||||||
|
return nil
|
||||||
|
} else if err != nil {
|
||||||
|
res.SetError(err, "Could not find resource '%s'", inSubj)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if err := s.storage.Remove(subj); err != nil {
|
||||||
|
res.SetError(err, "Could not remove subject '%s'", inSubj)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return s.store(res)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ShowSubject is the RPC endpoint to get a single subject resource for detailed
|
||||||
|
// inspection.
|
||||||
|
func (s *Server) ShowSubject(inSubj pkiadm.ResourceName, res *pkiadm.ResultSubjects) error {
|
||||||
|
s.lock()
|
||||||
|
defer s.unlock()
|
||||||
|
|
||||||
|
subj, err := s.storage.GetSubject(ResourceName{ID: inSubj.ID, Type: RTSubject})
|
||||||
|
if err == ENotFound {
|
||||||
|
return nil
|
||||||
|
} else if err != nil {
|
||||||
|
res.Result.SetError(err, "could not find resource '%s'", inSubj)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
res.Subjects = []pkiadm.Subject{
|
||||||
|
pkiadm.Subject{
|
||||||
|
ID: subj.ID,
|
||||||
|
Name: subj.GetName(),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue