From b9c2539073cf95a7e0e4d066582db7d8bc79b965 Mon Sep 17 00:00:00 2001 From: Gibheer Date: Sun, 28 May 2017 21:36:16 +0200 Subject: [PATCH] move subject related server functions to subject --- cmd/pkiadmd/server.go | 106 -------------------------------------- cmd/pkiadmd/subject.go | 114 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+), 106 deletions(-) diff --git a/cmd/pkiadmd/server.go b/cmd/pkiadmd/server.go index a155e3f..1c1f25f 100644 --- a/cmd/pkiadmd/server.go +++ b/cmd/pkiadmd/server.go @@ -31,109 +31,3 @@ func (s *Server) store(res *pkiadm.Result) error { } 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 -} diff --git a/cmd/pkiadmd/subject.go b/cmd/pkiadmd/subject.go index 1c8953f..9bb55f5 100644 --- a/cmd/pkiadmd/subject.go +++ b/cmd/pkiadmd/subject.go @@ -2,6 +2,8 @@ package main import ( "crypto/x509/pkix" + + "github.com/gibheer/pkiadm" ) type ( @@ -39,3 +41,115 @@ func (sub *Subject) DependsOn() []ResourceName { return []ResourceName{} } func (sub *Subject) GetName() pkix.Name { 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 +}